我正在尝试将图像读取到2D数组中,然后对其RGB值进行修改,然后创建一个调整大小的函数。在加载图像之前,图像的尺寸是未知的,因此看起来像这样。
我尝试将“ pixels”传递给无符号字符**,将pixels [0] [0]传递给无符号字符*,还有很多其他我不记得的方式。我在网上搜索了不同的方法,但似乎没有一个起作用。我已经看到,如果您定义像pixels [] [40]这样的数组之一的大小就可以了,但是直到加载图像后我才知道大小。
void invertImg(unsigned char **img, int height, int width)
{
int h, w;
for (h = 0; h < height; h++){
for (w = 0; w < width * 3; w += 3){
//Blue
img[h][w] = ~img[h][w];
//Green
img[h][w + 1] = ~img[h][w + 1];
//Red
img[h][w + 2] = ~img[h][w + 2];
}
}
}
// Get Image name and desired dimensions
char header[54];
unsigned char pixels[height][width * 3];
FILE *in = fopen(img, "rb");
FILE *out = fopen("out.bmp", "wb");
fread(header, 1, 54, in);
fread(pixels, 1, height * width * 3, in);
//function that the 2d array needs to be passed into
invertImg(pixels, height, width);
fwrite(header, sizeof(char), HEADER_SIZE, out);
fwrite(pixels, sizeof(char), height * width * 3, out);
fclose(in);
fclose(out);
如何将这个无符号字符数组放入函数中以能够修改其值?
答案 0 :(得分:3)
您可以传递具有基于其他参数的大小的多维数组:
void invertImg(int height, int width, unsigned char img[height][width])
{
...
对此函数的不带参数名称的声明应如下所示:
void invertImg(int, int, unsigned char img[*][*]);
然后您可以像这样调用函数:
invertImg(height, width, pixels);
答案 1 :(得分:1)
void invertImg(unsigned char *img, int height, int width)
{
int h, w;
for (h = 0; h < height; h++){
for (w = 0; w < width; w++){
for (color = 0; color < 3, ++color) {
img[ 3*width*h + 3*w + color] = ~img[ 3*width*h + 3*w + color]
}
}
}
}