CS50 (2020) Фильтр PSET 4: функция размытия не работает должным образом - PullRequest
0 голосов
/ 21 февраля 2020

Я пару раз переписывал этот код, пытаясь заставить его работать. Когда я читаю этот код, кажется, что он должен работать логически, но я все еще получаю ошибки, когда я запускаю его через 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;
}
...