增加Glide加载图片时使图片进行高斯模糊的工具类
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user