[英]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.