这可能很容易,但我对如何“确定”它在这个范围内感到迷茫。
基本上我们有class Color
和许多函数可以实现。
我需要的这个功能是:
效果:将颜色值校正为0-255(含)。如果值超出此范围,则调整为0或255,以较近者为准。
这是我到目前为止所做的:
static int correctValue(int value)
{
if(value<0)
value=0;
if(value>255)
value=255;
}
抱歉这么简单的问题; /
答案 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
,则无需测试该值是否超过255static 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。