需要确保值在0-255之内

时间:2010-04-13 23:05:15

标签: c++

这可能很容易,但我对如何“确定”它在这个范围内感到迷茫。

基本上我们有class Color和许多函数可以实现。

我需要的这个功能是:

效果:将颜色值校正为0-255(含)。如果值超出此范围,则调整为0或255,以较近者为准。

这是我到目前为止所做的:

static int correctValue(int value)
{
    if(value<0)
        value=0;
    if(value>255)
        value=255;
}

抱歉这么简单的问题; /

8 个答案:

答案 0 :(得分:13)

这很好。我建议使用clamp函数重新使用:

template <typename T>
void clamp(T& pValue, const T& pMin, const T& pMax)
{
    pValue = std::min(std::max(pValue, pMin), pMax);
}

template <typename T>
T clamp_copy(T pValue, const T& pMin, const T& pMax)
{
    clamp(pValue, pMin, pMax);
    return pValue;
}

这样就可以就地复制clamp

int i = 50;

j = clamp_copy(i, 0, 10);
k = clamp_copy(i, 100, 1000);
clamp(i, 0, 100);

// i = 50
// j = 10
// k = 100

答案 1 :(得分:8)

足够公平。但你错过了最后的回复陈述

static int correctValue(int value)
{
    if(value<0) return 0;
    if(value>255) return 255;
    return value;
}

答案 2 :(得分:4)

使用max和min进行夹紧非常简单:

value = std::min(255,std::max(0,value))

但你的方法也应该是正确的。

答案 3 :(得分:2)

你所拥有的将会很好。您只需在函数结束时返回value即可。如果你想使它更简洁,你可以使用三元表达式,但需要一点点可读性:

value = (value < MIN) ?
            MIN : (value > MAX) ?
                    MAX : value;

MIN为0且MAX为255。

答案 4 :(得分:2)

static int correctValue(int value) {
 int correctedValue;
 if (value < 0) {
        correctedValue = 0;
 } else if (value > 255) {
        correctedValue = 255;
 } else {
        correctedValue = value;
 }

 return correctedValue;

}

答案 5 :(得分:1)

只需在ifs之后返回函数底部的值,就可以了。

答案 6 :(得分:1)

我同意其他答案,只做一次修改;这应该是else-if语句。如果您已经知道它小于0

,则无需测试该值是否超过255
static unsigned char correctValue(int value)
{
    if(value<0) value=0;
    else if(value>255) value=255;
    return value;
}

答案 7 :(得分:0)

使用int而不是使用unsigned char,该值将无法低于0或高于255。