我正在开发一个使用 vector 的基本图像编辑器,我试图得到一个如下所示的矩阵,一个 4 x 4 但每个槽包含 3 个值(RGB 值)
0 0 0 100 0 0 0 0 0 255 0 255
0 0 0 0 255 175 0 0 0 0 0 0
0 0 0 0 0 0 0 15 175 0 0 0
255 0 255 0 0 0 0 0 0 255 255 255
到目前为止,我已经能够使用这段代码得到一个矩阵(我认为..)
int rows;
int columns;
fin >> rows;
fin >> columns;
vector<vector<int> > image_dimensions(rows);
for (int i = 0; i < rows; i++)
image_dimensions[i].resize(columns);
这只是为了创建一个全为 0 的矩阵。我怎样才能使每个插槽包含三个 RGB 值,如示例所示?最后,我必须使用什么复杂的循环才能更改每个槽中的各个值,例如将 0 0 0 变成 155 0 255?
最佳答案
目前您使用原始整数类型。考虑存储一些更复杂的像 RGB 类:
class RGB {
private:
std::unit8_t r, g, b;
public:
RGB() {}
RGB(int r, int g, int b) : r(r), g(g), b(b){ }
}
您可以简单地构造对象:
rgb = RGB(255,255,255);
之后,您可以将对象存储在 vector 中。
int rows;
int columns;
fin >> rows;
fin >> columns;
vector<vector<RGB> > image_dimensions(rows);
for (int i = 0; i < rows; i++)
image_dimensions[i].resize(columns);
与您的示例不同的是, vector 可以存储 RGB 类中的对象。如果您愿意,现在可以遍历 vector :
for (int i = 0; i < columns; i++)
for (int i = 0; i < rows; i++)
image_dimensions[i][j] = RGB(0,0,0);
编辑: 根据评论,最好不要浪费空间并使用 uint8 类型。所以不再需要验证。 您可以使用平面 vector 并计算二维索引。如果您使用大矩阵,这将生成更有效的解决方案。
编辑2: 不创建新类的第二种可能的解决方案是使用 std 元组类:
std::tuple<std::unit8_t, std::unit8_t, std::unit8_t > rgb(0,0,0);
在这种情况下,您的 vector 必须存储这种元组。 更多元组信息:klick
顺便说一句:创建一个小类或结构不应该打扰你。 ;-)
关于c++ - 图像编辑器和 vector 尺寸 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41925642/