我需要使用代码中的以下公式创建一个将彩色图像转换为棕褐色滤镜的滤镜。这是CS50第4周的问题集。
我在运行check50时无法理解出现的错误。请在下面查看我的代码和我得到的错误。该代码很有意义,并返回了预期的rgb值,但在check50上仍然出现两个错误。
:) sepia correctly filters single pixel
:) sepia correctly filters simple 3x3 image
:( sepia correctly filters more complex 3x3 image
expected "25 22 17\n66 5...", not "25 22 17\n66 5..." - ERROR HERE
:( sepia correctly filters 4x4 image
expected "25 22 17\n66 5...", not "25 22 17\n66 5..." - ERROR HERE
// Convert image to sepia
void sepia(int height, int width, RGBTRIPLE image[height][width])
{
float sr = 0;
float sg = 0;
float sb = 0;
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
sr = (0.393 * image[i][j].rgbtRed + 0.769 * image[i][j].rgbtGreen + 0.189 * image[i][j].rgbtBlue);
sg = (0.349 * image[i][j].rgbtRed + 0.686 * image[i][j].rgbtGreen + 0.168 * image[i][j].rgbtBlue);
sb = (0.272 * image[i][j].rgbtRed + 0.534 * image[i][j].rgbtGreen + 0.131 * image[i][j].rgbtBlue);
image[i][j].rgbtRed = round(sr);
image[i][j].rgbtGreen = round(sg);
image[i][j].rgbtBlue = round(sb);
}
}
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
if (image[i][j].rgbtRed > 255)
{
image[i][j].rgbtRed = 255;
}
if (image[i][j].rgbtGreen > 255)
{
image[i][j].rgbtGreen = 255;
}
if (image[i][j].rgbtBlue > 255)
{
image[i][j].rgbtBlue = 255;
}
}
}
return;
}
答案 0 :(得分:0)
sr = (0.393 * image[i][j].rgbtRed + 0.769 * image[i][j].rgbtGreen + 0.189 * image[i][j].rgbtBlue); sg = (0.349 * image[i][j].rgbtRed + 0.686 * image[i][j].rgbtGreen + 0.168 * image[i][j].rgbtBlue); sb = (0.272 * image[i][j].rgbtRed + 0.534 * image[i][j].rgbtGreen + 0.131 * image[i][j].rgbtBlue);
对于这一部分,您需要将像素颜色限制为超过255。您可以创建类似这样的函数
int limit(int RGB)
{
if (RGB > 255)
{
RGB = 255;
}
return RGB;
}
以限制它。您还必须使用舍入功能舍入棕褐色颜色