代码中怎样把RGB颜色值转换成16进制?

来源:百度知道 编辑:UC知道 时间:2024/05/22 07:41:29
比如说RGB(255,255,255)转成16进制是0xffffff。
但是有没有人可以通过标准C语言用代码实现啊~~
我需要一个可以把一个16进制颜色值与RGB三个颜色值互相转换的代码,谁来帮个忙啊
我有个函数中要传入r,g,b三个值,可我用时,只能用一个值的颜色,程序返回时还是得把那一个值转成r,g,b三个值.

简单的移位和按位加:

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 & 0