如果使用MFC與.NET混合編程,就會遇到這個問題,通過MFC編寫的控件,由.NET調用,則控件中背景色的設置,需要顏色的轉換。
如果使用MFC與.NET混合編程,就會遇到這個問題,通過MFC編寫的控件,由.NET調用,則控件中背景色的設置,需要顏色的轉換。
COLORREF類型顏色的值COLORREF cr=RGB(123,200,12);
其中的R、G、B三個分量的排列順序是BGR。
.NET中通過數據類型Color表示顏色,該類有一個函數FromArgb(int,int,int),可以通過輸入RGB三個值得到一個Color類型的顏色。同時也有一個ToArgb()函數,得到一個32位的整數值,
32 位 ARGB 值的字節順序為 AARRGGBB。由 AA 表示的最高有效字節 (MSB) 是 alpha 分量值。分別由 RR、GG 和 BB 表示的第二、第三和第四個字節分別為紅色、綠色和藍色顏色分量 了解了上面的內容,顏色的轉換就很簡單了。
1、從Color到COLORREF
int nColor = crColor.ToArgb();
int blue = nColor & 255;
int green = nColor >> 8 & 255;
int red = nColor >> 16 & 255;
//注意COLORREF中顏色的排列是 BGR,而通過Color.ToArgb()得到的數值中顏色排列是AARRGGBB
int nColorRef = blue << 16 | green << 8 | red;
2、從COLORREF到Color(注意COLORREF中顏色的排列是BGR,紅色分量在最後面)
int red=nColorRef & 255;
int green= nColorRef >> 8 & 255;
int blue= nColor Ref>> 16 & 255;
Color crColor=Color.FromArgb(red,green,blue);
或者直接通過下面的代碼:
Color.FromArgb(nColorRef & 255, nColorRef >> 8 & 255, nColor Ref>> 16 & 255);
注:上面的代碼使用C#編寫。