c - 我无法弄清楚 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;
}
}
}
解决方案
突出的一件事是,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
}
}
}
推荐阅读
- ionic-framework - 找不到
为ios构建离子项目时出错 - tableau-api - 基于开始日期和结束日期的 Tableau 卷计算
- netbeans - 在 NetBeans 中显示非打印字符不太生动
- firebase - Firestore 规则对象
- c# - C# - 即使 CommandTimeout 设置为在设定时间后终止查询,查询仍在 SQL Server 数据库中运行
- python - 在 matplotlib 直方图中排除一定范围的 bin?
- oracle - 无法在 HTTP 代理后面使用 wget 下载 Oracle 的 jdk-8u181 包
- apache - 有谁知道 Apache Ctakes 是否可以在没有互联网连接的情况下运行 UMLS?
- php - 从 PHP 启动脚本运行 Python 脚本,但不结束它
- javascript - 如何在 iframe 中的框架集中设置图像的不透明度?