我有一个大小为320x240的2D数组,其中包含0到255之间的值。我想将此数据存储为灰度图像。
这是我到目前为止编写的代码:
int val[320][240];
FILE *image = fopen("depth.png","wb");
for (i=0; i < 320; i++)
{
for (j=0; j<240; j++)
{
printf("\nWriting to pixel %d %d in image",i,j);
fwrite(&val[i][j], sizeof(int), sizeof(int),image);
}
}
fclose(image);
但是此代码无法生成正确的图像。请提供更正代码的建议。
答案 0 :(得分:0)
您还需要担心其他问题 - 例如图像文件的格式。但是,您尝试使用以下行是错误的:
fwrite(&val[i][j], sizeof(int), sizeof(int), image);
如果sizeof(int)
为4,则会写入4 x 4
个字节。你需要写一个整数:
fwrite(&val[i][j], sizeof(int), 1, image);
不仅如此,你最终还是会越界访问数组,这将导致未定义的行为。
答案 1 :(得分:0)
由于您的数组包含原始图像数据,您需要以原始格式编写它,例如yuv 4:0:0。你的精度是uint8,(0 255),你需要用无符号的char精度来写每个像素。
unsigned char val[320][240];
FILE *image = fopen("depth.yuv", "wb");
for (unsigned int i = 0; i < 320; i++)
{
for (unsigned int j = 0; j< 240; j++)
{
fwrite(&val[i][j], sizeof(unsigned char), 1, image);
}
}
fclose(image);