簡體   English   中英

我不明白我的 pset4[更舒適(邊緣)] 代碼有什么問題

[英]I don't understand what's buggy with my pset4[more comfortable(edges)] code

再會! 我在過濾器程序的最后一部分,邊緣,檢查器總是檢測到錯誤。 我已經被困了 2 天,並認為是時候尋求幫助了。 這是我第一次問,所以我希望我能得到滿意的答復^^。

我想知道出了什么問題,而且這段代碼很長(請耐心等待,因為我是編碼新手)所以我希望看到有關如何改進我的代碼的反饋。 提前致謝!

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

width - 1 > j > 0被解釋為(width - 1 > j) > 0
當條件為真時, width - 1 > j將被評估為1 ,當條件為false時將被評估為0
因此, width - 1 > j > 0等價於width - 1 > j
看來您的意思是width - 1 > j && j > 0

height - 1 > i > 0也應該是height - 1 > i && i > 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM