我正在使用forEach_root方法在Android上计算图像。

RenderScript RS=RenderScript.create(context);

Allocation inPixelsAllocation = Allocation.createFromBitmap(RS, inBitmap,
            Allocation.MipmapControl.MIPMAP_NONE,Allocation.USAGE_SCRIPT);
Bitmap out=Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);
Allocation outPixelsAllocation = Allocation.createFromBitmap(RS, out,
Allocation.MipmapControl.MIPMAP_NONE,Allocation.USAGE_SCRIPT);

mScript.forEach_root(inPixelsAllocation,outPixelsAllocation);
outPixelsAllocation.copyTo(out);
return out;


这可以正常工作,但是,由于可能存在大量数据(要处理的像素超过1800万像素),因此可能需要一些时间。
是否有可能获得RenderScript forEach-loop的当前过程?

最佳答案

我假设“当前过程”是指状态(以便您可以显示进度条或类似的内容)。没有办法知道已经完成了多少工作,或者剩下多少对开发人员可见。实际上,我认为我们无法真正地计算出这一点,因为您可以使用简单的if语句查找该像素坐标,从而使内核实例的任何单个单元花费更长的时间。因此,根据您认为状态信息能为您提供的信息,我有两个可能的建议:1)如果您要制作进度条并希望让用户知道您确实在使用进度条,请使用微调器还在工作; 2)如果您需要进行同步,则稍后您对输入/输出分配所做的任何操作都将等待内核完成(即,您的copyTo操作将适当地阻塞)。

09-30 23:03