美文网首页自定义View&第三方库
两种方法简单实现高斯模糊

两种方法简单实现高斯模糊

作者: 伪装的狼 | 来源:发表于2020-02-08 20:21 被阅读0次

第一种:

效果:


image.png

1、添加依赖:
implementation "net.qiujuer.genius:blur:2.0.0-beta4"

调用代码:
// Java
Bitmap newBitmap = StackBlur.blur(mBitmap, (int) radius, false);

// Bitmap JNI Native
Bitmap newBitmap = StackBlur.blurNatively(mBitmap, (int) radius, false);

// Pixels JNI Native
Bitmap newBitmap = StackBlur.blurNativelyPixels(mBitmap, (int) radius, false);

其中,二三种调用实现方式的速度比第一种快

第二种:
通过使用图片框架:
添加依赖:
implementation 'com.squareup.picasso:picasso:2.5.2'

新建类:
public class BlurTransformation implements Transformation {
RenderScript rs;

public BlurTransformation(Context context) {
    super();
    rs = RenderScript.create(context);
}

@Override
public Bitmap transform(Bitmap bitmap) {
    Bitmap blurredBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);

    Allocation input = Allocation.createFromBitmap(rs, blurredBitmap, Allocation.MipmapControl.MIPMAP_FULL, Allocation.USAGE_SHARED);
    Allocation output = Allocation.createTyped(rs, input.getType());

    ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
    script.setInput(input);

    //设置模糊半径
    script.setRadius(25);

    script.forEach(output);

    output.copyTo(blurredBitmap);

    bitmap.recycle();

    return blurredBitmap;
}

@Override
public String key() {
    return "blur";
}

}

注意,这里Transformation实现的应该是picasso的Transformation,否则报错,模糊半径是:0<=radius<=25,其他的半径会闪退,模糊半径越大就越模糊,这种实现方式最小SDK版本是17。

调用代码:
Picasso.with(this)
.load(R.drawable.abc)
.config(Bitmap.Config.RGB_565)
.transform(new BlurTransformation(this))
.into(imageView);

相关文章

网友评论

    本文标题:两种方法简单实现高斯模糊

    本文链接:https://www.haomeiwen.com/subject/ibfwxhtx.html