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

时间:2016-11-23 11:55:50

标签: android image-processing 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++;
                }
            }
        }

我如何在renderscript中做同样的事情?感谢

1 个答案:

答案 0 :(得分:3)

您可以尝试这样的事情:

#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坐标处的输入分配像素的值填充。