首页 > 解决方案 > 我无法弄清楚 cs50 pset4 serpia 过滤器上的错误。预期数字和实际看起来相同,但仍然报错

问题描述

我正在做 cs50 pset4 棕褐色过滤器。check50的测试结果显示最后两个测试失败,但所有其他测试都正常。我不知道是什么问题,因为预期的输出和我的实际输出是一样的。

void sepia(int height, int width, RGBTRIPLE image[height][width])
{
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            float orginalRed = image[i][j].rgbtRed;
            float originalGreen = image[i][j].rgbtGreen;
            float originalBlue = image[i][j].rgbtBlue;
            
            float spRed = round(.393 * orginalRed + .769 *  originalGreen + .189 *  originalBlue);
            float spGreen = round(.349 *  orginalRed + .686 * originalGreen + .168 *  originalBlue);
            float spBlue = round(.272 *  orginalRed + .534 *  originalGreen + .131 *  originalBlue);

            if (spRed > 255.0)
            {
                spRed = 225;
            }
          
            if (spBlue > 255.0)
            {
               spBlue = 255;
            }
            if (spGreen > 255.0)
            {
               spGreen = 255;
            }
            image[i][j].rgbtRed = spRed;
            image[i][j].rgbtGreen = spGreen;
            image[i][j].rgbtBlue = spBlue;

        }
     }
}

标签: ccs50

解决方案


突出的一件事是,225如果它超过,您将红色设置为255。那看起来不对。

无论如何,简化:

void sepia(int height, int width, RGBTRIPLE image[height][width])
{
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            RGBTRIPLE x = image[i][j];

#define X(r, g, b) fmin(255, round(r * x.rgbtRed + g * x.rgbtGreen + b * x.rgbtBlue))
            image[i][j].rgbtRed = X(.393, .769, .189);
            image[i][j].rgbtGreen = X(.349, .686, .168);
            image[i][j].rgbtBlue = X(.272, .534, .131);
#undef X
        }
    }
}

推荐阅读