從TColor對象中解析出紅,綠,藍的亮度

字號:

使用API函數(shù)GetRValue,GetBValue及GetGValue。這里有一個以析取紅綠藍來改變窗口背景色的例子。(注意:在使用下面的例子代碼前,請將窗口的Color設為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ù)返回一個0~255的亮度值。因為單個亮度值為一個字節(jié)所以返回類型為BYTE。當你把亮度值設為小于0或大于255時,RGB宏將截去多余的字節(jié)(它只取低8位) 。
    注意:從技術上講,這三個Get函數(shù)實際上不是函數(shù),它們是C風格的宏。你可以在Include\Win32\wingdi.h中看到它們的實現(xiàn)。使用宏的一個結果是:函數(shù)不是類型安全的。你可以將char *傳給宏而不會得到任何警告。