When solving the Edges problem on CS50 week 4 only for middle pixels I get the error message below showing my green and blue pixels are correct but red not correct despite having the same code for each colour pretty much
:( edges correctly filters middle pixel
expected "210 150 60\n", not "192 150 60\n"
My code is below
void edges(int height, int width, RGBTRIPLE image[height][width])
{
int RedGx, GreenGx, BlueGx, GreenGy, BlueGy, RedGy, GreenTemp, BlueTemp, RedTemp;
RGBTRIPLE temp[height][width];
for(int i = 0; i < height; i++)
{
for(int z = 0; z < width; z++)
{
temp[i][z] = image[i][z];
}
}
int xmult[9] = {-1, 0, 1, -2, 0, 2, -1, 0, 1};
int ymult[9] = {-1, -2, -1, 0, 0, 0, 1, 2, 1};
//middle pixels
for(int y = 1; y < height - 1; y++)
{
for(int x = 1; x < width - 1; x++)
{
RedGx = temp[y-1][x-1].rgbtRed * xmult[0] + temp[y][x-1].rgbtRed * xmult[3] + temp[y+1][x-1].rgbtRed * xmult[6] + temp[y-1][x+1].rgbtRed * xmult[2] + temp[y][x+1].rgbtRed * xmult[5] + temp[y+1][x+1].rgbtRed * xmult[8];
GreenGx = temp[y-1][x-1].rgbtGreen * xmult[0] + temp[y][x-1].rgbtGreen * xmult[3] + temp[y+1][x-1].rgbtGreen * xmult[6] + temp[y-1][x+1].rgbtGreen * xmult[2] + temp[y][x+1].rgbtGreen * xmult[5] + temp[y+1][x+1].rgbtGreen * xmult[8];
BlueGx = temp[y-1][x-1].rgbtBlue * xmult[0] + temp[y][x-1].rgbtBlue * xmult[3] + temp[y+1][x-1].rgbtBlue * xmult[6] + temp[y-1][x+1].rgbtBlue * xmult[2] + temp[y][x+1].rgbtBlue * xmult[5] + temp[y+1][x+1].rgbtBlue * xmult[8];
RedGy = temp[y-1][x-1].rgbtRed * ymult[0] + temp[y][x-1].rgbtRed * ymult[3] + temp[y+1][x-1].rgbtRed * ymult[6] + temp[y-1][x+1].rgbtRed * ymult[2] + temp[y][x+1].rgbtRed * ymult[5] + temp[y+1][x+1].rgbtRed * ymult[8];
GreenGy = temp[y-1][x-1].rgbtGreen * ymult[0] + temp[y][x-1].rgbtGreen * ymult[3] + temp[y+1][x-1].rgbtGreen * ymult[6] + temp[y-1][x+1].rgbtGreen * ymult[2] + temp[y][x+1].rgbtGreen * ymult[5] + temp[y+1][x+1].rgbtGreen * ymult[8];
BlueGy = temp[y-1][x-1].rgbtBlue * ymult[0] + temp[y][x-1].rgbtBlue * ymult[3] + temp[y+1][x-1].rgbtBlue * ymult[6] + temp[y-1][x+1].rgbtBlue * ymult[2] + temp[y][x+1].rgbtBlue * ymult[5] + temp[y+1][x+1].rgbtBlue * ymult[8];
GreenTemp = fmin(round(sqrt(GreenGx * GreenGx + GreenGy * GreenGy)),255);
BlueTemp = fmin(round(sqrt(BlueGx * BlueGx + BlueGy * BlueGy)),255);
RedTemp = fmin(round(sqrt(RedGx * RedGx + RedGy * RedGy)),255);
image[y][x].rgbtGreen = GreenTemp;
image[y][x].rgbtBlue = BlueTemp;
image[y][x].rgbtRed = RedTemp;
}
}
return;
}