summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicolasroard <nicolasroard@google.com>2012-10-23 10:34:10 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-10-23 10:34:10 -0700
commitcd0a788658ae61e215a677635779a3313e483d96 (patch)
treedbe906d0abf72ee48da60d9caa670d9ad9293d30
parent0107c1ee0b0815bdc1cbf383e776d17365f67530 (diff)
parent8fa78323ff1b14c4eebb2cfa1e67f8259811b76c (diff)
downloadandroid_packages_apps_Snap-cd0a788658ae61e215a677635779a3313e483d96.tar.gz
android_packages_apps_Snap-cd0a788658ae61e215a677635779a3313e483d96.tar.bz2
android_packages_apps_Snap-cd0a788658ae61e215a677635779a3313e483d96.zip
Merge "Shows filtered images in geometry modules and comparison." into gb-ub-photos-arches
-rw-r--r--src/com/android/gallery3d/filtershow/cache/DirectPresetCache.java1
-rw-r--r--src/com/android/gallery3d/filtershow/cache/ImageLoader.java13
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java12
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageShow.java139
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java26
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageSmallBorder.java4
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java31
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/ImageZoom.java4
-rw-r--r--src/com/android/gallery3d/filtershow/presets/ImagePreset.java27
-rw-r--r--src/com/android/gallery3d/filtershow/ui/ImageCurves.java10
10 files changed, 189 insertions, 78 deletions
diff --git a/src/com/android/gallery3d/filtershow/cache/DirectPresetCache.java b/src/com/android/gallery3d/filtershow/cache/DirectPresetCache.java
index 25d1db414..7839ea2a3 100644
--- a/src/com/android/gallery3d/filtershow/cache/DirectPresetCache.java
+++ b/src/com/android/gallery3d/filtershow/cache/DirectPresetCache.java
@@ -49,6 +49,7 @@ public class DirectPresetCache implements Cache {
for (int i = 0; i < mObservers.size(); i++) {
ImageShow imageShow = mObservers.elementAt(i);
imageShow.invalidate();
+ imageShow.updateImage();
}
}
diff --git a/src/com/android/gallery3d/filtershow/cache/ImageLoader.java b/src/com/android/gallery3d/filtershow/cache/ImageLoader.java
index 40bffb243..a8ad6800f 100644
--- a/src/com/android/gallery3d/filtershow/cache/ImageLoader.java
+++ b/src/com/android/gallery3d/filtershow/cache/ImageLoader.java
@@ -87,7 +87,7 @@ public class ImageLoader {
mActivity = activity;
mContext = context;
mCache = new DelayedPresetCache(this, 30);
- mHiresCache = new DelayedPresetCache(this, 2);
+ mHiresCache = new DelayedPresetCache(this, 3);
}
public void loadBitmap(Uri uri,int size) {
@@ -348,9 +348,11 @@ public class ImageLoader {
if (filteredImage == null) {
if (hiRes) {
- cachePreset(imagePreset, mHiresCache, caller);
+ mHiresCache.prepare(imagePreset);
+ mHiresCache.addObserver(caller);
} else {
- cachePreset(imagePreset, mCache, caller);
+ mCache.prepare(imagePreset);
+ mCache.addObserver(caller);
}
}
return filteredImage;
@@ -384,11 +386,6 @@ public class ImageLoader {
return mAdapter;
}
- private void cachePreset(ImagePreset preset, Cache cache, ImageShow caller) {
- cache.prepare(preset);
- cache.addObserver(caller);
- }
-
public Object getXmpObject() {
try {
InputStream is = mContext.getContentResolver().openInputStream(getUri());
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java b/src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java
index 1cf8d7af5..6bdbeb815 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageGeometry.java
@@ -221,12 +221,6 @@ public abstract class ImageGeometry extends ImageSlave {
return getLocalRotation() + getLocalStraighten();
}
- protected Bitmap getMasterImage() {
- if (getMaster() == null)
- return null;
- return getMaster().mForegroundImage;
- }
-
protected static float[] getCornersFromRect(RectF r) {
// Order is:
// 0------->1
@@ -375,7 +369,7 @@ public abstract class ImageGeometry extends ImageSlave {
ImagePreset lastHistoryItem = getHistory().getLast();
if (lastHistoryItem != null && lastHistoryItem.historyName().equalsIgnoreCase(getName())) {
getImagePreset().setGeometry(mLocalGeometry);
- mImageLoader.resetImageForPreset(getImagePreset(), this);
+ resetImageCaches(this);
} else {
ImagePreset copy = new ImagePreset(getImagePreset());
copy.setGeometry(mLocalGeometry);
@@ -535,8 +529,10 @@ public abstract class ImageGeometry extends ImageSlave {
syncLocalToMasterGeometry();
clearDirtyGeometryFlag();
}
- Bitmap image = getMasterImage();
+ requestFilteredImages();
+ Bitmap image = getMaster().getFiltersOnlyImage();
if (image == null) {
+ invalidate();
return;
}
mHasDrawn = true;
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
index c009b99dd..5e007b1eb 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java
@@ -59,6 +59,9 @@ public class ImageShow extends View implements OnGestureListener,
protected static int mTextPadding = 20;
protected ImagePreset mImagePreset = null;
+ protected ImagePreset mImageGeometryOnlyPreset = null;
+ protected ImagePreset mImageFiltersOnlyPreset = null;
+
protected ImageLoader mImageLoader = null;
private ImageFilter mCurrentFilter = null;
private boolean mDirtyGeometry = true;
@@ -67,9 +70,9 @@ public class ImageShow extends View implements OnGestureListener,
private final boolean USE_BACKGROUND_IMAGE = false;
private static int mBackgroundColor = Color.RED;
- // TODO: remove protected here, it should be private
- protected Bitmap mForegroundImage = null;
- protected Bitmap mFilteredImage = null;
+ private Bitmap mGeometryOnlyImage = null;
+ private Bitmap mFiltersOnlyImage = null;
+ private Bitmap mFilteredImage = null;
private final boolean USE_SLIDER_GESTURE = false; // set to true to have
// slider gesture
@@ -324,13 +327,6 @@ public class ImageShow extends View implements OnGestureListener,
return mImagePreset;
}
- protected Bitmap getOriginalFrontBitmap() {
- if (mImageLoader != null) {
- return mImageLoader.getOriginalBitmapLarge();
- }
- return null;
- }
-
public void drawToast(Canvas canvas) {
if (mShowToast && mToast != null) {
Paint paint = new Paint();
@@ -355,12 +351,16 @@ public class ImageShow extends View implements OnGestureListener,
}
}
+ public void defaultDrawImage(Canvas canvas) {
+ drawImage(canvas, getFilteredImage());
+ drawPartialImage(canvas, getGeometryOnlyImage());
+ }
+
@Override
public void onDraw(Canvas canvas) {
drawBackground(canvas);
- getFilteredImage();
- drawImage(canvas, mFilteredImage);
- drawPartialImage(canvas, mForegroundImage);
+ requestFilteredImages();
+ defaultDrawImage(canvas);
if (showTitle() && getImagePreset() != null) {
mPaint.setARGB(200, 0, 0, 0);
@@ -382,25 +382,78 @@ public class ImageShow extends View implements OnGestureListener,
drawToast(canvas);
}
- public void getFilteredImage() {
- Bitmap filteredImage = null;
+ public void resetImageCaches(ImageShow caller) {
+ if (mImageLoader == null) {
+ return;
+ }
+ if (getImagePreset() != null) {
+ mImageLoader.resetImageForPreset(getImagePreset(), caller);
+ }
+ mImageGeometryOnlyPreset = null;
+ mImageFiltersOnlyPreset = null;
+ invalidate();
+ }
+
+ public void updateImagePresets(boolean force) {
+ ImagePreset preset = getImagePreset();
+ if (preset == null) {
+ return;
+ }
+ if (force) {
+ mImageLoader.resetImageForPreset(getImagePreset(), this);
+ }
+ if (force || mImageGeometryOnlyPreset == null) {
+ mImageGeometryOnlyPreset = new ImagePreset(preset);
+ mImageGeometryOnlyPreset.setDoApplyFilters(false);
+ mGeometryOnlyImage = null;
+ }
+ if (force || mImageFiltersOnlyPreset == null) {
+ mImageFiltersOnlyPreset = new ImagePreset(preset);
+ mImageFiltersOnlyPreset.setDoApplyGeometry(false);
+ mFiltersOnlyImage = null;
+ }
+ }
+
+ public void requestFilteredImages() {
if (mImageLoader != null) {
- filteredImage = mImageLoader.getImageForPreset(this,
+ Bitmap bitmap = mImageLoader.getImageForPreset(this,
getImagePreset(), showHires());
- }
- if (filteredImage == null) {
- // if no image for the current preset, use the previous one
- filteredImage = mFilteredImage;
- } else {
- mFilteredImage = filteredImage;
+ if (bitmap != null) {
+ if (mFilteredImage == null) {
+ invalidate();
+ }
+ mFilteredImage = bitmap;
+ }
+
+ updateImagePresets(false);
+ if (mImageGeometryOnlyPreset != null) {
+ mGeometryOnlyImage = mImageLoader.getImageForPreset(this, mImageGeometryOnlyPreset,
+ showHires());
+ }
+ if (mImageFiltersOnlyPreset != null) {
+ mFiltersOnlyImage = mImageLoader.getImageForPreset(this, mImageFiltersOnlyPreset,
+ showHires());
+ }
}
- if (mShowOriginal || mFilteredImage == null) {
- mFilteredImage = mForegroundImage;
+ if (mShowOriginal) {
+ mFilteredImage = mGeometryOnlyImage;
}
}
+ public Bitmap getFiltersOnlyImage() {
+ return mFiltersOnlyImage;
+ }
+
+ public Bitmap getGeometryOnlyImage() {
+ return mGeometryOnlyImage;
+ }
+
+ public Bitmap getFilteredImage() {
+ return mFilteredImage;
+ }
+
public void drawImage(Canvas canvas, Bitmap image) {
if (image != null) {
Rect s = new Rect(0, 0, image.getWidth(),
@@ -522,15 +575,17 @@ public class ImageShow extends View implements OnGestureListener,
}
public void setImagePreset(ImagePreset preset, boolean addToHistory) {
+ if (preset == null) {
+ return;
+ }
mImagePreset = preset;
- if (getImagePreset() != null) {
- getImagePreset().setImageLoader(mImageLoader);
- if (addToHistory) {
- mHistoryAdapter.addHistoryItem(getImagePreset());
- }
- getImagePreset().setEndpoint(this);
- updateImage();
+ getImagePreset().setImageLoader(mImageLoader);
+ updateImagePresets(true);
+ if (addToHistory) {
+ mHistoryAdapter.addHistoryItem(getImagePreset());
}
+ getImagePreset().setEndpoint(this);
+ updateImage();
mImagePreset.fillImageStateAdapter(mImageStateAdapter);
invalidate();
}
@@ -573,10 +628,19 @@ public class ImageShow extends View implements OnGestureListener,
setDirtyGeometryFlag();
}
+ public boolean updateGeometryFlags() {
+ return true;
+ }
+
public void updateImage() {
- mForegroundImage = getOriginalFrontBitmap();
- imageSizeChanged(mForegroundImage); // TODO: should change to filtered
- setDirtyGeometryFlag();
+ if (!updateGeometryFlags()) {
+ return;
+ }
+ Bitmap bitmap = mImageLoader.getOriginalBitmapLarge();
+ if (bitmap != null) {
+ imageSizeChanged(bitmap);
+ invalidate();
+ }
}
public void updateFilteredImage(Bitmap bitmap) {
@@ -609,7 +673,7 @@ public class ImageShow extends View implements OnGestureListener,
mTouchY = ey;
if (!mActivity.isShowingHistoryPanel()
&& (System.currentTimeMillis() - mTouchShowOriginalDate
- > mTouchShowOriginalDelayMin)) {
+ > mTouchShowOriginalDelayMin)) {
mTouchShowOriginal = true;
}
}
@@ -725,8 +789,8 @@ public class ImageShow extends View implements OnGestureListener,
|| (mActivity.isShowingHistoryPanel() && endEvent.getX() > startEvent.getX())) {
if (!mTouchShowOriginal
|| (mTouchShowOriginal &&
- (System.currentTimeMillis() - mTouchShowOriginalDate
- < mTouchShowOriginalDelayMax))) {
+ (System.currentTimeMillis() - mTouchShowOriginalDate
+ < mTouchShowOriginalDelayMax))) {
mActivity.toggleHistoryPanel();
}
}
@@ -756,4 +820,5 @@ public class ImageShow extends View implements OnGestureListener,
// TODO Auto-generated method stub
return false;
}
+
}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java b/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java
index ba4da91c9..3d79ae0d7 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java
@@ -17,6 +17,7 @@
package com.android.gallery3d.filtershow.imageshow;
import android.content.Context;
+import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.AttributeSet;
@@ -51,6 +52,11 @@ public class ImageSlave extends ImageShow {
}
@Override
+ public void resetImageCaches(ImageShow caller) {
+ mMasterImageShow.resetImageCaches(caller);
+ }
+
+ @Override
public ImagePreset getImagePreset() {
return mMasterImageShow.getImagePreset();
}
@@ -76,6 +82,26 @@ public class ImageSlave extends ImageShow {
}
@Override
+ public Bitmap getFilteredImage() {
+ return mMasterImageShow.getFilteredImage();
+ }
+
+ @Override
+ public void updateImage() {
+ mMasterImageShow.updateImage();
+ }
+
+ @Override
+ public void updateImagePresets(boolean force) {
+ mMasterImageShow.updateImagePresets(force);
+ }
+
+ @Override
+ public void requestFilteredImages() {
+ mMasterImageShow.requestFilteredImages();
+ }
+
+ @Override
public boolean showTitle() {
return false;
}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageSmallBorder.java b/src/com/android/gallery3d/filtershow/imageshow/ImageSmallBorder.java
index 0cf6389ce..a60c33d52 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageSmallBorder.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageSmallBorder.java
@@ -30,7 +30,7 @@ public class ImageSmallBorder extends ImageSmallFilter {
@Override
public void onDraw(Canvas canvas) {
- getFilteredImage();
+ requestFilteredImages();
canvas.drawColor(mBackgroundColor);
// TODO: simplify & make faster...
RectF border = new RectF(mMargin, 2*mMargin, getWidth() - mMargin - 1, getWidth());
@@ -53,7 +53,7 @@ public class ImageSmallBorder extends ImageSmallFilter {
canvas.translate(mMargin + 1, 2*mMargin + 1);
canvas.scale(mImageScaleFactor, mImageScaleFactor);
Rect d = new Rect(0, 0, getWidth(), getWidth());
- drawImage(canvas, mFilteredImage, d);
+ drawImage(canvas, getFilteredImage(), d);
canvas.restore();
}
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java b/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java
index 698c4ea7a..9e8a01118 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageSmallFilter.java
@@ -18,7 +18,7 @@ public class ImageSmallFilter extends ImageShow implements View.OnClickListener
private static final String LOGTAG = "ImageSmallFilter";
private FilterShowActivity mController = null;
- private ImageFilter mImageFilter = null;
+ protected ImageFilter mImageFilter = null;
private boolean mShowTitle = true;
private boolean mSetBorder = false;
protected final Paint mPaint = new Paint();
@@ -93,18 +93,10 @@ public class ImageSmallFilter extends ImageShow implements View.OnClickListener
}
@Override
- public void updateImage() {
+ public boolean updateGeometryFlags() {
// We don't want to warn listeners here that the image size has changed, because
// we'll be working with the small image...
- mForegroundImage = getOriginalFrontBitmap();
- }
-
- @Override
- protected Bitmap getOriginalFrontBitmap() {
- if (mImageLoader == null) {
- return null;
- }
- return mImageLoader.getOriginalBitmapSmall();
+ return false;
}
public void setShowTitle(boolean value) {
@@ -128,8 +120,21 @@ public class ImageSmallFilter extends ImageShow implements View.OnClickListener
}
@Override
+ public ImagePreset getImagePreset() {
+ return mImagePreset;
+ }
+
+ @Override
+ public void updateImagePresets(boolean force) {
+ ImagePreset preset = getImagePreset();
+ if (preset == null) {
+ return;
+ }
+ }
+
+ @Override
public void onDraw(Canvas canvas) {
- getFilteredImage();
+ requestFilteredImages();
canvas.drawColor(mBackgroundColor);
float textWidth = mPaint.measureText(mImageFilter.getName());
int h = mTextSize + 2 * mTextPadding;
@@ -140,7 +145,7 @@ public class ImageSmallFilter extends ImageShow implements View.OnClickListener
canvas.drawRect(0, mMargin, getWidth(), getWidth() + mMargin, mPaint);
}
Rect destination = new Rect(mMargin, 2*mMargin, getWidth() - mMargin, getWidth());
- drawImage(canvas, mFilteredImage, destination);
+ drawImage(canvas, getFilteredImage(), destination);
mPaint.setTextSize(mTextSize);
mPaint.setColor(mTextColor);
canvas.drawText(mImageFilter.getName(), x, y - mTextMargin, mPaint);
diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageZoom.java b/src/com/android/gallery3d/filtershow/imageshow/ImageZoom.java
index 4e2ccc3eb..4d1df3de3 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/ImageZoom.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/ImageZoom.java
@@ -58,8 +58,8 @@ public class ImageZoom extends ImageSlave {
if ((mZoomedIn ||mTouchDown) && mImageLoader != null) {
filteredImage = mImageLoader.getScaleOneImageForPreset(this, getImagePreset(), mZoomBounds, false);
} else {
- getFilteredImage();
- filteredImage = mFilteredImage;
+ requestFilteredImages();
+ filteredImage = getFilteredImage();
}
drawImage(canvas, filteredImage);
if (showControls()) {
diff --git a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java
index cbb14300d..c1eb86f14 100644
--- a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java
+++ b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java
@@ -27,6 +27,9 @@ public class ImagePreset {
private String mHistoryName = "Original";
protected boolean mIsFxPreset = false;
+ private boolean mDoApplyGeometry = true;
+ private boolean mDoApplyFilters = true;
+
public final GeometryMetadata mGeoData = new GeometryMetadata();
enum FullRotate {
@@ -70,6 +73,14 @@ public class ImagePreset {
mGeoData.set(source.mGeoData);
}
+ public void setDoApplyGeometry(boolean value) {
+ mDoApplyGeometry = value;
+ }
+
+ public void setDoApplyFilters(boolean value) {
+ mDoApplyFilters = value;
+ }
+
public boolean hasModifications() {
if (mImageBorder != null && !mImageBorder.isNil()) {
return true;
@@ -102,7 +113,6 @@ public class ImagePreset {
return true;
}
-
public void setGeometry(GeometryMetadata m) {
mGeoData.set(m);
}
@@ -238,11 +248,17 @@ public class ImagePreset {
public Bitmap apply(Bitmap original) {
// First we apply any transform -- 90 rotate, flip, straighten, crop
- Bitmap bitmap = mGeoData.apply(original, mScaleFactor, mIsHighQuality);
+ Bitmap bitmap = original;
- for (int i = 0; i < mFilters.size(); i++) {
- ImageFilter filter = mFilters.elementAt(i);
- bitmap = filter.apply(bitmap, mScaleFactor, mIsHighQuality);
+ if (mDoApplyGeometry) {
+ bitmap = mGeoData.apply(original, mScaleFactor, mIsHighQuality);
+ }
+
+ if (mDoApplyFilters) {
+ for (int i = 0; i < mFilters.size(); i++) {
+ ImageFilter filter = mFilters.elementAt(i);
+ bitmap = filter.apply(bitmap, mScaleFactor, mIsHighQuality);
+ }
}
if (mImageBorder != null) {
@@ -252,6 +268,7 @@ public class ImagePreset {
if (mEndPoint != null) {
mEndPoint.updateFilteredImage(bitmap);
}
+
return bitmap;
}
diff --git a/src/com/android/gallery3d/filtershow/ui/ImageCurves.java b/src/com/android/gallery3d/filtershow/ui/ImageCurves.java
index 81da9f80e..8f7560e10 100644
--- a/src/com/android/gallery3d/filtershow/ui/ImageCurves.java
+++ b/src/com/android/gallery3d/filtershow/ui/ImageCurves.java
@@ -89,8 +89,8 @@ public class ImageCurves extends ImageSlave {
gPaint.setAntiAlias(true);
- if (getImagePreset() != mLastPreset) {
- new ComputeHistogramTask().execute(mFilteredImage);
+ if (getImagePreset() != mLastPreset && getFilteredImage() != null) {
+ new ComputeHistogramTask().execute(getFilteredImage());
mLastPreset = getImagePreset();
}
@@ -185,6 +185,10 @@ public class ImageCurves extends ImageSlave {
return true;
}
+ if (curves() == null) {
+ return true;
+ }
+
Spline spline = getSpline(mCurrentCurveIndex);
int pick = pickControlPoint(posX, posY);
if (mCurrentControlPoint == null) {
@@ -212,7 +216,7 @@ public class ImageCurves extends ImageSlave {
public synchronized void updateCachedImage() {
// update image
if (getImagePreset() != null) {
- mImageLoader.resetImageForPreset(getImagePreset(), this);
+ resetImageCaches(this);
invalidate();
}
}