首页 > 解决方案 > 将 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));

标签: ccs50

解决方案


unsigned char因为输入参数的类型不包括大于 255 的值(如果字节通常是 8 位)。只需让您的函数接受intorfloatdouble。同样,您可能应该将负数限制为零,尽管它们不会出现在计算中,但可能会出现在其他一些计算中。

unsigned char cap(int a)
{
    if (a > 255) {
        return 255;
    }
    if (a < 0) {
        return 0;
    }

    return a;
}

至于BYTE,你声明一个typedef:

typedef unsigned char BYTE;

BYTE在之后使用。


推荐阅读