CS50 WEEK 4 Edges: Red value wrong but Blue and Green correct

Viewed 31

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;
}
0 Answers
Related