c - 将 RGB 的值限制为 255
问题描述
我正在研究 CS50 pset4 棕褐色滤镜,并尝试使用我的cap
函数将 RGB 值限制为 255,但它似乎仍然无法正常工作。任何人都可以建议我在哪里寻找以及如何解决而不破坏我的学术诚实承诺?
我使用过unsigned char
,因为 ide 否则会出错。也不接受BYTE
作为一种类型。我试图将它转换为整数,但它也给出了错误。也许我的选角不正确。如果您想为我添加一个简短的解释以理解我的错误,我将不胜感激,这样我在未来的代码中就可以更有效地处理这个问题。
这是我的应用程序功能:
unsigned char cap(unsigned char a)
{
if (a > 255)
{
a = 255;
}
return a;
}
这是棕褐色函数中的代码(在嵌套循环中)
unsigned char x = image[i][j].rgbtRed;
unsigned char y = image[i][j].rgbtGreen;
unsigned char z = image[i][j].rgbtBlue;
image[i][j].rgbtRed = cap(round(x * 0.393 + y * 0.769 + z * 0.189));
image[i][j].rgbtGreen = cap(round(x * 0.349 + y * 0.686 + z * 0.168));
image[i][j].rgbtBlue = cap(round(x * 0.272 + y * 0.534 + z * 0.131));
解决方案
unsigned char
因为输入参数的类型不包括大于 255 的值(如果字节通常是 8 位)。只需让您的函数接受int
orfloat
或double
。同样,您可能应该将负数限制为零,尽管它们不会出现在此计算中,但可能会出现在其他一些计算中。
unsigned char cap(int a)
{
if (a > 255) {
return 255;
}
if (a < 0) {
return 0;
}
return a;
}
至于BYTE
,你声明一个typedef:
typedef unsigned char BYTE;
并BYTE
在之后使用。
推荐阅读
- reactjs - 如何修复带有屏蔽输入的日期时间选择器在 safari 中出现空白屏幕?
- javascript - 如何从数组中获取数据块
- typescript - 如何让 Typescript 检查返回类型是否与结构完全匹配?
- python - 编写一个函数,将文件名和单个字母作为输入,如果玩家的姓氏以该字符开头,则返回 True
- javascript - 在 Highcahrts 中删除蜘蛛网图表周围的圆圈
- c++ - C++ 通过引用和临时变量传递
- android - Gradle 同步失败:无法找到请求目标的有效证书路径
- java - 如何修复“在当前项目和插件组中找不到前缀'liquibase'的插件”
- parse-platform - 在 Parse-SDK-JS 中设置 StorageController
- c# - 在 ASP.NET Core 3 中从单独的类中使用 Hub