我在运行使用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)。
答案 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);
}