图片模糊处理

RenderScript是处理Bitmap的对象的,对于Drawable需要先转成Bitmap然后先处理。但Drawable的子类有多种BitmapDrawable,GradientDrawable等

private Bitmap blurDrawable(Drawable drawable, int width, int height) {
        if (Build.VERSION.SDK_INT >= 17) {
//            Bitmap blurTemplate = ((BitmapDrawable) primaryBg).getBitmap();
            Bitmap blurTemplate = drawableToBitmap(primaryBg, width, height);
            RenderScript rs = RenderScript.create(getContext());
            Allocation input = Allocation.createFromBitmap(rs, blurTemplate);
            Allocation output = Allocation.createTyped(rs, input.getType());

            ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
            script.setRadius(20);
            script.setInput(input);
            script.forEach(output);
            output.copyTo(blurTemplate);
            rs.destroy();
            return blurTemplate;
        }
        return null;
    }

    public static Bitmap drawableToBitmap(Drawable drawable, int width, int height) {
        // 取 drawable 的长宽 - GradientDrawable获取的宽度和高度为-1
//        int w = drawable.getIntrinsicWidth();
//        int h = drawable.getIntrinsicHeight();
        int w = width;
        int h = height;

        // 取 drawable 的颜色格式
        Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;
        // 建立对应 bitmap
        Bitmap bitmap = Bitmap.createBitmap(w, h, config);
        // 建立对应 bitmap 的画布
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, w, h);
        // 把 drawable 内容画到画布中
        drawable.draw(canvas);
        return bitmap;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容