From be84355fddceb9690eef752707c42457ea251e77 Mon Sep 17 00:00:00 2001 From: nicolasroard Date: Tue, 2 Jul 2013 15:02:43 -0700 Subject: Speed up load times Compute the small res image on the fly Load the high res preview image after first load Change-Id: Icc556c2204cb4fd25766d90064a5756c877b11cc --- .../gallery3d/filtershow/cache/ImageLoader.java | 36 ++++++++++++---------- 1 file changed, 19 insertions(+), 17 deletions(-) (limited to 'src/com/android/gallery3d/filtershow/cache/ImageLoader.java') diff --git a/src/com/android/gallery3d/filtershow/cache/ImageLoader.java b/src/com/android/gallery3d/filtershow/cache/ImageLoader.java index 8513b1c71..a7149d1f0 100644 --- a/src/com/android/gallery3d/filtershow/cache/ImageLoader.java +++ b/src/com/android/gallery3d/filtershow/cache/ImageLoader.java @@ -88,6 +88,7 @@ public class ImageLoader { private static int mZoomOrientation = ORI_NORMAL; static final int MAX_BITMAP_DIM = 900; + static final int SMALL_BITMAP_DIM = 160; private ReentrantLock mLoadingLock = new ReentrantLock(); @@ -104,28 +105,29 @@ public class ImageLoader { return mActivity; } + public void loadHighResBitmap() { + if (MasterImage.getImage().supportsHighRes()) { + int highresPreviewSize = mOriginalBitmapLarge.getWidth() * 2; + if (highresPreviewSize > mOriginalBounds.width()) { + highresPreviewSize = mOriginalBounds.width(); + } + mOriginalBitmapHighres = loadScaledBitmap(mUri, highresPreviewSize, false); + if (mOrientation > 1 && mOriginalBitmapHighres != null) { + mOriginalBitmapHighres = rotateToPortrait(mOriginalBitmapHighres, mOrientation); + } + warnListeners(); + } + } + public boolean loadBitmap(Uri uri, int size) { mLoadingLock.lock(); mUri = uri; mOrientation = getOrientation(mContext, uri); - mOriginalBitmapSmall = loadScaledBitmap(uri, 160); - if (mOriginalBitmapSmall == null) { - // Couldn't read the bitmap, let's exit - mLoadingLock.unlock(); - return false; - } mOriginalBitmapLarge = loadScaledBitmap(uri, size); if (mOriginalBitmapLarge == null) { mLoadingLock.unlock(); return false; } - if (MasterImage.getImage().supportsHighRes()) { - int highresPreviewSize = mOriginalBitmapLarge.getWidth() * 2; - if (highresPreviewSize > mOriginalBounds.width()) { - highresPreviewSize = mOriginalBounds.width(); - } - mOriginalBitmapHighres = loadScaledBitmap(uri, highresPreviewSize, false); - } updateBitmaps(); mLoadingLock.unlock(); return true; @@ -194,12 +196,11 @@ public class ImageLoader { private void updateBitmaps() { if (mOrientation > 1) { - mOriginalBitmapSmall = rotateToPortrait(mOriginalBitmapSmall, mOrientation); mOriginalBitmapLarge = rotateToPortrait(mOriginalBitmapLarge, mOrientation); - if (mOriginalBitmapHighres != null) { - mOriginalBitmapHighres = rotateToPortrait(mOriginalBitmapHighres, mOrientation); - } } + int sw = SMALL_BITMAP_DIM; + int sh = (int) (sw * (float) mOriginalBitmapLarge.getHeight() / (float) mOriginalBitmapLarge.getWidth()); + mOriginalBitmapSmall = Bitmap.createScaledBitmap(mOriginalBitmapLarge, sw, sh, true); mZoomOrientation = mOrientation; warnListeners(); } @@ -369,6 +370,7 @@ public class ImageLoader { ImageShow imageShow = mListeners.elementAt(i); imageShow.imageLoaded(); } + MasterImage.getImage().invalidatePreview(); } }; -- cgit v1.2.3