diff --git a/src/android/customCamera/res/layout/activity_camera_view.xml b/src/android/customCamera/res/layout/activity_camera_view.xml
index 5da06d8..045b79f 100644
--- a/src/android/customCamera/res/layout/activity_camera_view.xml
+++ b/src/android/customCamera/res/layout/activity_camera_view.xml
@@ -11,6 +11,11 @@
android:layout_alignParentTop="true" >
+
+
4f)
+ opt.inSampleSize = 4;
+ else if (res > 3f)
+ opt.inSampleSize = 2;
+
+ // Preview from camera
+ storedBitmap = BitmapFactory.decodeByteArray(data, 0, data.length,opt);
// Event started after accept picture.
accept.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- 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);
-
+ try {
// Matrix to perform rotation
Matrix mat = new Matrix();
float redirect = redirectPhotoInGallery();
@@ -502,7 +523,7 @@ public class CameraActivity extends Activity {
// If mode miniature and photo is declined, the miniature goes back to the bottom
if (modeMiniature) {
- ImageView imageView = (ImageView) findViewById(R.id.background);
+ imageView = (ImageView) findViewById(R.id.background);
setParamsMiniature(imageView, false);
}
@@ -632,7 +653,7 @@ public class CameraActivity extends Activity {
}
// set image at the view.
- ImageView imageView = (ImageView) findViewById(R.id.background);
+ imageView = (ImageView) findViewById(R.id.background);
imageView.setImageBitmap(imgBackgroundBitmap);
paramsMiniature.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
@@ -642,13 +663,77 @@ public class CameraActivity extends Activity {
@Override
protected void onSaveInstanceState(Bundle outState) {
- // TODO Auto-generated method stub
- super.onSaveInstanceState(outState);
+ outState.putBoolean("modeMiniature", modeMiniature);
+ outState.putBoolean("photoTaken", photoTaken);
+ outState.putParcelable("storedBitmap", storedBitmap);
+ super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onRestoreInstanceState(savedInstanceState);
+ // We get the last value of modeMiniature
+ modeMiniature = savedInstanceState.getBoolean("modeMiniature");
+ // We get the last value of photoTaken
+ photoTaken = savedInstanceState.getBoolean("photoTaken");
+ storedBitmap = savedInstanceState.getParcelable("storedBitmap");
+
+ // If the miniature is on when we rotate
+ if (modeMiniature) {
+ imageView = (ImageView) findViewById(R.id.background);
+ setParamsMiniature(imageView, false);
+ modeMiniature = false;
+ }
+
+ if (photoTaken) {
+ // Matrix to perform rotation
+ Matrix mat = new Matrix();
+ mat.postRotate(270);
+
+ // Creation of the bitmap
+ storedBitmap = Bitmap.createBitmap(storedBitmap, 0, 0, storedBitmap.getWidth(), storedBitmap.getHeight(), mat, true);
+ Bitmap newBitmap = resizeAfterRotate(storedBitmap);
+ ImageView photoResized = (ImageView) findViewById(R.id.photoResized);
+ photoResized.setImageBitmap(newBitmap);
+ imageView = (ImageView) findViewById(R.id.background);
+ preview.setVisibility(View.INVISIBLE);
+ }
+
+ super.onRestoreInstanceState(savedInstanceState);
+ }
+
+ /**
+ * Resize the bitmap saved when you rotate the device.
+ *
+ * @param Bitmap bitmap The original bitmap
+ *
+ * @return the new bitmap.
+ */
+ protected Bitmap resizeAfterRotate(Bitmap bitmap){
+ // Initialize the new bitmap resized
+ Bitmap newBitmap = null;
+
+ // Get sizes screen.
+ Display defaultDisplay = getWindowManager().getDefaultDisplay();
+ DisplayMetrics displayMetrics = new DisplayMetrics();
+ defaultDisplay.getMetrics(displayMetrics);
+ int displayWidthPx = (int) displayMetrics.widthPixels;
+ int displayHeightPx = (int) displayMetrics.heightPixels;
+
+ // Get sizes picture.
+ int widthBackground = (int) (bitmap.getWidth() * displayMetrics.density);
+ int heightBackground = (int) (bitmap.getHeight() * displayMetrics.density);
+
+ // Change size ImageView.
+ float ratioX = (float) displayWidthPx / (float) widthBackground;
+ float ratioY = (float) displayHeightPx / (float) heightBackground;
+ if (ratioX < ratioY && ratioX < 1) {
+ System.out.println("OK");
+ newBitmap = Bitmap.createScaledBitmap(bitmap, (int) displayWidthPx, (int) (ratioX * heightBackground), false);
+ } else if (ratioX >= ratioY && ratioY < 1) {
+ System.out.println("OK2");
+ newBitmap = Bitmap.createScaledBitmap(bitmap, (int) (ratioY * widthBackground), (int) displayHeightPx, false);
+ }
+
+ return newBitmap;
}
}