summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorKedi Xu <kedix@codeaurora.org>2016-07-29 14:57:32 +0800
committerKedi Xu <kedix@codeaurora.org>2016-07-29 14:57:32 +0800
commit7e593580a66b4750f2eb75b4e187bb178ee4b996 (patch)
treeff124f4fab28cda269cc7e3073527bf850ed3a20 /src/com
parent4edad0fbfadf5bf47726a33aa1a9a62dedd49a3a (diff)
downloadandroid_packages_apps_Gallery2-7e593580a66b4750f2eb75b4e187bb178ee4b996.tar.gz
android_packages_apps_Gallery2-7e593580a66b4750f2eb75b4e187bb178ee4b996.tar.bz2
android_packages_apps_Gallery2-7e593580a66b4750f2eb75b4e187bb178ee4b996.zip
SnapdragonGallery: fix TrueScanner landscape interface
When in landscape, the photo didn't display right Change-Id: Iafe459657a43c2a979149b7a6820473be49d8fdb CRs-Fixed: 1043205
Diffstat (limited to 'src/com')
-rwxr-xr-x[-rw-r--r--]src/com/android/gallery3d/filtershow/imageshow/GeometryMathUtils.java26
-rwxr-xr-x[-rw-r--r--]src/com/android/gallery3d/filtershow/imageshow/ImageTrueScanner.java49
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;