rgb颜色格式是由3组0~255的数字构成,分别是红(Red)、绿(Green)、蓝(Blue)的色值。
转为16进制就是分别把红绿蓝三种颜色的色值转为十六进制,前面加个井号
例如:
rgb(255,255,255),255的16进制为FF,所以结果就是#FFFFFF。
简单的移位和按位加:
int r,g,b;
int c; // TC 用 long int;
// 如果次序是RRGGBB
c = r << 16 | g << 8 | b;
// 如果次序是BBGGRR
c = b << 16 | g << 8 | r;
---------------------------------
例如:
#include "stdio.h"
int RGB(int r,int g,int b)
{
return r << 16 | g << 8 | b;
}
void main()
{
int r,g,b,c;
r = 255; g=255; b=255;
c = RGB(r,g,b);
printf("0x%06x",c);
}
MSDN中对RGB结构体的定义如下:
The RGB macro is defined as follows.
#define RGB(r, g ,b) ((DWORD) (((BYTE) (r) | \
((WORD) (g) << 8)) | \
(((DWORD) (BYTE) (b)) << 16)))
由此可见,一个DWORD体中的后三个字节分别是B,G,R;最前一个字节为零。
fun(BYTE R,BYTE G,BYTE B)
{
DWORD wValue;
wValue = RGB(R,G,B);
printf("%x", wValue);
:
:
:
//以下将DWORD转化为R,G,B
R = wValue & 0xff;
G = (wValue>>8)&0xff;
B = (wValue >>16) & 0xff;
}
string RGBConvert(int r,int g,int b)
{
char r_str[3],g_str[3],b_str[3];
string result = "0x";
itoa(r,r_str,16);
itoa(g,g_str,16);
itoa(b,b_str,16);
result + = string(r_str)+string(g_str)+string(b_str);
return result;
}
没有编译过,你自己调试下