最新消息:文章中包含代码时,请遵守代码高亮规范!

Android Picasso使用高斯模糊处理【原创】

Android 李, 泰愚 140浏览 0评论

众所周知,Picasso是一个在Android开发中经常使用到的图片加载库,常规用法一般是这样:

Picasso.with(context)
        .load(img_url)
        .config(Bitmap.Config.RGB_565)
        .into(imageView);

还有不使用缓存的用法:

Picasso.with(context)
        .load(img_url)
        .config(Bitmap.Config.RGB_565)
        .memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
        .into(imageView);

等等一系列用法不一一列举,前段时间遇到一个需要使用高斯模糊的需求,起初找了一些处理的代码,但后面发现Picasso在加载图片的时候可以直接进行处理,所以去学习了一下这个用法,和其他用法一样,各种点点点,这次是transform():

Picasso.with(context)
        .load(img_url)
        .config(Bitmap.Config.RGB_565)
        .memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE)
        .transform(new BlurTransformation(this))
        .into(imageView);

使用transform实现高斯模糊,其中关键代码为BlurTransformation的实现:

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(14);

        script.forEach(output);

        output.copyTo(blurredBitmap);

        bitmap.recycle();

        return blurredBitmap;
    }

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

新建好这个类后,则在Picasso使用是,作为参数给transform设置进去即可。

转载时请注明出处及相应链接,本文永久地址:http://blog.it985.com/22518.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者rick的打赏,我们会更加努力!    如果您想成为作者,请点我

您必须 登录 才能发表评论!