需要帮助获取 Android Renderscript 的像素位置

Need help getting pixel location for Android Renderscript

我正在使用 Android Renderscript 来分析从 Camera2API 收到的预览帧。我打算分析每个像素并根据一些规则(取决于像素的强度和位置)我需要更新一个计数器。我打算使用 ForEach 循环,但如何获取像素坐标。

一个示例 java 循环是。

 for (int i = 0; i < 240; i++)
        {
            for (int j = 0; j < 320; j++)
            {
                tempPixelIntensity =  image.getPixel(i,j);
                x = i;
                y = j ;
                if(tempPixelIntensity=zzz&x<zzzandy<zzz)
                {
                     counter++;
                }
            }
        }

我将如何在渲染脚本中做同样的事情?谢谢

您可以尝试这样的操作:

#pragma rs_fp_relaxed   // needed for some GPUs
uint32_t counter;
void RS_KERNEL process(uchar tempPixelIntensity, uint32_t x, uint32_t y)
{
    if(tempPixelIntensity=zzz&x<zzzandy<zzz)
    {
        rsAtomicInc(&counter);
    }
}

RS内核是SPMD(单程序多数据)。因此,您只需为单个像素元素编写循环的内部部分,然后由框架执行循环。

在 java 一侧,您将执行以下操作:

 Type.Builder tb = new Type.Builder(rs, Element.U8(rs));
 tb.setX(320);
 tb.setY(240);
 Allocation input = Allocation.createTyped(rs, tb.create(), Allocation.USAGE_SCRIPT);
 script.forEach_process(input);

因此,输入分配的维度决定了内核操作的范围。在这种情况下,x 将不同于 [0,319],y 将不同于 [0,239]。内核的 x,y 参数是由 RS 运行时填充的特殊参数,类似地,tempPixelIntensity 值将由给定 x,y 坐标处的输入分配像素的值填充。