CS50 pset 4 // 棕褐色滤镜

时间:2021-01-03 09:04:21

标签: c cs50

您好,我的 cs50 课程的棕褐色滤镜有问题,这是它给我的错误。我真的不确定问题是什么。如果有人可以帮助我那就太好了

I am not sure what to do with this error message and what it means because everything seems to be working correctly but it's giving an error

void sepia(int height, int width, RGBTRIPLE image[height][width])
{
double sepiaRed;
double sepiaGreen;
double sepiaBlue;

for (int i = 0; i < height; i++)
{
    for (int j = 0; j < width; j++)
    {
        sepiaRed = (0.393 * image[i][j].rgbtRed) + (0.769 * image[i][j].rgbtGreen) + (0.189 * image[i][j].rgbtBlue);
        sepiaGreen = (0.349 * image[i][j].rgbtRed) + (0.686 * image[i][j].rgbtGreen) + (0.168 * image[i][j].rgbtBlue);
        sepiaBlue = (0.272 * image[i][j].rgbtRed) + (0.534 * image[i][j].rgbtGreen) + (0.131 * image[i][j].rgbtBlue);


        if( sepiaRed > 255)
        {
            image[i][j].rgbtRed = 255;
        }

        else if(sepiaGreen > 255)
        {
            image[i][j].rgbtGreen = 255;
        }

        else if(sepiaBlue > 255){
            image[i][j].rgbtBlue = 255;
        }

        else{
            image[i][j].rgbtRed = round(sepiaRed);
            image[i][j].rgbtGreen = round(sepiaGreen);
            image[i][j].rgbtBlue = round(sepiaBlue);
        }

     }
}
return;

}

1 个答案:

答案 0 :(得分:1)

在您将一个组件限制为 255 的情况下,您尚未更新其他组件。建议修改这段代码中的错误逻辑

if( sepiaRed > 255) {
    image[i][j].rgbtRed = 255;
}
else if(sepiaGreen > 255) {
    image[i][j].rgbtGreen = 255;
}
else if(sepiaBlue > 255) {
    image[i][j].rgbtBlue = 255;
}
else {
    image[i][j].rgbtRed = round(sepiaRed);
    image[i][j].rgbtGreen = round(sepiaGreen);
    image[i][j].rgbtBlue = round(sepiaBlue);
}

到这里,它会夹住每个组件,然后将它们全部写入

if(sepiaRed > 255) {
    sepiaRed = 255;
}
if(sepiaGreen > 255) {
    sepiaGreen = 255;
}
if(sepiaBlue > 255) {
    sepiaBlue = 255;
}
image[i][j].rgbtRed = round(sepiaRed);
image[i][j].rgbtGreen = round(sepiaGreen);
image[i][j].rgbtBlue = round(sepiaBlue);