您的位置:首页 > 其它

RGB内部实现&常用颜色&与字符串的转换

2013-11-29 15:34 603 查看
RGB函数计算公式: 颜色值 = (65536 * Blue) + (256 * Green) + (Red)
color is Double
r, g, b is Integer
color = RGB(0, 0, 0)
r = color Mod 256
g = (color / 256) Mod 256
b = (color / 256 / 256) Mod 256
颜色
常用颜色 Colour Red Green Blue 值
黑色 Black 0 0 0 0
白色 White 255 255 255 16777215
灰色 Gray 192 192 192 12632256
深灰色 DarkGrey 128 128 128 8421504
红色 Red 255 0 0 255
深红色 DarkRed 128 0 0 128
绿色 Green 0 255 0 65280
深绿色 DarkGreen 0 128 0 32768
蓝色 Blue 0 0 255 16711680
深蓝色 DarkBlue 0 0 128 8388608
紫红色 Magenta 255 0 255 16711935
深紫红 DarkMagenta 128 0 128 8388736
紫色 Cyan 0 255 255 16776960
深紫 DarkCyan 0 128 128 8421376
黄色 Yellow 255 255 0 65535
棕色 Brown 128 128 0 32896

与字符串的转换
void Color2Str(const COLORREF& _clr, LPTSTR lpDestStr, BOOL bIsHex)
{
if(!lpDestStr) return ;
if(bIsHex)
{
int nR(GetRValue(_clr)), nG(GetGValue(_clr)), nB(GetBValue(_clr));
wsprintf(lpDestStr, _T("#%02X%02X%02X"), nR, nG, nB);
}
else
{
wsprintf(lpDestStr, _T("%d"), _clr);
}
}

COLORREF Str2Color(LPCTSTR lpRGB)
{
if(!lpRGB || !*lpRGB) return 0;
long lRGBLen(_tcslen(lpRGB));
if(lpRGB[0] == _T('#'))
{
if(lRGBLen != 7) return 0;
TCHAR szColor[6] = {0};
int nR(0),nG(0),nB(0), TCHAR_SIZE(sizeof(TCHAR));
memcpy(szColor, lpRGB+1, 2*TCHAR_SIZE);
nR = _tcstoul(szColor, NULL, 16);
memcpy(szColor, lpRGB+3, 2*TCHAR_SIZE);
nG = _tcstoul(szColor, NULL, 16);
memcpy(szColor, lpRGB+5, 2*TCHAR_SIZE);
nB = _tcstoul(szColor, NULL, 16);
return RGB(nR,nG,nB);
}
return _tcstoul(lpRGB, NULL, 10);
}
本文出自 “BaggerSky” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: