c++ - 打印 ppm 文件的数组时出现问题
问题描述
我正在尝试使用结构创建数组以创建 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;
在两个帐户上是错误的。
- 它们使用越界索引访问数组,因此会导致未定义的行为。
- 它们使数组的内容仍处于未初始化状态。
您需要一一设置数组元素的值,就像您访问它们以打印它们一样。
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;
}
}
推荐阅读
- css - 在 Heroku 上部署 react-app-rewired 和 react-app-rewire-less
- javascript - SVG 和 JS。传递值属性
- swift - Firebase 存储神秘消息:libc++abi.dylib:以 NSException 类型的未捕获异常终止
- crystal-reports - Crystal Reports 中的条件公式 SUM 不起作用
- java - 从我的应用程序发布到 Facebook 时出错
- vue.js - Vue v-for 数据不会在属性更改时更新
- ibm-watson - 当 Watson 助手聊天连续给出相同意图时如何触发对话?
- json - Oracle SQLcl:假脱机到json,只包含项目数组中的内容?
- php - 来自 JOOMLA 的错误 403
- android - 用于 Android 和 iOS 应用程序测试自动化的工具?