首页 > 解决方案 > CS50(2020) PSET 4 滤镜:模糊功能无法正常工作

问题描述

我已经多次重写这段代码试图让它工作。当我阅读这段代码时,它看起来应该在逻辑上可以工作,但是当我通过 Check50 运行它时仍然出现错误,并且除了角落之外的所有内容都返回错误。我不确定是哪一部分导致了问题,我知道其中一个 if 语句没有正确添加所有内容,但它们在我看来在逻辑上都是正确的。代码的这一部分确实给我带来了问题。提前感谢您的帮助。

4x4 照片错误 Check50 给了我

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;
}

标签: ccs50

解决方案


推荐阅读