我试图解决反射过滤器在CS50第4周pset,但我卡住了。我的逻辑是使用RGBTRIPLE类型的缓冲区将整个图像中的最后一个像素从image[n][width - 1]
复制到第一个像素image[n][n]
。但是,我的代码似乎有些问题:
void reflect(int height, int width, RGBTRIPLE image[height][width])
{
for (int h = 0; h < height; h++)
{
RGBTRIPLE buffer;
for (int w = 0; w < width; w++)
{
buffer = image[h][w];
image[h][w] = image[h][width - w];
image[h][width - w] = buffer;
}
}
return;
}
1条答案
按热度按时间aiqt4smr1#
你的代码是不正确的,至少因为当
h
等于height - 1
并且w
等于0
时,这个表达式image[h][width - w]
可以访问图像以外的内存,因为数组中一行的有效索引范围是[0, width)
。但是即使你使用表达式
image[h][width - w - 1]
循环结果将形成相同的原始行。
如果你想反转图像的每一行,那么函数可以如下所示