diff options
author | nicolasroard <nicolasroard@google.com> | 2013-02-08 14:06:33 -0800 |
---|---|---|
committer | nicolasroard <nicolasroard@google.com> | 2013-02-08 14:52:05 -0800 |
commit | deeddb19c78a4299cc0e4075ed0265820eeb20f0 (patch) | |
tree | a0f103eeeb1434d6dcbe27bc12ccea0e190d5312 /src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java | |
parent | b7e69915ebc7fa89398649ec03e9aa619e9d9991 (diff) | |
download | android_packages_apps_Snap-deeddb19c78a4299cc0e4075ed0265820eeb20f0.tar.gz android_packages_apps_Snap-deeddb19c78a4299cc0e4075ed0265820eeb20f0.tar.bz2 android_packages_apps_Snap-deeddb19c78a4299cc0e4075ed0265820eeb20f0.zip |
Fix leaks / init
Change-Id: I5befdc24cc89cdcfb73ee4d13f076b1c4a585cf6
Diffstat (limited to 'src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java')
-rw-r--r-- | src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java b/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java index 6362124b9..200bcf153 100644 --- a/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java +++ b/src/com/android/gallery3d/filtershow/filters/ImageFilterBorder.java @@ -16,17 +16,25 @@ 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.R; +import java.util.HashMap; + public class ImageFilterBorder extends ImageFilter { private static final float NINEPATCH_ICON_SCALING = 10; private static final float BITMAP_ICON_SCALING = 1 / 3.0f; private FilterImageBorderRepresentation mParameters = null; + private Resources mResources = null; + + private HashMap<Integer, Drawable> mDrawables = new HashMap<Integer, Drawable>(); public ImageFilterBorder() { mName = "Border"; @@ -67,14 +75,15 @@ 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); - getParameters().getDrawable().setBounds(bounds); - getParameters().getDrawable().draw(canvas); + Drawable drawable = getDrawable(getParameters().getDrawableResource()); + drawable.setBounds(bounds); + drawable.draw(canvas); return bitmap; } @Override public Bitmap apply(Bitmap bitmap, float scaleFactor, boolean highQuality) { - if (getParameters() == null || getParameters().getDrawable() == null) { + if (getParameters() == null || getParameters().getDrawableResource() == 0) { return bitmap; } float scale2 = scaleFactor * 2.0f; @@ -84,11 +93,28 @@ public class ImageFilterBorder extends ImageFilter { @Override public Bitmap iconApply(Bitmap bitmap, float scaleFactor, boolean highQuality) { - if (getParameters() == null || getParameters().getDrawable() == null) { + if (getParameters() == null || getParameters().getDrawableResource() == 0) { return bitmap; } float scale1 = NINEPATCH_ICON_SCALING; float scale2 = BITMAP_ICON_SCALING; return applyHelper(bitmap, scale1, scale2); } + + public void setResources(Resources resources) { + if (mResources != resources) { + mResources = resources; + mDrawables.clear(); + } + } + + public Drawable getDrawable(int rsc) { + Drawable drawable = mDrawables.get(rsc); + if (drawable == null && mResources != null) { + drawable = new BitmapDrawable(mResources, BitmapFactory.decodeResource(mResources, rsc)); + mDrawables.put(rsc, drawable); + } + return drawable; + } + } |