Моя функция размытия ведет себя странно. Я воссоздал растровое изображение 3x3 из check50, чтобы получить более приблизительные результаты моих тестов, но по какой-то причине каждый правый или нижний край пикселей не работает должным образом.
Во время отладки я обнаружил, что для по какой-то причине, мои циклы for не ведут себя должным образом. Я покажу свой код и пример ниже.
Код:
// Blur image
void blur(int height, int width, RGBTRIPLE image[height][width])
{
RGBTRIPLE temp[height][width]; // Declares temporary structure to avoid overwriting of original values while running loops
// For loop to set the value of i, rows or height
for (int i = 0; i < height; i++)
{
// For loop to set the value of j, columns or width
for (int j = 0; j < width; j++)
{
float counter = 0.0;
int sumRed = 0;
int sumGreen = 0;
int sumBlue = 0;
// For loop to set the value of k, to get surrounding pixels
for (int k = -1; k < 2; k++)
{
for (int m = -1; m < 2; m++)
{
if ((i - k) >= 0 && (i - k) < height && (j - m) >= 0 && (j - m) < width)
{
sumRed = sumRed + image[i - k][j - m].rgbtRed; // Adds the value of verified pixel to the sum
sumGreen = sumGreen + image[i - k][j - m].rgbtGreen;
sumBlue = sumBlue + image[i - k][j - m].rgbtBlue;
counter++; // To get the average
}
}
}
temp[i][j].rgbtRed = round(sumRed / counter); // Sets new color based on average of surrounding pixels
temp[i][j].rgbtGreen = round(sumGreen / counter);
temp[i][j].rgbtBlue = round(sumBlue / counter);
}
}
// Start new loops to switch original values with temp values
for (int i = 0; i < height - 1; i++)
{
for (int j = 0; j < width - 1; j++)
{
image[i][j].rgbtRed = temp[i][j].rgbtRed;
image[i][j].rgbtGreen = temp[i][j].rgbtGreen;
image[i][j].rgbtBlue = temp[i][j].rgbtBlue;
}
}
return;
}
А вот вывод .
Как пример того, что Я обнаружил во время отладки, скажем, что:
i = 0
j = 2
k = 0
m = 0
Здесь вместо sumRed
, получающего значение image[0 - 0][2 - 0] (RGB 70, 80, 90)
, он получает значения из image[2][2] (RGB 240, 250, 255)
.
Я еще не проверял другие случаи ошибок, но я предполагаю, что там происходит нечто подобное.
Любая помощь будет принята с благодарностью.