From a9857c99f183510ee46c8965a1547c5f724dba13 Mon Sep 17 00:00:00 2001 From: tibbi Date: Thu, 16 Jun 2016 12:11:10 +0200 Subject: [PATCH] force image ratio 16:9 --- .../camera/PhotoProcessor.java | 14 -------------- .../com/simplemobiletools/camera/Preview.java | 17 +++++++++++++++-- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/simplemobiletools/camera/PhotoProcessor.java b/app/src/main/java/com/simplemobiletools/camera/PhotoProcessor.java index afe46567..aa0fb71f 100644 --- a/app/src/main/java/com/simplemobiletools/camera/PhotoProcessor.java +++ b/app/src/main/java/com/simplemobiletools/camera/PhotoProcessor.java @@ -36,7 +36,6 @@ public class PhotoProcessor extends AsyncTask { final FileOutputStream fos = new FileOutputStream(photoFile); /*Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); bitmap = setBitmapRotation(bitmap, photoFile.toString()); - bitmap = setAspectRatio(bitmap); bitmap = checkLandscape(bitmap); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);*/ @@ -97,17 +96,4 @@ public class PhotoProcessor extends AsyncTask { return bitmap; } - - private Bitmap setAspectRatio(Bitmap bitmap) { - final double wantedAspect = (double) 16 / (double) 9; - final double bmpWidth = bitmap.getWidth(); - final double bmpHeight = bitmap.getHeight(); - - if (bmpHeight / bmpWidth < wantedAspect) { - final double extraWidth = bmpWidth - (bmpHeight / wantedAspect); - final int startX = (int) (extraWidth / 2); - return Bitmap.createBitmap(bitmap, startX, 0, (int) (bmpWidth - extraWidth), (int) bmpHeight); - } - return bitmap; - } } diff --git a/app/src/main/java/com/simplemobiletools/camera/Preview.java b/app/src/main/java/com/simplemobiletools/camera/Preview.java index f46be232..1674e32f 100644 --- a/app/src/main/java/com/simplemobiletools/camera/Preview.java +++ b/app/src/main/java/com/simplemobiletools/camera/Preview.java @@ -26,6 +26,7 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O private static final String TAG = Preview.class.getSimpleName(); private static final int FOCUS_AREA_SIZE = 200; private static final int PHOTO_PREVIEW_LENGTH = 1000; + private static final float RATIO_TOLERANCE = 0.1f; private static SurfaceHolder surfaceHolder; private static Camera camera; @@ -199,12 +200,13 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O } }; - // limit the max picture size at 8 megapixels private Camera.Size getPictureSize() { List sizes = parameters.getSupportedPictureSizes(); Camera.Size maxSize = sizes.get(0); for (Camera.Size size : sizes) { - if (size.width * size.height < 9000000) { + final boolean isEightMegapixelsMax = isEightMegapixelsMax(size); + final boolean isSixteenToNine = isSixteenToNine(size); + if (isEightMegapixelsMax && isSixteenToNine) { maxSize = size; break; } @@ -212,6 +214,17 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O return maxSize; } + private boolean isEightMegapixelsMax(Camera.Size size) { + return size.width * size.height < 9000000; + } + + private boolean isSixteenToNine(Camera.Size size) { + final float currRatio = (float) size.height / size.width; + final float wantedRatio = (float) 9 / 16; + final float diff = Math.abs(currRatio - wantedRatio); + return diff < RATIO_TOLERANCE; + } + private void focusArea() { if (camera == null) return;