Android Renderscript Allocation.USAGE_SHARED崩溃

时间:2013-09-10 01:07:27

标签: android allocation bitmapdata renderscript

我在运行使用renderscript的应用程序时遇到了崩溃。不幸的是,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)`;

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

有关为何会发生这种情况的任何帮助?

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

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

2 个答案:

答案 0 :(得分:2)

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

其次,如果您的复制时间花了这么长时间,您可能也会看到脚本执行。脚本执行是异步的,因此copyTo(位图)的挂钟时间可能不仅仅包括副本。

答案 1 :(得分:0)

我遇到了同样的问题并且我解决了,这个问题发生了,因为我的位图配置不是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);
    }