使用原声RenderScript实现高斯模糊
博客专区 > march_kk 的博客 > 博客详情
使用原声RenderScript实现高斯模糊
march_kk 发表于8个月前
使用原声RenderScript实现高斯模糊
  • 发表于 8个月前
  • 阅读 10
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

/**
 * Created by kk on 17-4-26
 */

public class RenderscriptUtils {

    private static final String TAG = "kk";

    private Context context;
    private static RenderscriptUtils instance;

    public RenderscriptUtils(Context context) {
        this.context = context;
    }

    public static RenderscriptUtils getInstance(Context context) {

        if (null == instance) {
            instance = new RenderscriptUtils(context);
            return instance;
        }
        return instance;
    }


    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    public Bitmap blur(Bitmap bitmap, float radius) {
        if (bitmap == null) {
            return null;
        }
        if (context == null) {
            return null;
        }
        Bitmap output = Bitmap.createBitmap(bitmap); // 创建输出图片
        RenderScript rs = RenderScript.create(context); // 构建一个RenderScript对象
        ScriptIntrinsicBlur gaussianBlue = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); // 创建高斯模糊脚本
        Allocation allIn = Allocation.createFromBitmap(rs, bitmap); // 创建用于输入的脚本类型
        Allocation allOut = Allocation.createFromBitmap(rs, output); // 创建用于输出的脚本类型
        gaussianBlue.setRadius(radius); // 设置模糊半径,范围0f<radius<=25f
        gaussianBlue.setInput(allIn); // 设置输入脚本类型
        gaussianBlue.forEach(allOut); // 执行高斯模糊算法,并将结果填入输出脚本类型中
        allOut.copyTo(output); // 将输出内存编码为Bitmap,图片大小必须注意
        rs.destroy(); // 关闭RenderScript对象,API>=23则使用rs.releaseAllContexts()
        return output;
    }


    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    private void setImage(View v, Bitmap bitmap) {
        v.setBackground(new BitmapDrawable(context.getResources(), bitmap));
    }

    private void getBitmapFromNet(final View v, String url) {

        VolleyUtils volleyUtils = App.getInstance(context).getVolleyUtils();
        RequestQueue requestQueue = volleyUtils.getRequestQueue();

        ImageRequest imageRequest = new ImageRequest(url,
                new Response.Listener<Bitmap>() {

                    @Override
                    public void onResponse(Bitmap bitmap) {
                        Bitmap blurBitmap = blur(bitmap, 18f);
                        if (null != blurBitmap) {
                            setImage(v, blurBitmap);
                        }
                    }

                }, 500, 300, Bitmap.Config.ARGB_8888,
                new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError e) {
                        e.printStackTrace();
                        Log.e(TAG, "onErrorResponse: " + e.getErrorInfo().getMessage());
                    }
                });

        requestQueue.add(imageRequest);

    }


    public void setImageVague(final View v, final String uri) {

        if (null == context) {
            return;
        }

        getBitmapFromNet(v, uri);

    }


}

 

共有 人打赏支持
粉丝 0
博文 15
码字总数 2826
×
march_kk
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: