打印出 ppm 文件的数组时出现问题

Problems printing out an array for a ppm file

本文关键字:问题 数组 ppm 文件 打印      更新时间:2023-10-16

我正在尝试使用结构创建一个数组以创建 ppm 文件。然后,我想调用其他函数,以便更改每个单元格的颜色值(rgb)以制作形状。

这是我尝试打印出一个包含三个 rgb 值的数组。

bool writeImage(const Color image[][IMAGE_WIDTH], int height) {
    ofstream imgGen;
    imgGen.open("imgGen.txt");
    imgGen << "P3 n";
    imgGen << IMAGE_WIDTH << " " << height << "n";
    imgGen << COLOR_SCALE << "n";
    for (int imageRow = 0; imageRow < height; imageRow++) {
       for (int imageColumn = 0; imageColumn < IMAGE_WIDTH; imageColumn++)
          imgGen << image[imageRow][imageColumn].red << " " << image[imageRow] 
              [imageColumn].green << " " << image[imageRow][imageColumn].blue;
       imgGen << endl;
    }
    imgGen.close();
return 0;
}

这是我尝试用于数组的结构。

struct Color
{
    unsigned char red;
    unsigned char green;
    unsigned char blue;
};
int main()
{
    Color image[IMAGE_HEIGHT][IMAGE_WIDTH];
    image[IMAGE_HEIGHT][IMAGE_WIDTH].red = 0;
    image[IMAGE_HEIGHT][IMAGE_WIDTH].green = 1;
    image[IMAGE_HEIGHT][IMAGE_WIDTH].blue = 2;
    writeImage(image, IMAGE_HEIGHT);
return 0;
}

我将其打印为文本文件以检查格式,并尝试让它打印出每个像素的三个值,如下所示:

P3
200 300
255
255 0 0 0 0 255
0 255 0 0 0 0

我当前的方法有什么问题,我可以在我的代码中做些什么不同的事情?感谢您的任何帮助!

image[IMAGE_HEIGHT][IMAGE_WIDTH].red = 0;
image[IMAGE_HEIGHT][IMAGE_WIDTH].green = 1;
image[IMAGE_HEIGHT][IMAGE_WIDTH].blue = 2;

在两个方面是错误的。

  1. 它们使用越界索引访问数组,因此会导致未定义的行为。
  2. 它们使数组的内容仍处于未初始化状态。

您需要逐个设置数组元素的值,就像访问它们以打印它们一样。

for (int imageRow = 0; imageRow < IMAGE_HEIGHT; imageRow++)
{
   for (int imageColumn = 0; imageColumn < IMAGE_WIDTH; imageColumn++)
   {
      image[imageRow][imageColumn].red = 0;
      image[imageRow][imageColumn].green = 1;
      image[imageRow][imageColumn].blue = 2;
   }
}