diff options
Diffstat (limited to 'src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java')
-rw-r--r-- | src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java index a7286f0fa..5f3502272 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java @@ -18,13 +18,15 @@ package com.android.gallery3d.filtershow.filters; import android.content.res.Resources; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import com.android.gallery3d.data.DecodeUtils; + import java.util.HashMap; +import java.lang.ref.WeakReference; public class ImageFilterBorder extends ImageFilter { private static final float NINEPATCH_ICON_SCALING = 10; @@ -32,7 +34,7 @@ public class ImageFilterBorder extends ImageFilter { private FilterImageBorderRepresentation mParameters = null; private Resources mResources = null; - private HashMap<Integer, Drawable> mDrawables = new HashMap<Integer, Drawable>(); + private HashMap<Integer, WeakReference<Drawable>> mDrawables = new HashMap<Integer, WeakReference<Drawable>>(); public ImageFilterBorder() { mName = "Border"; @@ -57,7 +59,7 @@ public class ImageFilterBorder extends ImageFilter { Rect bounds = new Rect(0, 0, (int) (w * scale1), (int) (h * scale1)); Canvas canvas = new Canvas(bitmap); canvas.scale(scale2, scale2); - Drawable drawable = getDrawable(getParameters().getDrawableResource()); + Drawable drawable = getDrawable(getParameters().getDrawableResource(), w, h); drawable.setBounds(bounds); drawable.draw(canvas); return bitmap; @@ -80,11 +82,12 @@ public class ImageFilterBorder extends ImageFilter { } } - public Drawable getDrawable(int rsc) { - Drawable drawable = mDrawables.get(rsc); + public Drawable getDrawable(int rsc, int reqWidth, int reqHeight) { + Drawable drawable = (mDrawables.get(rsc) != null) ? mDrawables.get(rsc).get() : null; if (drawable == null && mResources != null && rsc != 0) { - drawable = new BitmapDrawable(mResources, BitmapFactory.decodeResource(mResources, rsc)); - mDrawables.put(rsc, drawable); + drawable = new BitmapDrawable(mResources, DecodeUtils.decodeBitmap( + mResources, rsc, reqWidth, reqHeight)); + mDrawables.put(rsc, new WeakReference<Drawable>(drawable)); } return drawable; } |