我不了解我的pset4 [更舒适(边缘)]代码有什么问题

时间:2020-08-23 09:09:38

标签: c cs50

美好的一天!我位于筛选器程序的最后部分,边缘,检查器始终检测到错误。我被困了两天,以为是时候寻求帮助了。这是我第一次问,希望我能收到满意的答复^^。

我想知道哪里出了问题,而且这段代码很长(由于我是编码新手,请多多包涵),所以我希望看到有关如何改进代码的反馈。预先感谢!

    void edges(int height, int width, RGBTRIPLE image[height][width])
    {
    RGBTRIPLE duplicate[height][width];
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            duplicate[i][j] = image[i][j];
        }
    }

    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            int GxR = 0;
            int GxB = 0;
            int GxG = 0;
            int GyR = 0;
            int GyB = 0;
            int GyG = 0;

            if (i > 0 && width - 1 > j > 0)
            {
                GxR = (-1 * duplicate[i - 1][j - 1].rgbtRed) + (-2 * duplicate[i][j - 1].rgbtRed) + (-1 * duplicate[i + 1][j - 1].rgbtRed)
                    + duplicate[i - 1][j + 1].rgbtRed + (2 * duplicate[i][j + 1].rgbtRed) + duplicate[i + 1][j + 1].rgbtRed;
                GxB = (-1 * duplicate[i - 1][j - 1].rgbtBlue) + (-2 * duplicate[i][j - 1].rgbtBlue) + (-1 * duplicate[i + 1][j - 1].rgbtBlue)
                    + duplicate[i - 1][j + 1].rgbtBlue + (2 * duplicate[i][j + 1].rgbtBlue) + duplicate[i + 1][j + 1].rgbtBlue;
                GxG = (-1 * duplicate[i - 1][j - 1].rgbtGreen) + (-2 * duplicate[i][j - 1].rgbtGreen) + (-1 * duplicate[i + 1][j - 1].rgbtGreen)
                    + duplicate[i - 1][j + 1].rgbtGreen + (2 * duplicate[i][j + 1].rgbtGreen) + duplicate[i + 1][j + 1].rgbtGreen;
                GyR = (-1 * duplicate[i - 1][j - 1].rgbtRed) + (-2 * duplicate[i - 1][j].rgbtRed) + (-1 * duplicate[i - 1][j + 1].rgbtRed)
                    + duplicate[i + 1][j - 1].rgbtRed + (2 * duplicate[i + 1][j].rgbtRed) + duplicate[i + 1][j + 1].rgbtRed;
                GyB = (-1 * duplicate[i - 1][j - 1].rgbtBlue) + (-2 * duplicate[i - 1][j].rgbtBlue) + (-1 * duplicate[i - 1][j + 1].rgbtBlue)
                    + duplicate[i + 1][j - 1].rgbtBlue + (2 * duplicate[i + 1][j].rgbtBlue) + duplicate[i + 1][j + 1].rgbtBlue;
                GyG = (-1 * duplicate[i - 1][j - 1].rgbtGreen) + (-2 * duplicate[i - 1][j].rgbtGreen) + (-1 * duplicate[i - 1][j + 1].rgbtGreen)
                    + duplicate[i + 1][j - 1].rgbtGreen + (2 * duplicate[i + 1][j].rgbtGreen) + duplicate[i + 1][j + 1].rgbtGreen;
            }
            else if (i == 0 && j == 0)
            {
                GxR = (2 * duplicate[i][j + 1].rgbtRed) + duplicate[i + 1][j + 1].rgbtRed;
                GxB = (2 * duplicate[i][j + 1].rgbtBlue) + duplicate[i + 1][j + 1].rgbtBlue;
                GxG = (2 * duplicate[i][j + 1].rgbtGreen) + duplicate[i + 1][j + 1].rgbtGreen;
                GyR = (2 * duplicate[i + 1][j].rgbtRed) + duplicate[i + 1][j + 1].rgbtRed;
                GyB = (2 * duplicate[i + 1][j].rgbtBlue) + duplicate[i + 1][j + 1].rgbtBlue;
                GyG = (2 * duplicate[i + 1][j].rgbtGreen) + duplicate[i + 1][j + 1].rgbtGreen;
            }
            else if (height - 1 > i > 0 && j == 0)
            {
                GxR = duplicate[i - 1][j + 1].rgbtRed + (2 * duplicate[i][j + 1].rgbtRed) + duplicate[i + 1][j + 1].rgbtRed;
                GxB = duplicate[i - 1][j + 1].rgbtBlue + (2 * duplicate[i][j + 1].rgbtBlue) + duplicate[i + 1][j + 1].rgbtBlue;
                GxG = duplicate[i - 1][j + 1].rgbtGreen + (2 * duplicate[i][j + 1].rgbtGreen) + duplicate[i + 1][j + 1].rgbtGreen;
                GyR = (-2 * duplicate[i - 1][j].rgbtRed) + (-1 * duplicate[i - 1][j + 1].rgbtRed) + (2 * duplicate[i + 1][j].rgbtRed) 
                    + duplicate[i + 1][j + 1].rgbtRed;
                GyB = (-2 * duplicate[i - 1][j].rgbtBlue) + (-1 * duplicate[i - 1][j + 1].rgbtBlue) + (2 * duplicate[i + 1][j].rgbtBlue) 
                    + duplicate[i + 1][j + 1].rgbtBlue;
                GyG = (-2 * duplicate[i - 1][j].rgbtGreen) + (-1 * duplicate[i - 1][j + 1].rgbtGreen) + (2 * duplicate[i + 1][j].rgbtGreen) 
                    + duplicate[i + 1][j + 1].rgbtGreen;
            }
            else if (i == height - 1 && j == 0)
            {
                GxR = duplicate[i - 1][j + 1].rgbtRed + (2 * duplicate[i][j + 1].rgbtRed);
                GxB = duplicate[i - 1][j + 1].rgbtBlue + (2 * duplicate[i][j + 1].rgbtBlue);
                GxG = duplicate[i - 1][j + 1].rgbtGreen + (2 * duplicate[i][j + 1].rgbtGreen);
                GyR = (-2 * duplicate[i - 1][j].rgbtRed) + (-1 * duplicate[i - 1][j + 1].rgbtRed);
                GyB = (-2 * duplicate[i - 1][j].rgbtBlue) + (-1 * duplicate[i - 1][j + 1].rgbtBlue);
                GyG = (-2 * duplicate[i - 1][j].rgbtGreen) + (-1 * duplicate[i - 1][j + 1].rgbtGreen);
            }
            else if (i == height - 1 && width - 1 > j > 0)
            {
                GxR = (-1 * duplicate[i - 1][j - 1].rgbtRed) + (-2 * duplicate[i][j - 1].rgbtRed) + duplicate[i - 1][j + 1].rgbtRed 
                    + (2 * duplicate[i][j + 1].rgbtRed);
                GxB = (-1 * duplicate[i - 1][j - 1].rgbtBlue) + (-2 * duplicate[i][j - 1].rgbtBlue) + duplicate[i - 1][j + 1].rgbtBlue 
                    + (2 * duplicate[i][j + 1].rgbtBlue);
                GxG = (-1 * duplicate[i - 1][j - 1].rgbtGreen) + (-2 * duplicate[i][j - 1].rgbtGreen) + duplicate[i - 1][j + 1].rgbtGreen 
                    + (2 * duplicate[i][j + 1].rgbtGreen);
                GyR = (-1 * duplicate[i - 1][j - 1].rgbtRed) + (-2 * duplicate[i - 1][j].rgbtRed) + (-1 * duplicate[i - 1][j + 1].rgbtRed);
                GyB = (-1 * duplicate[i - 1][j - 1].rgbtBlue) + (-2 * duplicate[i - 1][j].rgbtBlue) + (-1 * duplicate[i - 1][j + 1].rgbtBlue);
                GyG = (-1 * duplicate[i - 1][j - 1].rgbtGreen) + (-2 * duplicate[i - 1][j].rgbtGreen) + (-1 * duplicate[i - 1][j + 1].rgbtGreen);
            }
            else if (i == height - 1 && j == width - 1)
            {
                GxR = (-1 * duplicate[i - 1][j - 1].rgbtRed) + (-2 * duplicate[i][j - 1].rgbtRed);
                GxB = (-1 * duplicate[i - 1][j - 1].rgbtBlue) + (-2 * duplicate[i][j - 1].rgbtBlue);
                GxG = (-1 * duplicate[i - 1][j - 1].rgbtGreen) + (-2 * duplicate[i][j - 1].rgbtGreen);
                GyR = (-1 * duplicate[i - 1][j - 1].rgbtRed) + (-2 * duplicate[i - 1][j].rgbtRed);
                GyB = (-1 * duplicate[i - 1][j - 1].rgbtBlue) + (-2 * duplicate[i - 1][j].rgbtBlue);
                GyG = (-1 * duplicate[i - 1][j - 1].rgbtGreen) + (-2 * duplicate[i - 1][j].rgbtGreen);
            }
            else if (height - 1 > i > 0 && j == width - 1)
            {
                GxR = (-1 * duplicate[i - 1][j - 1].rgbtRed) + (-2 * duplicate[i][j - 1].rgbtRed) + (-1 * duplicate[i + 1][j - 1].rgbtRed);
                GxB = (-1 * duplicate[i - 1][j - 1].rgbtBlue) + (-2 * duplicate[i][j - 1].rgbtBlue) + (-1 * duplicate[i + 1][j - 1].rgbtBlue);
                GxG = (-1 * duplicate[i - 1][j - 1].rgbtGreen) + (-2 * duplicate[i][j - 1].rgbtGreen) + (-1 * duplicate[i + 1][j - 1].rgbtGreen);
                GyR = (-1 * duplicate[i - 1][j - 1].rgbtRed) + (-2 * duplicate[i - 1][j].rgbtRed) + duplicate[i + 1][j - 1].rgbtRed 
                    + (2 * duplicate[i + 1][j].rgbtRed);
                GyB = (-1 * duplicate[i - 1][j - 1].rgbtBlue) + (-2 * duplicate[i - 1][j].rgbtBlue) + duplicate[i + 1][j - 1].rgbtBlue 
                    + (2 * duplicate[i + 1][j].rgbtBlue);
                GyG = (-1 * duplicate[i - 1][j - 1].rgbtGreen) + (-2 * duplicate[i - 1][j].rgbtGreen) + duplicate[i + 1][j - 1].rgbtGreen 
                    + (2 * duplicate[i + 1][j].rgbtGreen);
            }
            else if (i == 0 && j == width - 1)
            {
                GxR = (-2 * duplicate[i][j - 1].rgbtRed) + (-1 * duplicate[i + 1][j - 1].rgbtRed);
                GxB = (-2 * duplicate[i][j - 1].rgbtBlue) + (-1 * duplicate[i + 1][j - 1].rgbtBlue);
                GxG = (-2 * duplicate[i][j - 1].rgbtGreen) + (-1 * duplicate[i + 1][j - 1].rgbtGreen);
                GyR = duplicate[i + 1][j - 1].rgbtRed + (2 * duplicate[i + 1][j].rgbtRed);
                GyB = duplicate[i + 1][j - 1].rgbtBlue + (2 * duplicate[i + 1][j].rgbtBlue);
                GyG = duplicate[i + 1][j - 1].rgbtGreen + (2 * duplicate[i + 1][j].rgbtGreen);
            }
            else if (i == 0 && width - 1 > j > 0)
            {
                GxR = (-2 * duplicate[i][j - 1].rgbtRed) + (-1 * duplicate[i + 1][j - 1].rgbtRed) + (2 * duplicate[i][j + 1].rgbtRed) 
                    + duplicate[i + 1][j + 1].rgbtRed;
                GxB = (-2 * duplicate[i][j - 1].rgbtBlue) + (-1 * duplicate[i + 1][j - 1].rgbtBlue) + (2 * duplicate[i][j + 1].rgbtBlue) 
                    + duplicate[i + 1][j + 1].rgbtBlue;
                GxG = (-2 * duplicate[i][j - 1].rgbtGreen) + (-1 * duplicate[i + 1][j - 1].rgbtGreen) + (2 * duplicate[i][j + 1].rgbtGreen) 
                    + duplicate[i + 1][j + 1].rgbtGreen;
                GyR = duplicate[i + 1][j - 1].rgbtRed + (2 * duplicate[i + 1][j].rgbtRed) + duplicate[i + 1][j + 1].rgbtRed;
                GyB = duplicate[i + 1][j - 1].rgbtBlue + (2 * duplicate[i + 1][j].rgbtBlue) + duplicate[i + 1][j + 1].rgbtBlue;
                GyG = duplicate[i + 1][j - 1].rgbtGreen + (2 * duplicate[i + 1][j].rgbtGreen) + duplicate[i + 1][j + 1].rgbtGreen;
            }
            double power = 2;
            double Ridk = pow(GxR, power);
            double Ridk2 = pow(GyR, power);
            double yeR;
            double finalR = Ridk + Ridk2;
            yeR = sqrt(finalR);
            int x = round(yeR);
            if (x > 255)
            {
                x = 255;
            }
            image[i][j].rgbtRed = x;
            double Bidk = pow(GxB, power);
            double Bidk2 = pow(GyB, power);
            double finalB = Bidk + Bidk2;
            double yeB;
            yeB = sqrt(finalB);
            int y = round(yeB);
            if (y > 255)
            {
                y = 255;
            }
            image[i][j].rgbtBlue = y;
            double Gidk = pow(GxG, power);
            double Gidk2 = pow(GyG, power);
            double finalG = Gidk + Gidk2;
            double yeG;
            yeG = sqrt(finalG);
            int z = round(yeG);
            if (z > 255)
            {
                z = 255;
            }
            image[i][j].rgbtGreen = z;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

width - 1 > j > 0被解释为(width - 1 > j) > 0
如果条件为真,则width - 1 > j的评估值为1,如果条件为0则评估为false
因此,width - 1 > j > 0等效于width - 1 > j
看来您的意思是width - 1 > j && j > 0

height - 1 > i > 0也应为height - 1 > i && i > 0