PPM扫描和打印

时间:2017-09-13 20:00:28

标签: c file printf scanf

我想从.ppm类型的文件中扫描文件,这些文件是图像文件但是遵循以下数据结构

P3
4 4
255
255 255   0 255 255   0 255 255   0 255 255   0 
255 255   0 255   0   0 128 128 128 255 255   0 
255 255   0   0 255   0   0   0 255 255 255   0 
255 255   0 255 255   0 255 255   0 255 255   0 

每3个整数标记一列,所以在前3行之后,这标记了第二行所示的4x4表的模式。

我的第一步是读取这样的文件,其中高度和宽度可以变化,然后使用scanf和printf以精确的格式重新打印。

我对此的尝试如下:

scanf(" %d%d %d", &width, &height, &depth);
printf("P3\n%d %d\n %d\n", width, height, depth);

   while(scanf("%c", &input) >= 1) {
        for (int i = 0; i < width; i++) {
            printf("%c %c %c ", input, input, input);
            for (int j = 0; j < height; j++) {
                printf("\n");
            }
        }
    }

知道我缺少什么吗?

1 个答案:

答案 0 :(得分:0)

您的代码中存在许多错误:

  1. 您只扫描input一次。因此,所有像素都具有相同的值。您可能想在内循环中调用scanf
  2. 格式说明符%c仅读取一个字符而不是数字。即使像素值的范围符合一个字节,也应使用%d
  3. 如前所述,内部循环只打印换行符。这属于外循环。
  4. print应在内循环中调用,但使用不同的参数,除非您只想编写黑白图像:printf("%d %d %d ", r, g, b);。您需要再次使用%d代替%c
  5. 如另一条评论中所述,您需要跳过标题中的“P3”。您可以将第一行修改为scanf("%*s %d %d %d", &width, &height, &depth);。 '%* s'读取字符串而不将其赋值给变量。