From 70d2e92560dffc31e591bcadd96ea7e0cbc9305e Mon Sep 17 00:00:00 2001 From: tongchenfei Date: Fri, 17 Jan 2020 14:47:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0Glide=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E6=97=B6=E4=BD=BF=E5=9B=BE=E7=89=87=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E9=AB=98=E6=96=AF=E6=A8=A1=E7=B3=8A=E7=9A=84=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../utils/glide/GlideBlurTransformation.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 foudations/mogo-utils/src/main/java/com/mogo/utils/glide/GlideBlurTransformation.java diff --git a/foudations/mogo-utils/src/main/java/com/mogo/utils/glide/GlideBlurTransformation.java b/foudations/mogo-utils/src/main/java/com/mogo/utils/glide/GlideBlurTransformation.java new file mode 100644 index 0000000000..41f1db3614 --- /dev/null +++ b/foudations/mogo-utils/src/main/java/com/mogo/utils/glide/GlideBlurTransformation.java @@ -0,0 +1,57 @@ +package com.mogo.utils.glide; + +import android.content.Context; +import android.graphics.Bitmap; +import android.renderscript.Allocation; +import android.renderscript.Element; +import android.renderscript.RenderScript; +import android.renderscript.ScriptIntrinsicBlur; + +import androidx.annotation.NonNull; + +import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; +import com.bumptech.glide.load.resource.bitmap.CenterCrop; + +/** + * 使用Glide加载图片时,使该图片进行高斯模糊 + * 基本用法:Glide.with(this).load(userInfo.headImgurl).apply(RequestOptions.bitmapTransform(GlideBlurTransformation(this))).into(ivCardBg) + * + * @author tongchenfei + */ +public class GlideBlurTransformation extends CenterCrop { + private static final float DEFAULT_BLUR_RADIUS = 25F; + + private Context context; + private float blurRadius; + public GlideBlurTransformation(Context context) { + this(context, DEFAULT_BLUR_RADIUS); + } + + public GlideBlurTransformation(Context context, float blurRadius) { + this.context = context; + this.blurRadius = blurRadius; + } + + @Override + protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, + int outWidth, int outHeight) { + Bitmap bitmap = super.transform(pool, toTransform, outWidth, outHeight); + return blurBitmap(bitmap, blurRadius, (int) (outWidth * 0.5), (int) (outHeight * 0.5)); + } + + private Bitmap blurBitmap(Bitmap bitmap, float blurRadius, int outWidth, int outHeight) { + Bitmap inputBitmap = Bitmap.createScaledBitmap(bitmap, outWidth, outHeight, false); + Bitmap outBitmap = Bitmap.createBitmap(inputBitmap); + + RenderScript renderScript = RenderScript.create(context); + ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(renderScript, + Element.U8_4(renderScript)); + Allocation tmpIn = Allocation.createFromBitmap(renderScript, inputBitmap); + Allocation tmpOut = Allocation.createFromBitmap(renderScript, outBitmap); + blurScript.setRadius(blurRadius); + blurScript.setInput(tmpIn); + blurScript.forEach(tmpOut); + tmpOut.copyTo(outBitmap); + return outBitmap; + } +}