觀察以下**:
colorref rgb = pdc->getbkcolor();
byte r,g,b;
r = getrvalue(rgb);
g = getgvalue(rgb);
b = getbvalue(rgb);
colorref的儲存為 0x00bbggrr,即r在低位。
在小端儲存模式中,低位址存放低位資料,高位址存放高位資料,windows使用小端儲存。
十六位數字0x11223344在小段模式儲存為 "低位址..44 33 22 11..高位址"
我們稱讀作:0x11223344,存作:44332211,(注意是十六進製制資料)
假設乙個顏色值 rr gg bb,使用colorref表示,則讀作:0x00bbggrr,存作:rrggbb00
而rgbquad是乙個結構體,定義如下:
typedef struct tagrgbquad rgbquad;
結構體變數儲存的時候,跟字串儲存方式一樣,是從開始到結束順序儲存,
如果把rgbquad當做乙個字串,則讀為:"aarrggbb",
如果把rgbquad當做乙個int型數字,則讀為:0xaarrggbb,aa為alpha通道。
我們將數字0x11223344的最高位、次高位、次低位、最低位認作11、22、33、44。
這樣,在colorref中,紅色r被讀成最低位,藍色b被讀成次高位,最高位是0。
而在rgbquad中,紅色r被讀成次高位,藍色b被讀成最低位,最高位是alpha通道aa。
二者順序正好是相反的。
為了驗證上述說法,新建乙個mfc專案,在cview類新增乙個選單響應函式,函式內**如下
colorref rgb;
//rgb = pdc->getbkcolor(); //colorref的儲存為 0x00bbggrr,即r在低位。
rgb = 0x00332211; //3是藍色b,1是紅色r
byte r,g,b;
r = getrvalue(rgb);
g = getgvalue(rgb);
b = getbvalue(rgb);
rgbquad rgbquad;
rgbquad.rgbblue = b;
rgbquad.rgbgreen = g;
rgbquad.rgbred = r;
cstring strrgb,strrgbquad;
strrgb.format("rgb=%x",rgb);
strrgbquad.format("rgbquad=%x",rgbquad);
messagebox(strrgb);
messagebox(strrgbquad);
通過單擊選單項,先後彈出兩個訊息框,第乙個訊息框如下:
第二個訊息框如下:
COLORREF與RGB的相互轉化
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 整 型 數 值,它 代 表 了 一 種 顏 色...
關於兄弟與朋友
最近很忙很忙,星期五晚上幾乎徹夜加班,沒有一段完整的時間讓自己靜下心來思考,說說心裡話。有些東西有必要記下,因為時間長了,會遺忘的,甚至連回憶也留不下。很多年都沒有坐下來認真動筆寫字了,包括前幾篇寫的,我是用鍵盤敲出來的。前幾天想寫 one fine day,考慮到坐在電腦前沒有那麼多時間,我選擇用...
關於工作與生活
普通人 我發現中國人的勵志和國外的勵志存在非常大的不同,中國的勵志比較鼓勵人立下大志願,臥薪嘗膽,有朝一日成富成貴。而國外的勵志比較鼓勵人勇敢面對現實生活,面對普通人的困境,雖然結果也是成富成貴,但起點不一樣,相對來說,我覺得後者在操作上更現實,而前者則需要用999個失敗者來堆砌乙個成功者的故事。我...