增加Glide加载图片时使图片进行高斯模糊的工具类

This commit is contained in:
tongchenfei
2020-01-17 14:47:31 +08:00
parent e5b0bd0df8
commit 70d2e92560

View File

@@ -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;
}
}