我正在为C ++中的图像缩小程序做作业。我的图片由2D像素阵列表示;每个像素都是一个成员为“红色”,“绿色”和“蓝色”的对象。为了解决这个问题,我试图一次访问一个块,然后调用一个找到每个块的平均RGB值的函数,并将一个新像素添加到一个较小的图像数组中。每个块的大小(或比例因子)由用户输入。
作为一个例子,想象一下像myArray [10] [10]这样的100项2D数组。如果用户输入缩小系数3,我需要打破3×3的迷你2D数组。我不必考虑溢出,所以在这个例子中我可以忽略最后一行和最后一列。
我编写了大部分程序,包括查找平均颜色的功能。我对如何遍历2D数组感到困惑。我知道如何顺序循环一个2D数组(一次一行),但我不知道如何在数组中得到小方块。
非常感谢任何帮助!
答案 0 :(得分:3)
这是你在C ++中遍历数组的方法:
for(i=0; i < m; i++) {
for(j=0; j < n; j++) {
// do something with myArray[i][j] where i represents the row and j the column
}
}
&#39;将留下如何以不同的方式循环通过阵列作为练习给读者。
答案 1 :(得分:3)
这样的事情应该有效:
for(size_t bx = 0; bx < width; bx += block_width)
for(size_t by = 0; by < height; by += block_height) {
float sum = 0;
for(size_t x = 0; x < block_width; ++x)
for(size_t y = 0; y < block_height; ++y) {
sum += array[bx + x][by + y];
}
average = sum / (block_width * block_height);
new_array[bx][by] = average;
}
width
是整个宽度,block_width
是图中蓝色方块的长度
答案 2 :(得分:0)
你可以使用两个嵌套循环,一个用于x,一个用于y,并将这些循环的起点移动到图像上。由于这是作业,我不会放任何代码,但你应该能够解决它。