我试图在C程序中编写一个PGM文件,但是一旦写入,如果我尝试打开它查看图像,就会被告知无法确定图像文件格式。

但是,如果我在geany中创建一个新文件,将数据复制过来,然后将THAT另存为新的PGM,则可以正常工作。

知道为什么会这样吗?

FILE * grey = fopen("greyscale.pgm", "w");

fprintf(grey, "P2 \r\n%d %d \r\n255 \r\n", width, height);

for (i = 0; i < width; i++) {
    for (j = 0; j < height; j++) {
        fprintf(grey, "%d ", ((imageArray[i][j].red + imageArray[i][j].green + imageArray[i][j].blue)/3));
    }
    fprintf(grey, "\r\n");
}


我正在将彩色图像转换为灰度。

最佳答案

我认为您不应将\r\n用作行定界符,而应仅使用\n。另外,请检查没有超过70个字符的行。由于每个像素最多需要4个字符(3个空格),因此每17个像素后插入\n
您可以将实线与注释分开(例如:

pixel11 pixel12 pixel13
pixel14 pixel15
# switch to next row
pixel21 pixel22 pixel23
pixel24 pixel25
# etc.

07-28 02:04