從TColor對象中解析出紅、綠、藍(lán)的亮度

字號(hào):

使用API函數(shù)GetRValue,GetBValue及GetGValue。這里有一個(gè)以析取紅綠藍(lán)來改變窗口背景色的例子。(注意:在使用下面的例子代碼前,請將窗口的Color設(shè)為clBlue,clNavy或其它任何一種非系統(tǒng)顏色,諸如clBtnFace)
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       BYTE nRed = GetRValue(Color);
        BYTE nBlue = GetBValue(Color);
       BYTE nGreen = GetGValue(Color);
     nRed +=10;
        nBlue -=10;
     nGreen *= 1.05;
       Color =(TColor) RGB(nRed, nGreen, nBlue);
    }
    注意:Get系列函數(shù)返回一個(gè)0~255的亮度值。因?yàn)閱蝹€(gè)亮度值為一個(gè)字節(jié)所以返回類型為BYTE。當(dāng)你把亮度值設(shè)為小于0或大于255時(shí),RGB宏將截去多余的字節(jié)(它只取低8位) 。
    注意:從技術(shù)上講,這三個(gè)Get函數(shù)實(shí)際上不是函數(shù),它們是C風(fēng)格的宏。你可以在Include\Win32\wingdi.h中看到它們的實(shí)現(xiàn)。使用宏的一個(gè)結(jié)果是:函數(shù)不是類型安全的。你可以將char *傳給宏而不會(huì)得到任何警告。