运行使用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)`;


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

为什么会发生这种情况有任何帮助吗?

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

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

最佳答案

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

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

10-07 18:16