我想从.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");
}
}
}
知道我缺少什么吗?
答案 0 :(得分:0)
您的代码中存在许多错误:
input
一次。因此,所有像素都具有相同的值。您可能想在内循环中调用scanf
。%c
仅读取一个字符而不是数字。即使像素值的范围符合一个字节,也应使用%d
。print
应在内循环中调用,但使用不同的参数,除非您只想编写黑白图像:printf("%d %d %d ", r, g, b);
。您需要再次使用%d
代替%c
。scanf("%*s %d %d %d", &width, &height, &depth);
。 '%* s'读取字符串而不将其赋值给变量。