我试图在同一个Renderscript文件中的函数内调用Renderscript内核,但我不知道该怎么做(而且Google文档并没有真正帮助)。
所以我想调用这个内核:
uchar __attribute__((kernel)) nextPixel(uint32_t x) {
tImgIndexB = (uint32_t) (lBlackX[rsGetElementAt_uchar(num, x)] + lX) * 426 + (lBlackY[rsGetElementAt_uchar(num, x)] + lY);
tImgIndexW = (uint32_t) (lWhiteX[rsGetElementAt_uchar(num, x)] + lX) * 426 + (lWhiteY[rsGetElementAt_uchar(num, x)] + lY);
if (tImg[tImgIndexB] == 0 && tImg[tImgIndexW] == 1) {
output = 1;
tImg[lX*426+lY] = 3;
//lX += lBlackX[rsGetElementAt_uchar(num, x)];
//lY += lBlackY[rsGetElementAt_uchar(num, x)];
} else {
output = 0;
}
return output;
}
进入这样的函数:
void function() {
// call kernel 'nextPixel'
}
先感谢您。
这并不是真正意图如何使用RS。 RS引擎使用适当的数据调用内核,内核可以调用其他函数。但是,在RS代码调用RS内核中使用函数并不是一般情况。
我从相机上得到一个框架,上面有一条线(从底边的某处开始)。我需要将线的左右边缘的每个像素都放在两个数组中(一个用于左边缘,一个用于右边缘),数组的第一个元素是底边的像素,最后一个数组中的元素是左边,上边或右边的像素。
我从相机获得的帧是YUV。所以我用Renderscript(可以工作)将它转换为二进制图像(黑色线条,白色背景)。
我可以将处理后的帧发送回Java,将其设置为位图,然后对位图进行线检测。但是,读取和写入位图的数据很慢(我需要它尽可能快),所以我试图在Renderscript中做所有事情。在我的第一篇文章中发布的内核会查找该行中的下一个像素(有8种可能性,所以我想并行查看8种可能性)。