【问题标题】:How would I use an array to print an image?我将如何使用数组来打印图像?
【发布时间】:2014-07-08 03:37:42
【问题描述】:

我试图弄清楚如何使用数组打印一盒同心正方形,如下所示:http://imgur.com/U5rXGsY

我有一个每种颜色的 RGB 值表,但我不知道该怎么做。这就是我到目前为止所拥有的。编译后导出为 PPM 文件格式。

#include <stdio.h>
#include <stdlib.h>
#define HEIGHT 700
#define WIDTH 700
#define COLORS 3

int main(){
 int x,y,i;
 unsigned char image[WIDTH][HEIGHT][COLORS];
 image[][][COLORS]={{0},{0},{0,1,2}};
 printf("P6\r\n");
 printf("700 700\r\n");
 printf("255\n");
for(y=0;y<HEIGHT;++y)
{
 for(x=0;x<WIDTH;++x)
 {
  image[700][700][0];
  image[700][700][1];
  image[700][700][2];
  printf
 }
}
return 0;
}

【问题讨论】:

  • 您是想获取一个 RGB 数组并输出一个图像文件,还是想找到一种方法将数组图像显示到屏幕上?
  • 输出一个我可以用 ppm 查看器打开的图像文件
  • 您需要熟悉 PPM 文件格式和压缩(如果有)。获得数组后,您可以使用fopen() 创建输出文件并使用fwrite() 以正确格式写入数组。看起来您正在使用 printf() 打印格式,但它需要写入文件而不是控制台。打开文件句柄并改用fprintf()
  • 您可能希望从更简单的东西开始,例如全蓝色图像,以确保文件格式能够正常工作。

标签: c arrays image unsigned ppm


【解决方案1】:

把这个放在printf() 调用之前:

FILE * outputFile = fopen("path/to/output/file.ppm","w");

然后,将您所有的 printf("text") 调用更改为 fprintf(outputFile,"text")

最后,您可以使用fwrite()在一次调用中写入所有数据,而不是使用嵌套循环

用这个替换两个循环:

fwrite((void*)image, COLORS, WIDTH * HEIGHT, outputFile);

这会将数组以 1 个 RGB 像素块的形式写入 outputFile。 void* 演员应该使任何警告静音。图像数组实际上是一个指针。字节序可能存在一些问题,但请测试此代码并查看它是否有效。

【讨论】:

    猜你喜欢
    • 2011-09-07
    • 2022-01-16
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 2012-01-16
    • 2021-11-26
    • 1970-01-01
    相关资源
    最近更新 更多