需要帮助获取 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 坐标处的输入分配像素的值填充。
我正在使用 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 坐标处的输入分配像素的值填充。