我收到一些图像数据unsigned char *image = load_image(…);
此数据是一个3D矩阵:x
(字符),y
(字符)和channel (RGB)
(字符)。
如何以image[x][y][channel]
方式访问每个元素?
e.g。第999行,第10000列,绿色通道:
image[999][10000][1]
澄清:
我想使用C多维数组语法:
array[x][y][z]
,而不是array[x * height * channels + y * channels + z]
我可以将1D数组作为2D数组访问:
unsigned char (*imageMatrix)[height] = (unsigned char (*)[height])image
imageMatrix[x][y] = 100
答案 0 :(得分:2)
如果你可以使用它:unsigned char (*imageMatrix)[height] = (unsigned char (*)[height])image,
,那么你的编译器支持可变长度数组。 VLA是在C99中引入的,但在C11中是可选的。
但是,当支持VLA时,您可以将一维数组别名化为三维数组,并将其别名为二维数组:
unsigned char (*imageMatrix)[width][channel] = (unsigned char (*)[width][channel])image;
imageMatrix[x][y][channel] = 100;