gpt4 book ai didi

c - PPM扫描和打印

转载 作者:行者123 更新时间:2023-11-30 16:41:36 25 4
gpt4 key购买 nike

我想从 .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. 您只需扫描输入一次。因此,所有像素都将具有相同的值。您可能想在内循环中调用 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' 读取字符串而不将其分配给变量。

关于c - PPM扫描和打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46205927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com