美好的一天!我位于筛选器程序的最后部分,边缘,检查器始终检测到错误。我被困了两天,以为是时候寻求帮助了。这是我第一次问,希望我能收到满意的答复^^。
我想知道哪里出了问题,而且这段代码很长(由于我是编码新手,请多多包涵),所以我希望看到有关如何改进代码的反馈。预先感谢!
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;
}
}
}
答案 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
。