c - CS50(2020) PSET 4 滤镜:模糊功能无法正常工作
问题描述
我已经多次重写这段代码试图让它工作。当我阅读这段代码时,它看起来应该在逻辑上可以工作,但是当我通过 Check50 运行它时仍然出现错误,并且除了角落之外的所有内容都返回错误。我不确定是哪一部分导致了问题,我知道其中一个 if 语句没有正确添加所有内容,但它们在我看来在逻辑上都是正确的。代码的这一部分确实给我带来了问题。提前感谢您的帮助。
void blur(int height, int width, RGBTRIPLE image[height][width])
{
//Store copy of original
RGBTRIPLE Original[height][width];
for (int i = 0; i < height; i++) //loop through rows
{
for (int n = 0; n < width; n++) //loop through columns
{
Original[i][n] = image[i][n];
}
}
int counter = 0;
float newred = 0;
float newgreen = 0;
float newblue = 0;
for (int i = 0; i < height; i++) //loop through rows
{
for (int n = 0; n < width; n++) //loop through columns
{
if (i >= 0 && n >= 0)
{
newred = newred + Original[i][n].rgbtRed;
newgreen = newgreen + Original[i][n].rgbtGreen;
newblue = newblue + Original[i][n].rgbtBlue;
counter++;
}
if (i >= 0 && n - 1 >= 0)
{
newred = newred + Original[i][n-1].rgbtRed;
newgreen = newgreen + Original[i][n-1].rgbtGreen;
newblue = newblue + Original[i][n-1].rgbtBlue;
counter++;
}
if (i - 1 >= 0 && n >= 0)
{
newred = newred + Original[i-1][n].rgbtRed;
newgreen = newgreen + Original[i-1][n].rgbtGreen;
newblue = newblue + Original[i-1][n].rgbtBlue;
counter++;
}
if (i >= 0 && n + 1 < width)
{
newred = newred + Original[i][n+1].rgbtRed;
newgreen = newgreen + Original[i][n+1].rgbtGreen;
newblue = newblue + Original[i][n+1].rgbtBlue;
counter++;
}
if (i + 1 < height && n >= 0)
{
newred = newred + Original[i+1][n].rgbtRed;
newgreen = newgreen + Original[i+1][n].rgbtGreen;
newblue = newblue + Original[i+1][n].rgbtBlue;
counter++;
}
if (i + 1 < height && n - 1 >= 0)
{
newred = newred + Original[i+1][n-1].rgbtRed;
newgreen = newgreen + Original[i+1][n-1].rgbtGreen;
newblue = newblue + Original[i+1][n-1].rgbtBlue;
counter++;
}
if (i - 1 >= 0 && n + 1 < width)
{
newred = newred + Original[i-1][n+1].rgbtRed;
newgreen = newgreen + Original[i-1][n+1].rgbtGreen;
newblue = newblue + Original[i-1][n+1].rgbtBlue;
counter++;
}
if (i - 1 >= 0 && n - 1 >= 0)
{
newred = newred + Original[i-1][n-1].rgbtRed;
newgreen = newgreen + Original[i-1][n-1].rgbtGreen;
newblue = newblue + Original[i-1][n-1].rgbtBlue;
counter++;
}
if (i + 1 < height && n + 1 < width)
{
newred = newred + Original[i+1][n+1].rgbtRed;
newgreen = newgreen + Original[i+1][n+1].rgbtGreen;
newblue = newblue + Original[i+1][n+1].rgbtBlue;
counter++;
}
image[i][n].rgbtRed = round(newred / (counter * 1.0));
image[i][n].rgbtGreen = round(newgreen / (counter * 1.0));
image[i][n].rgbtBlue = round(newblue / (counter * 1.0));
}
}
return;
}
解决方案
推荐阅读
- javascript - 使用 SortableJS 捕获拖动的元素和替换的元素
- timer - How to measure the time interval between two inputs on pin2 in Arduino?
- javascript - NodeJS - readline calback loops itself
- javascript - 来自主要组件的角度延迟加载模块
- sql - How to calculate the difference of two SELECTs in SQL (Access, JetSQL)
- android - Problem with Fetch google map data from the database android
- java - 图片不显示 Android Java
- java - 我应该关闭 BufferedWriter 吗?
- python - How to use real 'y' values on y-axis using imshow
- pycharm - Pycharm: How to get the output console once closed?