2

运行使用渲染脚本的应用程序时发生崩溃。不幸的是,logcat 没有给出任何具体细节。

b = Bitmap.createBitmap(ib.getWidth(), ib.getHeight(),ib.getConfig());

Allocation mInAllocation = Allocation.createFromBitmap(mRS, inBitmap,
                Allocation.MipmapControl.MIPMAP_NONE,Allocation.USAGE_SHARED);

Allocation mOutAllocation2 = Allocation.createFromBitmap(mRS,
                 outBitmap, Allocation.MipmapControl.MIPMAP_NONE,
                 Allocation.USAGE_SHARED);

...从 .rs 文件执行算法,然后执行以下操作

mOutAllocation2.copyTo(outBitmap)`;

当我对 mOutAllocation2 使用 USAGE_SCRIPT 标志而不是 USAGE_SHARED 时,相同的代码序列运行得非常好。

关于为什么会发生这种情况的任何帮助?

我在 android 文档中读到,如果分配是 USAGE_SHARED 类型,那么从分配到位图(见上文)的复制操作会更快。目前,我看到从分配到位图的副本运行到几秒钟,以获得相当大的图像(8MP 及以上)

我目前正在使用 Nexus 10 (Android 4.3)。

4

2 回答 2

3

首先,您需要使用 Allocation.USAGE_SCRIPT | 分配.USAGE_SHARED。createFromBitmap(RenderScript, Bitmap) 将尽可能为您设置。

其次,如果您的复制时间很长,您可能还会看到脚本执行。脚本执行是异步的,因此 copyTo(Bitmap) 的挂钟时间可能不仅仅包含副本。

于 2013-09-10T01:36:18.390 回答
1

我遇到了同样的问题,我解决了这个问题,因为我的位图配置不是 Bitmap.Config.ARGB_8888,我们应该在应用模糊之前将其转换为 ARGB_8888。

    Bitmap U8_4Bitmap;
    if (yourBitmap.getConfig() == Bitmap.Config.ARGB_8888) {
        U8_4Bitmap = yourBitmap;
    } else {
        U8_4Bitmap = yourBitmap.copy(Bitmap.Config.ARGB_8888, true);
    }
于 2017-11-02T12:51:27.400 回答