OSDN Git Service

Fix several issues with crop/straighten
authornicolasroard <nicolasroard@google.com>
Sun, 21 Oct 2012 22:39:44 +0000 (15:39 -0700)
committernicolasroard <nicolasroard@google.com>
Sun, 21 Oct 2012 22:39:44 +0000 (15:39 -0700)
bug:7386266
bug:7386270
bug:7385727

- use a transparent white for the bounds instead of green
- add "rule of third" lines to the crop tool
- improves preview image quality for geometric operations

Change-Id: I94c233e7ea89d67451e7808fb71537d03a1c183d

src/com/android/gallery3d/filtershow/filters/ImageFilterGeometry.java
src/com/android/gallery3d/filtershow/imageshow/ImageCrop.java

index b9c94b6..2c7ed2d 100644 (file)
@@ -105,7 +105,11 @@ public class ImageFilterGeometry extends ImageFilter {
                 bitmap.getWidth() / rp.width(), null);
         */
         Canvas canvas = new Canvas(temp);
-        canvas.drawBitmap(bitmap, drawMatrix, new Paint());
+        Paint paint = new Paint();
+        paint.setAntiAlias(true);
+        paint.setFilterBitmap(true);
+        paint.setDither(true);
+        canvas.drawBitmap(bitmap, drawMatrix, paint);
         return temp;
     }
 
index 3f8326d..a57868c 100644 (file)
@@ -57,6 +57,7 @@ public class ImageCrop extends ImageGeometry {
     private int movingEdges;
     private final Drawable cropIndicator;
     private final int indicatorSize;
+    private final int mBorderColor = Color.argb(128, 255, 255, 255);
 
     private static final String LOGTAG = "ImageCrop";
 
@@ -67,10 +68,9 @@ public class ImageCrop extends ImageGeometry {
         Resources resources = context.getResources();
         cropIndicator = resources.getDrawable(R.drawable.camera_crop);
         indicatorSize = (int) resources.getDimension(R.dimen.crop_indicator_size);
-        int borderColor = Color.argb(128, 255,  255,  255);
         borderPaint = new Paint();
         borderPaint.setStyle(Paint.Style.STROKE);
-        borderPaint.setColor(borderColor);
+        borderPaint.setColor(mBorderColor);
         borderPaint.setStrokeWidth(2f);
     }
 
@@ -79,10 +79,9 @@ public class ImageCrop extends ImageGeometry {
         Resources resources = context.getResources();
         cropIndicator = resources.getDrawable(R.drawable.camera_crop);
         indicatorSize = (int) resources.getDimension(R.dimen.crop_indicator_size);
-        int borderColor = Color.argb(128, 255,  255,  255);
         borderPaint = new Paint();
         borderPaint.setStyle(Paint.Style.STROKE);
-        borderPaint.setColor(borderColor);
+        borderPaint.setColor(mBorderColor);
         borderPaint.setStrokeWidth(2f);
     }
 
@@ -580,6 +579,21 @@ public class ImageCrop extends ImageGeometry {
     protected void lostVisibility() {
     }
 
+    private void drawRuleOfThird(Canvas canvas, RectF bounds) {
+        float stepX = bounds.width() / 3.0f;
+        float stepY = bounds.height() / 3.0f;
+        float x = bounds.left + stepX;
+        float y = bounds.top + stepY;
+        for (int i = 0; i < 2; i++) {
+            canvas.drawLine(x, bounds.top, x, bounds.bottom, gPaint);
+            x += stepX;
+        }
+        for (int j = 0; j < 2; j++) {
+            canvas.drawLine(bounds.left, y, bounds.right, y, gPaint);
+            y += stepY;
+        }
+    }
+
     @Override
     protected void drawShape(Canvas canvas, Bitmap image) {
         // TODO: move style to xml
@@ -595,11 +609,12 @@ public class ImageCrop extends ImageGeometry {
         float rotation = getLocalRotation();
         drawTransformedBitmap(canvas, image, gPaint, true);
 
-        gPaint.setARGB(255, 125, 255, 128);
+        gPaint.setColor(mBorderColor);
         gPaint.setStrokeWidth(3);
         gPaint.setStyle(Paint.Style.STROKE);
         drawStraighten(canvas, gPaint);
         RectF scaledCrop = unrotatedCropBounds();
+        drawRuleOfThird(canvas, scaledCrop);
         int decoded_moving = decoder(movingEdges, rotation);
         canvas.save();
         canvas.rotate(rotation, mCenterX, mCenterY);