如何绘制和写入 ppm 文件?

How do I draw and write to a ppm file?

我想绘制 lines/shapes 并输出到 ppm 文件,但我什至不知道如何绘制单个像素。我知道如何输出到文件,并且知道有一个用于绘制像素的嵌套 for 循环方法(在网上找到这段代码),但我想知道是否有更简单的方法来处理它。

for (auto j = 0u; j < dimy; ++j)
    for (auto i = 0u; i < dimx; ++i)
        ofs << (char) (i % 256) << (char) (j % 256) << (char) ((i * j) % 256);

我正在参加一个使用 C++ 的 class,但这是我第一次使用该语言,所以请让您的回答简单易懂(我之前在 Java 中编写过代码如果有帮助的话)。另外,请不要列出 C++ 11 之后的任何功能。提前致谢! :)

我建议你看看 ppm 格式。 https://en.wikipedia.org/wiki/Netpbm#File_formats

你所做的只是构造一个这样的字符串:

1 0 0   0 1 0   0 0 1
1 1 0   1 1 1   0 0 0

因此,例如,您可以使用嵌套数组和嵌套循环来遍历它。

此代码将生成一个 std::ostringstream,其字符串代表一个 2x4 ppm 文件的 post-header 部分,该文件除第 2 行第 3 列像素外均为纯黑色,红色.

#include <iostream>
#include <sstream>

[...]

const int length = 2;
const int width = 4;

uint8_t table[length][width][3]{};

std::ostringstream oss;

table[1][2][0] = 255;

for (int i = 0; i < length; i++) {
    for (int j = 0; j < width; j++) {
        for (int k = 0; k < 3; k++) {
            oss << (int)table[i][j][k] << " ";
        }
        oss << "\n";
    }
    oss << "\n";
}