在ImageView的背景模糊模糊、背景、ImageView

由网友(無風也能起浪)分享简介:我想在ImageView的模糊背景。我有这个,但一切都模糊了,无论是图像和背景: ...    imageView.setImageBitmap(bitmapWithoutBlur);    位图bitmapBlur =模糊(getApplicationContext(),bitmapWithoutBlur);...

我想在ImageView的模糊背景。

我有这个,但一切都模糊了,无论是图像和背景:

  ...    imageView.setImageBitmap(bitmapWithoutBlur);    位图bitmapBlur =模糊(getApplicationContext(),bitmapWithoutBlur);    BitmapDrawable bitmapDrawable =新BitmapDrawable(getResources(),bitmapBlur);    imageView.setBackgroundDrawable(bitmapDrawable);    ...    公共静态位图模糊(上下文的背景下,位图位图){            INT宽度= Math.round(bitmap.getWidth());            INT高度= Math.round(bitmap.getHeight());            位图inputBitmap = Bitmap.createScaledBitmap(位图,宽度,高度,假);            位图outputBitmap = Bitmap.createBitmap(inputBitmap);            RenderScript RS = RenderScript.create(背景);            ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(RS,Element.U8_4(RS));            分配tmpIn = Allocation.createFromBitmap(RS,inputBitmap);            分配tmpOut = Allocation.createFromBitmap(RS,outputBitmap);            theIntrinsic.setRadius(25F);            theIntrinsic.setInput(tmpIn);            theIntrinsic.forEach(tmpOut);            tmpOut.copyTo(outputBitmap);            返回outputBitmap;    } 

解决方案

从RenderScript使用库来ScriptIntrinsicBlur模糊quickly.Follow这如何访问RenderScript API的http://developer.android.com/guide/topics/renderscript/compute.html#access-rs-apis.以下是我做了模糊意见和位图类:

 公共类BlurBuilder {    私有静态最终浮动BITMAP_SCALE = 0.4f;    私有静态最终浮动BLUR_RADIUS = 7.5f;    公共静态位图模糊(视图v){        返回模糊(v.getContext(),getScreenshot(ⅴ));    }    公共静态位图模糊(上下文CTX,位图图像){        INT宽度= Math.round(image.getWidth()* BITMAP_SCALE);        INT高度= Math.round(image.getHeight()* BITMAP_SCALE);        位图inputBitmap = Bitmap.createScaledBitmap(图像,宽度,高度,假);        位图outputBitmap = Bitmap.createBitmap(inputBitmap);        RenderScript RS = RenderScript.create(CTX);        ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(RS,Element.U8_4(RS));        分配tmpIn = Allocation.createFromBitmap(RS,inputBitmap);        分配tmpOut = Allocation.createFromBitmap(RS,outputBitmap);        theIntrinsic.setRadius(BLUR_RADIUS);        theIntrinsic.setInput(tmpIn);        theIntrinsic.forEach(tmpOut);        tmpOut.copyTo(outputBitmap);        返回outputBitmap;    }    私有静态位图getScreenshot(视图v){        位图B = Bitmap.createBitmap(v.getWidth(),v.getHeight(),Bitmap.Config.ARGB_8888);        帆布C =新的Canvas(B);        v.draw(C);        返回b;    }} 

朦胧模糊背景高清图片

I would like to have blurred background in ImageView.

I have this, but everything is blurred, both image and the background:

    ...
    imageView.setImageBitmap(bitmapWithoutBlur);

    Bitmap bitmapBlur = blur(getApplicationContext(), bitmapWithoutBlur);

    BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(), bitmapBlur);

    imageView.setBackgroundDrawable(bitmapDrawable);

    ...

    public static Bitmap blur(Context context, Bitmap bitmap) {
            int width = Math.round(bitmap.getWidth());
            int height = Math.round(bitmap.getHeight());

            Bitmap inputBitmap = Bitmap.createScaledBitmap(bitmap, width, height, false);
            Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap);

            RenderScript rs = RenderScript.create(context);
            ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
            Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap);
            Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap);
            theIntrinsic.setRadius(25f);
            theIntrinsic.setInput(tmpIn);
            theIntrinsic.forEach(tmpOut);
            tmpOut.copyTo(outputBitmap);

            return outputBitmap;
    }

解决方案

Use ScriptIntrinsicBlur from the RenderScript library to blur quickly.Follow this to how to access the RenderScript API http://developer.android.com/guide/topics/renderscript/compute.html#access-rs-apis. The following is a class I made to blur Views and Bitmaps:

public class BlurBuilder {
    private static final float BITMAP_SCALE = 0.4f;
    private static final float BLUR_RADIUS = 7.5f;

    public static Bitmap blur(View v) {
        return blur(v.getContext(), getScreenshot(v));
    }

    public static Bitmap blur(Context ctx, Bitmap image) {
        int width = Math.round(image.getWidth() * BITMAP_SCALE);
        int height = Math.round(image.getHeight() * BITMAP_SCALE);

        Bitmap inputBitmap = Bitmap.createScaledBitmap(image, width, height, false);
        Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap);

        RenderScript rs = RenderScript.create(ctx);
        ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
        Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap);
        Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap);
        theIntrinsic.setRadius(BLUR_RADIUS);
        theIntrinsic.setInput(tmpIn);
        theIntrinsic.forEach(tmpOut);
        tmpOut.copyTo(outputBitmap);

        return outputBitmap;
    }

    private static Bitmap getScreenshot(View v) {
        Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas c = new Canvas(b);
        v.draw(c);
        return b;
    }
}

阅读全文

相关推荐

最新文章