我正在使用向量处理基本图像编辑器,我正在尝试获得如下所示的矩阵,4乘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?
答案 0 :(得分:1)
目前使用原始整数类型。考虑存储一些更复杂的类似RGB类:
$('#box').click(function() {
$(this).toggleClass("box_hover");
});
您可以使用:
简单地构造对象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);
您的示例的不同之处在于,矢量可以存储RGB类中的对象。如果您愿意,现在可以遍历向量:
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);
编辑: 根据评论,最好不要浪费空间并使用uint8类型。因此不再需要验证。 你可以使用平面向量并计算2d指数。如果您使用大型矩阵,这将产生更有效的解决方案。
EDIT2: 不创建新类的第二种可能的解决方案是使用std元组类:
for (int i = 0; i < columns; i++)
for (int i = 0; i < rows; i++)
image_dimensions[i][j] = RGB(0,0,0);
在这种情况下,你的向量必须存储这种元组。 更多元组信息:klick
顺便说一句:创建一个小班或结构不应该打扰你。 ; - )