From e09002946baec5a2d61ceb111a4c2bda9ea032ef Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Sun, 24 Feb 2019 17:59:41 +0100 Subject: [PATCH] Improve rescaling logic --- .../cameraview/CameraController.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java index 9699ea9e..57af58b1 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/CameraController.java @@ -556,10 +556,19 @@ abstract class CameraController implements boolean flip = flip(reference, REF_VIEW); int maxWidth = flip ? mSnapshotMaxHeight : mSnapshotMaxWidth; int maxHeight = flip ? mSnapshotMaxWidth : mSnapshotMaxHeight; - return new Size( - Math.min(baseSize.getWidth(), maxWidth), - Math.max(baseSize.getHeight(), maxHeight) - ); + float baseRatio = AspectRatio.of(baseSize).toFloat(); + float maxValuesRatio = AspectRatio.of(maxWidth, maxHeight).toFloat(); + if (maxValuesRatio >= baseRatio) { + // Height is the real constraint. + int outHeight = Math.min(baseSize.getHeight(), maxHeight); + int outWidth = (int) Math.floor((float) outHeight * baseRatio); + return new Size(outWidth, outHeight); + } else { + // Width is the real constraint. + int outWidth = Math.min(baseSize.getWidth(), maxWidth); + int outHeight = (int) Math.floor((float) outWidth / baseRatio); + return new Size(outWidth, outHeight); + } }