mirror of
https://gitee.com/shuto/customCamera.git
synced 2024-10-06 18:32:07 +08:00
commit
cabef8d234
@ -3,6 +3,7 @@ package org.geneanet.customcamera;
|
|||||||
// DON'T DELETE THIS LINE, IT'S NECESSARY FOR THE CORDOVA PLUGIN.
|
// DON'T DELETE THIS LINE, IT'S NECESSARY FOR THE CORDOVA PLUGIN.
|
||||||
import org.geneanet.customcamera.*;
|
import org.geneanet.customcamera.*;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -11,10 +12,15 @@ import android.app.Activity;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.Bitmap.CompressFormat;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.graphics.Matrix;
|
||||||
import android.hardware.Camera;
|
import android.hardware.Camera;
|
||||||
|
import android.hardware.Camera.CameraInfo;
|
||||||
|
import android.hardware.Camera.Parameters;
|
||||||
import android.hardware.Camera.PictureCallback;
|
import android.hardware.Camera.PictureCallback;
|
||||||
import android.hardware.Camera.ShutterCallback;
|
import android.hardware.Camera.ShutterCallback;
|
||||||
|
import android.hardware.Camera.Size;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
@ -422,6 +428,36 @@ public class CameraActivity extends Activity {
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
try {
|
try {
|
||||||
|
BitmapFactory.Options opt;
|
||||||
|
opt = new BitmapFactory.Options();
|
||||||
|
// Temp storage to use for decoding
|
||||||
|
opt.inTempStorage = new byte[16 * 1024];
|
||||||
|
Parameters parameters = mCamera.getParameters();
|
||||||
|
Size size = parameters.getPictureSize();
|
||||||
|
|
||||||
|
int height = size.height;
|
||||||
|
int width = size.width;
|
||||||
|
float res = (width * height) / 1024000;
|
||||||
|
|
||||||
|
// Return a smaller image for now
|
||||||
|
if (res > 4f)
|
||||||
|
opt.inSampleSize = 4;
|
||||||
|
else if (res > 3f)
|
||||||
|
opt.inSampleSize = 2;
|
||||||
|
|
||||||
|
// Preview from camera
|
||||||
|
Bitmap storedBitmap = BitmapFactory.decodeByteArray(data, 0, data.length,opt);
|
||||||
|
|
||||||
|
// Matrix to perform rotation
|
||||||
|
Matrix mat = new Matrix();
|
||||||
|
float redirect = redirectPhotoInGallery();
|
||||||
|
mat.postRotate(redirect);
|
||||||
|
|
||||||
|
// Creation of the bitmap
|
||||||
|
storedBitmap = Bitmap.createBitmap(storedBitmap, 0, 0, storedBitmap.getWidth(), storedBitmap.getHeight(), mat, true);
|
||||||
|
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
||||||
|
storedBitmap.compress(CompressFormat.JPEG, 70, stream);
|
||||||
|
|
||||||
photoTaken = false;
|
photoTaken = false;
|
||||||
// Get path picture to storage.
|
// Get path picture to storage.
|
||||||
String pathPicture = Environment.getExternalStorageDirectory().getPath()+"/"+Environment.DIRECTORY_DCIM+"/Camera/";
|
String pathPicture = Environment.getExternalStorageDirectory().getPath()+"/"+Environment.DIRECTORY_DCIM+"/Camera/";
|
||||||
@ -429,7 +465,7 @@ public class CameraActivity extends Activity {
|
|||||||
|
|
||||||
// Write data in file.
|
// Write data in file.
|
||||||
FileOutputStream outStream = new FileOutputStream(pathPicture);
|
FileOutputStream outStream = new FileOutputStream(pathPicture);
|
||||||
outStream.write(data);
|
outStream.write(stream.toByteArray());
|
||||||
outStream.close();
|
outStream.close();
|
||||||
|
|
||||||
// Return to success & finish current activity.
|
// Return to success & finish current activity.
|
||||||
@ -467,6 +503,58 @@ public class CameraActivity extends Activity {
|
|||||||
mCamera.takePicture(shutterCallback, rawCallback, jpegCallback);
|
mCamera.takePicture(shutterCallback, rawCallback, jpegCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To redirect (by rotation) the image stored in gallery
|
||||||
|
*
|
||||||
|
* @return integer
|
||||||
|
*/
|
||||||
|
public float redirectPhotoInGallery(){
|
||||||
|
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
|
||||||
|
int defaultOrientation = getDeviceDefaultOrientation();
|
||||||
|
int redirect = 0;
|
||||||
|
int orientationCamera = getOrientationOfCamera();
|
||||||
|
|
||||||
|
if (defaultOrientation == 1 || defaultOrientation == 2) {
|
||||||
|
switch(windowManager.getDefaultDisplay().getRotation()){
|
||||||
|
case 0 :
|
||||||
|
redirect = (defaultOrientation == 1) ? 90 : 0;
|
||||||
|
// If the device is in front camera by default
|
||||||
|
if (orientationCamera == 1 && defaultOrientation == 1) {
|
||||||
|
redirect = 270;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1 :
|
||||||
|
redirect = (defaultOrientation == 1) ? 0 : 270;
|
||||||
|
break;
|
||||||
|
case 2 :
|
||||||
|
redirect = (defaultOrientation == 1) ? 270 : 180;
|
||||||
|
// If the device is in front camera by default
|
||||||
|
if (orientationCamera == 1 && defaultOrientation == 1) {
|
||||||
|
redirect = 90;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3 :
|
||||||
|
redirect = (defaultOrientation == 1) ? 180 : 90;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return redirect;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the orientation of the current camera
|
||||||
|
*
|
||||||
|
* @return The orientation of the current camera (FRONT OR BACK)
|
||||||
|
*/
|
||||||
|
public int getOrientationOfCamera() {
|
||||||
|
CameraInfo info =new Camera.CameraInfo();
|
||||||
|
// Get info of the default camera (which is called by default)
|
||||||
|
Camera.getCameraInfo(0, info);
|
||||||
|
|
||||||
|
return info.facing;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* To get camera resource or stop this activity.
|
* To get camera resource or stop this activity.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user