CS50(2019)习题集&过滤器&:模糊&不知何故不能正常工作 [英] CS50(2019) problem set "Filter": "blur" somehow not working correctly
本文介绍了CS50(2019)习题集&过滤器&:模糊&不知何故不能正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
所以,我花了大约5个小时以上的时间试图找出我的代码出了什么问题。我试着用我在Paint中手动创建的3x3文件调试50,一切似乎都按预期进行;每个像素围绕自身进行3x3扫描,并忽略不存在的像素,如角落或边缘中的像素。每种颜色的最终平均值也是正确的。然而,不知何故,当我用check 50检查时,它给出了以下消息:
经过无数次的调整和挠头,我决定可能是时候向社区寻求帮助了。以下是我的代码:
{
for (int h = 0; h < height; h++)
{
for (int w = 0; w < width; w++)
{
int avgfordiv = 0;
int neighvalgreen = 0;
int neighvalblue = 0;
int neighvalred = 0;
for (int hh = -1; hh < 2; hh++)
{
for (int ww = -1; ww < 2; ww++)
{
if ((h+hh) != height && (w+ww) != width && (h+hh) != -1 && (w+ww) != -1)
{
//sweep
avgfordiv++;//count up for division
neighvalgreen += image[h + hh][w + ww].rgbtGreen;
neighvalred += image[h + hh][w + ww].rgbtRed;
neighvalblue += image[h + hh][w + ww].rgbtBlue;
}
}
}
//add values to pixels
image[h][w].rgbtGreen = (int)(round((float)neighvalgreen / avgfordiv));
image[h][w].rgbtBlue = (int)(round((float)neighvalblue / avgfordiv));
image[h][w].rgbtRed = (int)(round((float)neighvalred / avgfordiv));
//check cap
if (image[h][w].rgbtGreen <= 255)
{}
else
image[h][w].rgbtGreen %= 255;
if (image[h][w].rgbtRed <= 255)
{}
else
image[h][w].rgbtRed %= 255;
if (image[h][w].rgbtBlue <= 255)
{}
else
image[h][w].rgbtBlue %= 255;
}
}
return;
}
推荐答案
复制图像并使用该副本计算红色、绿色和蓝色的总量似乎可以修复它。
RGBTRIPLE copy[height][width];
for (int h = 0; h < height; i++)
{
for (int w = 0; w < width; j++)
{
copy[h][w] = image[h][w];
}
}
并将其更改为:
neighvalgreen += copy[h + hh][w + ww].rgbtGreen;
neighvalred += copy[h + hh][w + ww].rgbtRed;
neighvalblue += copy[h + hh][w + ww].rgbtBlue;
此外,您不需要检查这些值是否超过255,因为您正在计算平均值,因此它永远不会超过255。
这篇关于CS50(2019)习题集&过滤器&:模糊&不知何故不能正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文