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

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” 博客,谢绝转载!

你可能感兴趣的:(RGB内部实现,常用颜色,字符串的转换)