图像编辑器和矢量尺寸C ++

时间:2017-01-29 20:34:35

标签: c++ vector rows

我正在使用向量处理基本图像编辑器,我正在尝试获得如下所示的矩阵,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?

1 个答案:

答案 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

顺便说一句:创建一个小班或结构不应该打扰你。 ; - )