0

我试图在同一个 Renderscript 文件中的函数内调用 Renderscript 内核,但我不知道该怎么做(谷歌文档并没有真正帮助)。

所以我想调用这个内核:

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'
}

先感谢您。

4

2 回答 2

1

这并不是 RS 的真正用途。RS 引擎使用适当的数据调用您的内核,您的内核可以调用其他函数。但是,将 RS 代码中的函数调用到 RS 内核中并不是很正常的情况。

于 2019-03-01T11:20:05.450 回答
0

我从相机上得到一个框架,上面有一条线(从底部边缘的某个地方开始)。我需要在两个数组中获取线的左右边缘的每个像素(一个用于左边缘,一个用于右边缘),数组的第一个元素是底部边缘的像素,最后一个数组中的元素是左侧、顶部或右侧边缘的像素。

我从相机得到的帧是 YUV。因此,我使用 Renderscript(有效)将其转换为二进制图像(黑色线条,白色背景)。

我可以将处理后的帧发送回 Java,将其设置在位图中,然后在位图上进行线检测。但是,将数据读取和写入位图很慢(我需要它尽可能快),所以我试图在 Renderscript 中完成所有操作。在我的第一篇文章中发布的内核会查找行中的下一个像素(有 8 种可能性,所以我想并行检查 8 种可能性)。

于 2019-03-01T14:35:36.463 回答