RGB颜色值和亮度关系
在做一个类似Word菜单“格式”->“背景”->“填充效果”中“渐变”选项卡中的东西。当选择“单色”单选钮时可以通过拖动“深浅”滚动条(我没有使用滚动条控件,我使用了Slider滑块控件),来改变一个RGB值,当处于中间位置时,保持原色,最左边时变为黑色,最右边时变为白色。现在我的计算方法是这样的:
COLORREF OldColor; // 原色
COLORREF NewColor;
BYTE r=GetRValue(OldColor);
BYTE g=GetGValue(OldColor);
BYTE b=GetBValue(OleColor);
int nRange=100; // 滑块最大值
if(nPos<nRange/2) // nPos为滑块当前位置
{
// 变深处理
NewColor=RGB( r-(nRange/2-nPos)*(255-r)/(nRange/2.0),
g-(nRange/2-nPos)*(255-g)/(nRange/2.0),
b-(nRange/2-nPos)*(255-b)/(nRange/2.0)
);
}
else if(nPos>nRange/2)
{
// 变浅处理
NewColor=RGB( r-(nPos-nRange/2)*(255-r)/(nRange/2.0),
g-(nPos-nRange/2)*(255-g)/(nRange/2.0),
b-(nPos-nRange/2)*(255-b)/(nRange/2.0)
);
}
else
{
NewColor=OldColor;
}
-----------------------------
这个算法看着好像没啥问题,但如果原色的某个分量或者全部很接近255,则在调节过程中几乎看不到变化,尤其是在变深的过程中几乎始终都是白的,这不是我要的效果,我知道是我的算法不正确,不知道大家有没有好点的思路?