OSDN Git Service

Fix cropping and saving issues
authornicolasroard <nicolasroard@google.com>
Sun, 14 Oct 2012 00:24:31 +0000 (17:24 -0700)
committernicolasroard <nicolasroard@google.com>
Sun, 14 Oct 2012 00:24:31 +0000 (17:24 -0700)
    bug:7342359

Change-Id: Ia59eb3f423b8c4f420b7b6f120735856a84cd854

src/com/android/gallery3d/filtershow/filters/ImageFilterGeometry.java
src/com/android/gallery3d/filtershow/imageshow/GeometryMetadata.java
src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java

index 9bdffee..3d48b7e 100644 (file)
@@ -84,9 +84,9 @@ public class ImageFilterGeometry extends ImageFilter {
         // canvas to do a simple implementation...
         // TODO: and be more memory efficient! (do it in native?)
         Rect cropBounds = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
-        RectF c = mGeometry.getCropBounds();
-        if(c != null && c.width() > 0 && c.height() > 0)
-            c.roundOut(cropBounds);
+        RectF crop = mGeometry.getCropBounds(bitmap);
+        if(crop.width() > 0 && crop.height() > 0)
+            crop.roundOut(cropBounds);
         Bitmap temp = null;
         if (mGeometry.hasSwitchedWidthHeight()) {
             temp = Bitmap.createBitmap(cropBounds.height(), cropBounds.width(), mConfig);
@@ -94,7 +94,7 @@ public class ImageFilterGeometry extends ImageFilter {
             temp = Bitmap.createBitmap(cropBounds.width(), cropBounds.height(), mConfig);
         }
 
-        Matrix drawMatrix = buildMatrix(c);
+        Matrix drawMatrix = buildMatrix(crop);
         Canvas canvas = new Canvas(temp);
         canvas.drawBitmap(bitmap, drawMatrix, new Paint());
         return temp;
index d412f58..352fa5b 100644 (file)
@@ -74,10 +74,19 @@ public class GeometryMetadata {
         return mStraightenRotation;
     }
 
-    public RectF getCropBounds() {
+    public RectF getPreviewCropBounds() {
         return new RectF(mCropBounds);
     }
 
+    public RectF getCropBounds(Bitmap bitmap) {
+        float scale = 1.0f;
+        if (mPhotoBounds.width() > 0) {
+            scale = bitmap.getWidth() / mPhotoBounds.width();
+        }
+        return new RectF(mCropBounds.left * scale, mCropBounds.top * scale,
+                mCropBounds.right * scale, mCropBounds.bottom * scale);
+    }
+
     public FLIP getFlipType() {
         return mFlip;
     }
index d8d03dc..68df702 100644 (file)
@@ -122,7 +122,7 @@ public abstract class ImageGeometry extends ImageSlave {
     }
 
     protected RectF getLocalCropBounds() {
-        return mLocalGeometry.getCropBounds();
+        return mLocalGeometry.getPreviewCropBounds();
     }
 
     protected RectF getLocalDisplayBounds() {