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