使用Glide實現高斯模糊效果
阿新 • • 發佈:2020-12-18
使用Glide實現高斯模糊效果,供大家參考,具體內容如下
先來看效果
第一步:引入依賴
implementation 'com.github.bumptech.glide:glide:4.7.1' implementation 'jp.wasabeef:glide-transformations:2.0.1'
第二步:自定義繼承自BitmapTransformation的類
import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Build; import android.renderscript.RSRuntimeException; import androidx.annotation.NonNull; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; import java.nio.charset.Charset; import java.security.MessageDigest; import jp.wasabeef.glide.transformations.internal.FastBlur; import jp.wasabeef.glide.transformations.internal.RSBlur; /** * 虛化Transformation * 更多效果參考:https://github.com/wasabeef/glide-transformations */ public class BlurTransformation extends BitmapTransformation { private static String STRING_CHARSET_NAME = "UTF-8"; private static final String ID = "com.kevin.glidetest.BlurTransformation"; private static Charset CHARSET = Charset.forName(STRING_CHARSET_NAME); private static final byte[] ID_BYTES = ID.getBytes(CHARSET); private static int MAX_RADIUS = 25; private static int DEFAULT_DOWN_SAMPLING = 1; private Context mContext; private BitmapPool mBitmapPool; private int mRadius; private int mSampling; public BlurTransformation(Context context) { this(context,Glide.get(context).getBitmapPool(),MAX_RADIUS,DEFAULT_DOWN_SAMPLING); } public BlurTransformation(Context context,BitmapPool pool) { this(context,pool,BitmapPool pool,int radius) { this(context,radius,int radius,int sampling) { this(context,sampling); } public BlurTransformation(Context context,int sampling) { mContext = context.getApplicationContext(); mBitmapPool = pool; mRadius = radius; mSampling = sampling; } @Override protected Bitmap transform(@NonNull BitmapPool pool,@NonNull Bitmap toTransform,int outWidth,int outHeight) { Bitmap source = toTransform ; int width = source.getWidth(); int height = source.getHeight(); int scaledWidth = width / mSampling; int scaledHeight = height / mSampling; Bitmap bitmap = mBitmapPool.get(scaledWidth,scaledHeight,Bitmap.Config.ARGB_8888); if (bitmap == null) { bitmap = Bitmap.createBitmap(scaledWidth,Bitmap.Config.ARGB_8888); } Canvas canvas = new Canvas(bitmap); canvas.scale(1 / (float) mSampling,1 / (float) mSampling); Paint paint = new Paint(); paint.setFlags(Paint.FILTER_BITMAP_FLAG); canvas.drawBitmap(source,paint); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { try { bitmap = RSBlur.blur(mContext,bitmap,mRadius); } catch (RSRuntimeException e) { bitmap = FastBlur.blur(bitmap,mRadius,true); } } else { bitmap = FastBlur.blur(bitmap,true); } //return BitmapResource.obtain(bitmap,mBitmapPool); return bitmap; } @Override public int hashCode() { return ID.hashCode(); } @Override public boolean equals(Object obj) { return obj instanceof BlurTransformation; } @Override public void updateDiskCacheKey(MessageDigest messageDigest) { messageDigest.update(ID_BYTES); } }
第三步:實際使用
String url="url"; Glide.with(this).load(url) .apply(RequestOptions.bitmapTransform(new BlurTransformation(this,25,3))) .into(img); //引數用來設定模糊程度
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。