diff options
Diffstat (limited to 'src/com/android/camera/util')
-rw-r--r-- | src/com/android/camera/util/CameraUtil.java | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/com/android/camera/util/CameraUtil.java b/src/com/android/camera/util/CameraUtil.java index 1cdfd285a..1dc5e558b 100644 --- a/src/com/android/camera/util/CameraUtil.java +++ b/src/com/android/camera/util/CameraUtil.java @@ -842,6 +842,34 @@ public class CameraUtil { view.setVisibility(View.GONE); } + public static Rect getFinalCropRect(Rect rect, float targetRatio) { + Rect finalRect = new Rect(rect); + float rectRatio = (float) rect.width()/(float) rect.height(); + + // if ratios are different, adjust crop rect to fit ratio + // if ratios are same, no need to adjust crop + Log.d(TAG, "getFinalCropRect - rect: " + rect.toString()); + Log.d(TAG, "getFinalCropRect - ratios: " + rectRatio + ", " + targetRatio); + if(rectRatio > targetRatio) { + // ratio indicates need for horizontal crop + // add .5 to round up if necessary + int newWidth = (int)(((float)rect.height() * targetRatio) + .5f); + int newXoffset = (rect.width() - newWidth)/2 + rect.left; + finalRect.left = newXoffset; + finalRect.right = newXoffset + newWidth; + } else if(rectRatio < targetRatio) { + // ratio indicates need for vertical crop + // add .5 to round up if necessary + int newHeight = (int)(((float)rect.width() / targetRatio) + .5f); + int newYoffset = (rect.height() - newHeight)/2 + rect.top; + finalRect.top = newYoffset; + finalRect.bottom = newYoffset + newHeight; + } + + Log.d(TAG, "getFinalCropRect - final rect: " + finalRect.toString()); + return finalRect; + } + public static int getJpegRotation(int cameraId, int orientation) { // See android.hardware.Camera.Parameters.setRotation for // documentation. |