1
0
mirror of https://github.com/wasabeef/glide-transformations.git synced 2025-06-09 16:14:09 +08:00

Use WeakReference.

This commit is contained in:
A.Akira 2015-11-25 17:09:05 +09:00
parent 36ceccb38e
commit 260f91e291

View File

@ -29,13 +29,14 @@ import com.bumptech.glide.load.Transformation;
import com.bumptech.glide.load.engine.Resource; import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapResource; import com.bumptech.glide.load.resource.bitmap.BitmapResource;
import java.lang.ref.WeakReference;
public class BlurTransformation implements Transformation<Bitmap> { public class BlurTransformation implements Transformation<Bitmap> {
private static int MAX_RADIUS = 25; private static int MAX_RADIUS = 25;
private static int DEFAULT_DOWN_SAMPLING = 1; private static int DEFAULT_DOWN_SAMPLING = 1;
private Context mContext; private WeakReference<Context> mContext;
private BitmapPool mBitmapPool; private BitmapPool mBitmapPool;
private int mRadius; private int mRadius;
@ -58,14 +59,14 @@ public class BlurTransformation implements Transformation<Bitmap> {
} }
public BlurTransformation(Context context, BitmapPool pool, int radius, int sampling) { public BlurTransformation(Context context, BitmapPool pool, int radius, int sampling) {
mContext = context; mContext = new WeakReference<>(context);
mBitmapPool = pool; mBitmapPool = pool;
mRadius = radius; mRadius = radius;
mSampling = sampling; mSampling = sampling;
} }
public BlurTransformation(Context context, int radius, int sampling) { public BlurTransformation(Context context, int radius, int sampling) {
mContext = context; mContext = new WeakReference<>(context);
mBitmapPool = Glide.get(context).getBitmapPool(); mBitmapPool = Glide.get(context).getBitmapPool();
mRadius = radius; mRadius = radius;
mSampling = sampling; mSampling = sampling;
@ -91,7 +92,7 @@ public class BlurTransformation implements Transformation<Bitmap> {
paint.setFlags(Paint.FILTER_BITMAP_FLAG); paint.setFlags(Paint.FILTER_BITMAP_FLAG);
canvas.drawBitmap(source, 0, 0, paint); canvas.drawBitmap(source, 0, 0, paint);
RenderScript rs = RenderScript.create(mContext); RenderScript rs = RenderScript.create(mContext.get());
Allocation input = Allocation.createFromBitmap(rs, bitmap, Allocation.MipmapControl.MIPMAP_NONE, Allocation input = Allocation.createFromBitmap(rs, bitmap, Allocation.MipmapControl.MIPMAP_NONE,
Allocation.USAGE_SCRIPT); Allocation.USAGE_SCRIPT);
Allocation output = Allocation.createTyped(rs, input.getType()); Allocation output = Allocation.createTyped(rs, input.getType());
@ -102,6 +103,8 @@ public class BlurTransformation implements Transformation<Bitmap> {
blur.forEach(output); blur.forEach(output);
output.copyTo(bitmap); output.copyTo(bitmap);
source.recycle();
resource.recycle();
rs.destroy(); rs.destroy();
return BitmapResource.obtain(bitmap, mBitmapPool); return BitmapResource.obtain(bitmap, mBitmapPool);