diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2016-08-03 05:15:17 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-08-03 05:15:17 -0700 |
| commit | 0bcd90621fcb2a3bcae66f1c3c7ab83d1566cbb5 (patch) | |
| tree | 288ad8fc9c3d7116778432da400ffc5a2e66b624 /src | |
| parent | aedea98b0a5a0d5abf80c14c0dae4cbf2e75553a (diff) | |
| parent | 7e593580a66b4750f2eb75b4e187bb178ee4b996 (diff) | |
| download | android_packages_apps_Gallery2-0bcd90621fcb2a3bcae66f1c3c7ab83d1566cbb5.tar.gz android_packages_apps_Gallery2-0bcd90621fcb2a3bcae66f1c3c7ab83d1566cbb5.tar.bz2 android_packages_apps_Gallery2-0bcd90621fcb2a3bcae66f1c3c7ab83d1566cbb5.zip | |
Merge "SnapdragonGallery: fix TrueScanner landscape interface"
Diffstat (limited to 'src')
| -rwxr-xr-x[-rw-r--r--] | src/com/android/gallery3d/filtershow/imageshow/GeometryMathUtils.java | 26 | ||||
| -rwxr-xr-x[-rw-r--r--] | src/com/android/gallery3d/filtershow/imageshow/ImageTrueScanner.java | 49 |
2 files changed, 71 insertions, 4 deletions
diff --git a/src/com/android/gallery3d/filtershow/imageshow/GeometryMathUtils.java b/src/com/android/gallery3d/filtershow/imageshow/GeometryMathUtils.java index c3a517c66..764312199 100644..100755 --- a/src/com/android/gallery3d/filtershow/imageshow/GeometryMathUtils.java +++ b/src/com/android/gallery3d/filtershow/imageshow/GeometryMathUtils.java @@ -484,6 +484,32 @@ public final class GeometryMathUtils { return m; } + public static Matrix getSegMatrix(GeometryHolder holder, int bitmapWidth, + int bitmapHeight, int viewWidth, int viewHeight + , int oldw, int oldh) { + int bh = bitmapHeight; + int bw = bitmapWidth; + if (GeometryMathUtils.needsDimensionSwap(holder.rotation)) { + bh = bitmapWidth; + bw = bitmapHeight; + } + float oldScale = GeometryMathUtils.scale(bw, bh, oldw, oldh); + if (oldScale > 3.0f) { + oldScale = 3.0f; + } + oldScale *= SHOW_SCALE; + float scale = GeometryMathUtils.scale(bw, bh, viewWidth, viewHeight); + if (scale > 3.0f) { + scale = 3.0f; + } + scale *= SHOW_SCALE; + Matrix m = new Matrix(); + m.setTranslate(-oldw / 2f, -oldh / 2f); + m.postScale(scale / oldScale, scale / oldScale); + m.postTranslate(viewWidth / 2f, viewHeight / 2f); + return m; + } + public static RectF getTrueCropRect(GeometryHolder holder, int bitmapWidth, int bitmapHeight) { RectF r = new RectF(holder.crop); FilterCropRepresentation.findScaledCrop(r, bitmapWidth, bitmapHeight); diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageTrueScanner.java b/src/com/android/gallery3d/filtershow/imageshow/ImageTrueScanner.java index 9d8e36d07..d72ec3783 100644..100755 --- a/src/com/android/gallery3d/filtershow/imageshow/ImageTrueScanner.java +++ b/src/com/android/gallery3d/filtershow/imageshow/ImageTrueScanner.java @@ -58,7 +58,7 @@ public class ImageTrueScanner extends ImageShow { private Matrix mDisplayMatrix; private GeometryMathUtils.GeometryHolder mGeometry; public final static int POINT_NUMS = 4; - private static int[] mSegPoints = new int[POINT_NUMS*2+4]; + private static float[] mSegPoints = new float[POINT_NUMS*2+4]; private boolean[] isTouched = new boolean[POINT_NUMS]; private RectF mBitmapBound = new RectF(); private Bitmap mBitmap; @@ -77,6 +77,9 @@ public class ImageTrueScanner extends ImageShow { private Paint mGrayPaint; private Bitmap mGlareButtonOnBitmap; private Bitmap mGlareButtonOffBitmap; + private boolean updateGlareRemovalButton = false; + private Matrix mDisplaySegPointsMatrix; + private Matrix mDisplayMatrixInverse; public ImageTrueScanner(Context context) { super(context); @@ -94,7 +97,11 @@ public class ImageTrueScanner extends ImageShow { } public static int[] getDeterminedPoints() { - return mSegPoints; + int[] points = new int[mSegPoints.length]; + for (int i = 0; i < mSegPoints.length; i++) { + points[i] = (int)mSegPoints[i]; + } + return points; } public static boolean getRemoveGlareButtonStatus() { @@ -219,6 +226,28 @@ public class ImageTrueScanner extends ImageShow { @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); + updateMatrix(w,h,oldw, oldh); + mDisplaySegPointsMatrix.mapPoints(mSegPoints); + getBitmapBound(); + updateGlareRemovalButton = true; + } + + private void updateMatrix(int w, int h, int oldw, int oldh) { + if (mBitmap == null) { + return; + } + Resources res = getContext().getResources(); + int panelHeight = res.getDimensionPixelOffset(R.dimen.category_actionbar_panel_height); + mDisplayMatrix = GeometryMathUtils.getFullGeometryToScreenMatrix(mGeometry, + mBitmap.getWidth(), mBitmap.getHeight(), w, h - panelHeight); + mDisplaySegPointsMatrix = GeometryMathUtils.getSegMatrix(mGeometry, mBitmap.getWidth(), + mBitmap.getHeight(), w, h - panelHeight, oldw, oldh- panelHeight); + mDisplayMatrixInverse = new Matrix(); + mDisplayMatrixInverse.reset(); + if (!mDisplaySegPointsMatrix.invert(mDisplayMatrixInverse)) { + Log.w(TAG, "could not invert display matrix"); + mDisplayMatrixInverse = null; + } } private void getBitmapBound() { @@ -283,9 +312,20 @@ public class ImageTrueScanner extends ImageShow { return; toggleComparisonButtonVisibility(); - if(mDisplayMatrix == null) { + if(mDisplayMatrix == null || mDisplaySegPointsMatrix == null + || mDisplayMatrixInverse == null) { mDisplayMatrix = GeometryMathUtils.getFullGeometryToScreenMatrix(mGeometry, mBitmap.getWidth(), mBitmap.getHeight(), canvas.getWidth(), canvas.getHeight()); + mDisplaySegPointsMatrix = GeometryMathUtils.getSegMatrix(mGeometry, + mBitmap.getWidth(), mBitmap.getHeight(), canvas.getWidth(), + canvas.getHeight(),canvas.getWidth(), canvas.getHeight()); + mDisplayMatrixInverse = new Matrix(); + mDisplayMatrixInverse.reset(); + if (!mDisplaySegPointsMatrix.invert(mDisplayMatrixInverse)) { + Log.w(TAG, "could not invert display matrix"); + mDisplayMatrixInverse = null; + return; + } getBitmapBound(); } if(!isDetectedPointsApplied) { @@ -308,9 +348,10 @@ public class ImageTrueScanner extends ImageShow { } private void drawGlareRemovalButton(Canvas canvas) { - if(mGlareButtonX == -1000 && mGlareButtonY == -1000) { + if(mGlareButtonX == -1000 && mGlareButtonY == -1000 || updateGlareRemovalButton) { mGlareButtonX = canvas.getWidth()/2; mGlareButtonY = canvas.getHeight()*1/5; + updateGlareRemovalButton = false; } RectF rectF = new RectF(); Bitmap bitmap; |
