void blur(int height, int width, RGBTRIPLE image[height][width])
{
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
int red_total = 0;
int blue_total = 0;
int green_total = 0;
int number_counted = 0;
for (int k = -1; k <= 1; k++)
{
for (int l = -1; l <= 1; l++)
{
if (i + k <= height && i + k >= 0 && j + l <= width && j + l >= 0)
{
blue_total += image[i+k][j+l].rgbtBlue;
red_total += image[i+k][j+l].rgbtRed;
green_total += image[i+k][j+l].rgbtGreen;
number_counted ++;
}
}
}
image[i][j].rgbtBlue = blue_total / number_counted;
image[i][j].rgbtRed = red_total / number_counted;
image[i][j].rgbtGreen = green_total / number_counted;
}
}
return;
}
为什么那个部分是 && 运算符?
if (i + k <= height && i + k >= 0 && j + l <= width && j + l >= 0)
我用 || 运行它操作员,因为我的理解是,如果满足这些条件中的任何一个,则在问题的幌子下,没有要添加的块。然而,为什么当我在 || 下运行它时它返回分段错误,而如果我使用 && 运行它,问题会解决吗?
感谢您的回答!
答案 0 :(得分:0)
所有这些条件都必须为真,否则数组操作将无效。
例如如果 i+k > height
则 image[i+k]
无效。
此外,我认为您有一些“一成不变的问题。image
是 [height][width]
,因此有效值是 [0..height-1]
和 [0..width-1]
,因此检查应该更像是 {{ 1}}