From 6a723fe9d537b09ec2807195cba1c53ae94d5e96 Mon Sep 17 00:00:00 2001 From: Christophe BOUCAUT Date: Thu, 9 Jul 2015 14:29:33 +0200 Subject: [PATCH] Set the best resolution for the picture taken. --- .../geneanet/customcamera/CameraActivity.java | 14 ++++++++ .../geneanet/customcamera/ManagerCamera.java | 32 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/android/customCamera/src/org/geneanet/customcamera/CameraActivity.java b/src/android/customCamera/src/org/geneanet/customcamera/CameraActivity.java index a870426..21e7c9e 100644 --- a/src/android/customCamera/src/org/geneanet/customcamera/CameraActivity.java +++ b/src/android/customCamera/src/org/geneanet/customcamera/CameraActivity.java @@ -1017,6 +1017,20 @@ public class CameraActivity extends Activity { Camera.Parameters camParameters = customCamera.getParameters(); camParameters.setPreviewSize(optimalSize.width, optimalSize.height); customCamera.setParameters(camParameters); + setPictureSizeFromPreviewSize(optimalSize); + } + + /** + * To set the picture size optimized on the preview size. + * @param Size previewSize + */ + private void setPictureSizeFromPreviewSize(Size previewSize) { + Size optimalPictureSize = ManagerCamera.getOptimalPictureSize(previewSize.width, previewSize.height); + if (optimalPictureSize != null) { + Camera.Parameters camParameters = customCamera.getParameters(); + camParameters.setPictureSize(optimalPictureSize.width, optimalPictureSize.height); + customCamera.setParameters(camParameters); + } } /** diff --git a/src/android/customCamera/src/org/geneanet/customcamera/ManagerCamera.java b/src/android/customCamera/src/org/geneanet/customcamera/ManagerCamera.java index 577c838..c021a8b 100644 --- a/src/android/customCamera/src/org/geneanet/customcamera/ManagerCamera.java +++ b/src/android/customCamera/src/org/geneanet/customcamera/ManagerCamera.java @@ -240,6 +240,38 @@ public class ManagerCamera { } } } + return optimalSize; } + + /** + * Get the optimal picture size. + * + * @param int w Width of the wanted picture. + * @param int h Height of the wanted picture. + * + * @return Camera.Size Optimal resolution. + */ + public static Camera.Size getOptimalPictureSize(int w, int h) { + List pictureSizes = ManagerCamera.mCamera.getParameters().getSupportedPictureSizes(); + + if (pictureSizes == null) { + return null; + } + + Camera.Size optimalSizePicture = null; + for (Camera.Size size : pictureSizes) { + if ( + ((float)size.width / (float)size.height) == ((float)w / (float)h) && + ( + optimalSizePicture == null || + optimalSizePicture.width < size.width + ) + ) { + optimalSizePicture = size; + } + } + + return optimalSizePicture; + } }