COLORREF與RGB的相互轉化

2021-07-23 06:51:59 字數 2179 閱讀 5725

rgb(r,g,b)是乙個巨集

實際上它做得事是((colorref)(((byte)(r)|((word)((byte)(g))<<8))|(((dword)(byte)(b))<<16)))

rgb(r,g,b) = 乙個整型值 = r + g * 256 + b*255*256

colorref 是 一 個 32-bit 整 型 數 值,它 代 表 了 一 種 顏 色。你 可以 使 用 rgb 函 數 來 初 始 化 colorref

typedef dword colorref;

colorref變數有兩種賦值方法

第一種

colorref cf = rgb(,,);
第二種

ccolordialog colordialog;

colorref color;

if( colordialog.domodal() == idok )

這 段 代 碼 使 用 了 mfc 中 的 顏 色 對 話 框

如何從 colorref中取出rgb分量值?

可以使用巨集getrvalue

getgvalue

getbvalue

他們的定義如下

#define getrvalue(rgb)      ((byte)(rgb))

#define getgvalue(rgb) ((byte)(((word)(rgb)) >> 8))

#define getbvalue(rgb) ((byte)((rgb)>>16))

實際的軟體開發過程中,常需要用到非.net平台的**。這時候就可能碰到colorref(也就是以int型別代表的顏色值或是以dword值表示的顏色)。這跟.net平台下的顏色的相互轉換ms並沒有直接實現。那麼就需要我們自己處理了。這裡給出兩個函式。

uint getcustomcolor(color color)

color getargbcolor(int

color)

注:colorref中顏色的排列是bgr,而通過color.toargb()得到的數值中顏色排列是aarrggbb

ccolordialog dlg;

if(dlg.domodal() == idok)

一、格式化字串的功能很強大

int ired = getrvalue(pmarkinfo->lfcolor);

int igreen = getgvalue(pmarkinfo->lfcolor);

int iblue = getbvalue(pmarkinfo->lfcolor);

cstring szcolor;

szcolor.format(_t("#%02x%02x%02x"), ired, igreen, iblue);

//////

//////

//////

//////

//////

//////

//////

//////

/////

cstring m_backcolor.m_frame_color = "#0290d8";

dword r,g,b;

sscanf(m_backcolor.m_frame_color,"#%2x%2x%2x",&r,&g,&b);

colorref rgb = rgb(r,g,b);

brush.createsolidbrush (rgb)

//////

//////

//////

//////

//////

//////

//////

////////

//colorref轉換為字串

bool cdatamanager::getrgbtext(std::string &strrgbtext , colorref color)

//字串轉換為colorref,如("32","34","21")

bool cdatamanager::getcolorrgb(cstring strcolortext , colorref& color)

RGB與HSI空間相互轉換

void hsitrans char tp else else if mn r else if mn g myhsiarray i mypwidth j h calchue angle,col1,col2,mn myhsiarray i mypwidth j s 255.0 float mx mn ...

關於COLORREF與RGBQUAD的顏色轉換問題

觀察以下 colorref rgb pdc getbkcolor byte r,g,b r getrvalue rgb g getgvalue rgb b getbvalue rgb colorref的儲存為 0x00bbggrr,即r在低位。在小端儲存模式中,低位址存放低位資料,高位址存放高位資料...

YUV 格式與 RGB 格式的相互轉換公式

cr vcb u 0.257r 0.504g 0.098b 160.439r 0.368g 0.071b 128 0.148r 0.291g 0.439b 128y 0.257r 0.504g 0.098b 16cr v 0.439r 0.368g 0.071b 128cb u 0.148r 0.2...