ScriptIntrinsicBlur 生成黑色位图



我正在尝试使用RenderScript框架模糊应用程序中的位图。我正在使用以下代码:

public static Bitmap apply(Context context, Bitmap sentBitmap, int radius)
{
    Bitmap bitmap = sentBitmap.copy(sentBitmap.getConfig(), true);
    final RenderScript rs = RenderScript.create(context);
    final Allocation input = Allocation.createFromBitmap(rs, sentBitmap,
                                                         Allocation.MipmapControl.MIPMAP_NONE,
                                                         Allocation.USAGE_SCRIPT);
    final Allocation output = Allocation.createTyped(rs, input.getType());
    final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
    script.setRadius(radius);
    script.setInput(input);
    script.forEach(output);
    output.copyTo(bitmap);
    return bitmap;
}

不幸的是,我用代码得到的只是黑色位图。如何解决此问题?

传递给 apply 方法的位图按以下方式创建:

Bitmap b = Bitmap.createBitmap(thisView.getWidth(),
                               thisView.getHeight(),
                               Bitmap.Config.ARGB_8888);

这些位图的宽度和高度是 4 的倍数。

RenderScript 也报告了一些错误,但我不知道它们是什么意思以及我应该如何修复它们(ScriptIntrinsicBlur的文档相当薄)。以下是这些错误:

20305-20391/com.xxx E/RenderScript﹕ rsi_ScriptIntrinsicCreate 5
20305-20391/com.xxx E/RenderScript﹕ rsAssert failed: mUserRefCount > 0, in 
frameworks/rs/rsObjectBase.cpp at 112

编辑:

半径为5,我正在使用Android 4.2.1在三星Galaxy Nexus上运行该应用程序。

使用此函数模糊输入位图图像:

Bitmap BlurImage(Bitmap input) {
            RenderScript rsScript = RenderScript.create(this);
            Allocation alloc = Allocation.createFromBitmap(rsScript, input);
            ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rsScript, alloc.getElement());
            blur.setRadius(12);
            blur.setInput(alloc);
            Bitmap result = Bitmap.createBitmap(input.getWidth(), input.getHeight(), input.getConfig());
            Allocation outAlloc = Allocation.createFromBitmap(rsScript, result);
            blur.forEach(outAlloc);
            outAlloc.copyTo(result);
            rsScript.destroy();
            return result;
        }

感谢@Tim Murray,我解决了这个问题(实际上有两个)

我改用支持库,现在我希望带有 gradle 项目的 Android Studio 最终能够学会处理库符号。

问题的另一个主要来源是我使用完全透明的位图作为ScriptIntrinsicBlur的输入。我的坏。

从三月-07-2013编辑

Android Studio 0.5 修复了 Gradle 驱动的项目中支持 RenderScript 的问题。

最新更新