diff options
| author | nicolasroard <nicolasroard@google.com> | 2013-03-05 03:03:04 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-03-05 03:03:04 +0000 |
| commit | a0adf2113b8728d92f270953ca8cab50335fe68e (patch) | |
| tree | 72549f6f87278b8e211bb433168e65ed975b91e6 /src | |
| parent | fc7d46515db7a3a50f7416c2462030609391cf95 (diff) | |
| parent | 4e1d35506bb72a2a6c16f08f8bd86bdfe8d1c902 (diff) | |
| download | android_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')
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); |
