ScriptIntrinsicBlur生成不适当的模糊

时间:2016-10-21 22:59:15

标签: android bitmap renderscript

我一直在使用ScriptIntrinsicBlur模糊我的一个实际上填充了一个SOLID COLOR的位图。但我得到的模糊效果实在是不合适。请检查下面的图像。白色部分实际上是我模糊的位图。位图实际上用纯色填充整个窗口。

enter image description here

下面是代码模糊。

static Bitmap blurBackground(Context context, int color, int width, int height){
    Log.d("AppLock","RENDER DONE in " + System.currentTimeMillis());

    Bitmap bitmap = Bitmap.createBitmap(200,200, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    canvas.drawColor(color);
    canvas.save();

    Bitmap blurredBitmap = bitmap.copy(Bitmap.Config.ARGB_8888,true);
    RenderScript renderScript = RenderScript.create(context);

    Allocation inputAllocation = Allocation.createFromBitmap(renderScript,blurredBitmap, Allocation.MipmapControl.MIPMAP_FULL
            ,                   Allocation.USAGE_SHARED);
    Allocation outputAllocation = Allocation.createTyped(renderScript,inputAllocation.getType());

    ScriptIntrinsicBlur bluerScript = ScriptIntrinsicBlur.create(renderScript,Element.A_8(renderScript));
    bluerScript.setInput(inputAllocation);
    bluerScript.setRadius(15f);
    bluerScript.forEach(outputAllocation);
    outputAllocation.copyTo(blurredBitmap);
    bitmap.recycle();
    renderScript.destroy();
    Log.d("AppLock","RENDER DONE in " + System.currentTimeMillis());
    return blurredBitmap;

}

我一直在关注这里的教程Link To Tutorial

我在这里查了很多帖子,我知道我应该使用ARGB_8888来渲染脚本。我也尝试将Element更改为Element.U8_4()。但它的作用是让我回到200x200像素的位图,它实际上填满了整个窗口。我不知道我做错了什么。帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

我认为你所指的是调暗和模糊背景,而不仅仅是模糊纯色。

尝试使用本教程:http://allegro.tech/2015/08/android-fogger.html

或直接跳到图书馆:https://github.com/allegro/fogger