美文网首页自定义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