summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authornicolasroard <nicolasroard@google.com>2013-03-05 03:03:04 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-03-05 03:03:04 +0000
commita0adf2113b8728d92f270953ca8cab50335fe68e (patch)
tree72549f6f87278b8e211bb433168e65ed975b91e6 /src
parentfc7d46515db7a3a50f7416c2462030609391cf95 (diff)
parent4e1d35506bb72a2a6c16f08f8bd86bdfe8d1c902 (diff)
downloadandroid_packages_apps_Gallery2-a0adf2113b8728d92f270953ca8cab50335fe68e.tar.gz
android_packages_apps_Gallery2-a0adf2113b8728d92f270953ca8cab50335fe68e.tar.bz2
android_packages_apps_Gallery2-a0adf2113b8728d92f270953ca8cab50335fe68e.zip
Merge "Simplify and speed up thumbnail creation" into gb-ub-photos-bryce
Diffstat (limited to 'src')
-rw-r--r--src/com/android/gallery3d/filtershow/FilterShowActivity.java2
-rw-r--r--src/com/android/gallery3d/filtershow/imageshow/MasterImage.java59
-rw-r--r--src/com/android/gallery3d/filtershow/ui/FilterIconButton.java7
3 files changed, 63 insertions, 5 deletions
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
index fbaec849b..518563a6d 100644
--- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java
+++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java
@@ -353,6 +353,8 @@ public class FilterShowActivity extends Activity implements OnItemClickListener,
ImageShow.setOriginalTextSize((int) getPixelsFromDip(18));
ImageShow.setOriginalText(res.getString(R.string.original_picture_text));
mIconSeedSize = res.getDimensionPixelSize(R.dimen.thumbnail_size);
+ // TODO: pick correct value
+ // MasterImage.setIconSeedSize(mIconSeedSize);
Drawable curveHandle = res.getDrawable(R.drawable.camera_crop);
int curveHandleSize = (int) res.getDimension(R.dimen.crop_indicator_size);
diff --git a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
index f96d94a5a..e93c3713f 100644
--- a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
+++ b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java
@@ -35,8 +35,11 @@ import java.util.Vector;
public class MasterImage implements RenderingRequestCaller {
private static final String LOGTAG = "MasterImage";
+ private boolean DEBUG = false;
private static MasterImage sMasterImage = null;
+ private static int sIconSeedSize = 128;
+ private Bitmap mThumbnailBitmap;
private ImageFilter mCurrentFilter = null;
private ImagePreset mPreset = null;
@@ -91,6 +94,10 @@ public class MasterImage implements RenderingRequestCaller {
return sMasterImage;
}
+ public static void setIconSeedSize(int iconSeedSize) {
+ sIconSeedSize = iconSeedSize;
+ }
+
public void addObserver(ImageShow observer) {
if (mObservers.contains(observer)) {
return;
@@ -368,11 +375,59 @@ public class MasterImage implements RenderingRequestCaller {
public void hasNewGeometry() {
updatePresets(true);
+ computeThumbnailBitmap();
for (GeometryListener listener : mGeometryListeners) {
listener.geometryChanged();
}
}
+ private Bitmap createSquareImage(Bitmap dst, Bitmap image, Rect destination) {
+ if (image != null) {
+ Canvas canvas = new Canvas(dst);
+ int iw = image.getWidth();
+ int ih = image.getHeight();
+ int x = 0;
+ int y = 0;
+ int size = 0;
+ Rect source = null;
+ if (iw > ih) {
+ size = ih;
+ x = (int) ((iw - size) / 2.0f);
+ y = 0;
+ } else {
+ size = iw;
+ x = 0;
+ y = (int) ((ih - size) / 2.0f);
+ }
+ source = new Rect(x, y, x + size, y + size);
+ canvas.drawBitmap(image, source, destination, new Paint());
+ }
+ return dst;
+ }
+
+ public void computeThumbnailBitmap() {
+ Bitmap bmap = mLoader.getOriginalBitmapSmall();
+ if (bmap == null) {
+ return;
+ }
+ ImagePreset geoPreset = new ImagePreset(MasterImage.getImage().getGeometryPreset());
+ bmap = geoPreset.applyGeometry(bmap);
+ float w = bmap.getWidth();
+ float h = bmap.getHeight();
+ float s = Math.min(w, h);
+ float f = sIconSeedSize / s;
+ w = w * f;
+ h = h * f;
+ s = Math.min(w, h);
+ Bitmap bmap2 = Bitmap.createScaledBitmap(bmap, (int) s, (int) s, true);
+ bmap = createSquareImage(bmap2, bmap, new Rect(0, 0, (int) s, (int) s));
+ if (DEBUG) {
+ Log.v(LOGTAG, "Create thumbnail of size " + bmap.getWidth() + " x " + bmap.getHeight()
+ + " seed size: " + sIconSeedSize);
+ }
+ mThumbnailBitmap = bmap;
+ }
+
public float getScaleFactor() {
return mScaleFactor;
}
@@ -406,4 +461,8 @@ public class MasterImage implements RenderingRequestCaller {
mTranslation.y = 0;
needsUpdateFullResPreview();
}
+
+ public Bitmap getThumbnailBitmap() {
+ return mThumbnailBitmap;
+ }
}
diff --git a/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java b/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java
index 752fef0cd..9d50d5ac0 100644
--- a/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java
+++ b/src/com/android/gallery3d/filtershow/ui/FilterIconButton.java
@@ -74,11 +74,8 @@ public class FilterIconButton extends IconButton implements View.OnClickListener
return super.drawImage(dst, image, destination);
}
if (mIconBitmap == null && mPreset == null) {
- ImageLoader loader = MasterImage.getImage().getLoader();
- if (loader != null) {
- ImagePreset geoPreset = new ImagePreset(MasterImage.getImage().getGeometryPreset());
- image = geoPreset.applyGeometry(image);
- dst = super.drawImage(dst, image, destination);
+ dst = MasterImage.getImage().getThumbnailBitmap();
+ if (dst != null) {
ImagePreset mPreset = new ImagePreset();
mPreset.addFilter(mFilterRepresentation);
mPreset.setDoApplyGeometry(false);