u/FigureTraditional769

▲ 2 r/cs50

Help with blur (pset4 - more comfortable)

>!I understand my code is quite messy and could probably be improved with multiple loops, though I am not sure how I would do that. My code is the following and is giving extremely small numbers for all the averages and rgb values though I feel as though it should be copying them into a variable and taking the correct values, please a hint!!<

&gt;!void blur(int height, int width, RGBTRIPLE image[height][width])
{
RGBTRIPLE original_image[height][width];
for (int i = 0; i &lt; height; i++)
{
for (int j = 0; j &lt; width; j++)
{
original_image[i][j].rgbtRed = image[i][j].rgbtRed;
original_image[i][j].rgbtGreen = image[i][j].rgbtGreen;
original_image[i][j].rgbtBlue = image[i][j].rgbtBlue;
}
}
for (int i = 0; i &lt; height; i++)
{
for (int j = 0; j &lt; width; j++)
{
RGBTRIPLE averages[9];
averages[0].rgbtRed = original_image[i][j].rgbtRed;
averages[0].rgbtGreen = original_image[i][j].rgbtGreen;
averages[0].rgbtBlue = original_image[i][j].rgbtBlue;
int counter = 1;
if (j +  1 &lt; width)
{
averages[counter].rgbtRed = original_image[i][j + 1].rgbtRed;
averages[counter].rgbtGreen = original_image[i][j + 1].rgbtGreen;
averages[counter].rgbtBlue = original_image[i][j + 1].rgbtBlue;
counter++;
}
if (j -  1 &gt;= 0)
{
averages[counter].rgbtRed = original_image[i][j - 1].rgbtRed;
averages[counter].rgbtGreen = original_image[i][j - 1].rgbtGreen;
averages[counter].rgbtBlue = original_image[i][j - 1].rgbtBlue;
counter++;
}
if (i + 1 &lt; height)
{
averages[counter].rgbtRed = original_image[i + 1][j].rgbtRed;
averages[counter].rgbtGreen = original_image[i + 1][j].rgbtGreen;
averages[counter].rgbtBlue = original_image[i + 1][j].rgbtBlue;
counter++;
if (j +  1 &lt; width)
{
averages[counter].rgbtRed = original_image[i + 1][j + 1].rgbtRed;
averages[counter].rgbtGreen = original_image[i + 1][j + 1].rgbtGreen;
averages[counter].rgbtBlue = original_image[i + 1][j + 1].rgbtBlue;
counter++;
}
if (j -  1 &gt;= 0)
{
averages[counter].rgbtRed = original_image[i + 1][j - 1].rgbtRed;
averages[counter].rgbtGreen = original_image[i + 1][j - 1].rgbtGreen;
averages[counter].rgbtBlue = original_image[i + 1][j - 1].rgbtBlue;
counter++;
}
}
if (i - 1 &gt;= 0)
{
averages[counter].rgbtRed = original_image[i - 1][j].rgbtRed;
averages[counter].rgbtGreen = original_image[i - 1][j].rgbtGreen;
averages[counter].rgbtBlue = original_image[i - 1][j].rgbtBlue;
counter++;
if (j +  1 &lt; width)
{
averages[counter].rgbtRed = original_image[i - 1][j + 1].rgbtRed;
averages[counter].rgbtGreen = original_image[i - 1][j + 1].rgbtGreen;
averages[counter].rgbtBlue = original_image[i - 1][j + 1].rgbtBlue;
counter++;
}
if (j -  1 &gt;= 0)
{
averages[counter].rgbtRed = original_image[i - 1][j - 1].rgbtRed;
averages[counter].rgbtGreen = original_image[i - 1][j - 1].rgbtGreen;
averages[counter].rgbtBlue = original_image[i - 1][j - 1].rgbtBlue;
counter++;
}
}
RGBTRIPLE average;
average.rgbtRed = 0;
average.rgbtGreen = 0;
average.rgbtBlue = 0;
for (int l = 0; l &lt; counter; l++)
{
average.rgbtRed += averages[l].rgbtRed;
average.rgbtGreen += averages[l].rgbtGreen;
average.rgbtBlue += averages[l].rgbtBlue;
}
image[i][j].rgbtRed = average.rgbtRed / counter;
image[i][j].rgbtGreen = average.rgbtGreen / counter;
image[i][j].rgbtBlue = average.rgbtBlue / counter;
}
}
return;
}!&lt;
reddit.com