A:關鍵所在
漸變圖形是一種特殊的圖形,它從窗體的一端開始移動,同時顏色緩慢變化,達到窗體的另一端,但圖形已經變為另一種顏色。
這種奇特的視覺效果制作起來相當簡單,只需將屏幕分成許多行,每一行顯示不同的顏色就可以了。漸變圖形可以有許多種形式,有圓形漸變、矩形漸變、對角漸變等多種顯示效果。要顯示漸變,需使用到RGB 宏,每次使顏色值的各顏色分量稍有變化。
B:實現與應用
選擇菜單 File | New Application,創建一個新的項目文件。在窗體 Form1 上放置一個 TColorDialog 控件,然後切換到Unit1.h,在 TForm1 的 private 部分加入兩個變量的定義,分別用於設置起始顏色和終止顏色。
private: // User declarations
TColor StartColor,EndColor;
然後雙擊窗體,創建窗體的 OnCreate 事件處理函數,在其中加入如下代碼,用於讓用戶選擇起始顏色和結束顏色。
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
if(ColorDialog1->Execute())
StartColor=ColorDialog1->Color;
if(ColorDialog1->Execute())
EndColor=ColorDialog1->Color;
}
//---------------------------------------------------------------------------
最後創建窗體 Form1 的 OnPaint 事件處理函數,在其中加入如下代碼,用稍有變化的顏色值畫一系列的垂直線,達到漸變的效果。
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
float pwidth;
int redstart,greenstart,bluestart,redend,greenend, blueend;
float redinc,greeninc,blueinc;
pwidth=float(Width);
redstart=GetRValue(StartColor);
greenstart=GetGValue(StartColor);
bluestart=GetBValue(StartColor);
redend=GetRValue(EndColor);
greenend=GetGValue(EndColor);
blueend=GetBValue(EndColor);
redinc=(redend-redstart)/pwidth;
greeninc=(greenend-greenstart)/pwidth;
blueinc=(blueend-bluestart)/pwidth;
for(int i=0;i<Width;i++)
{
Canvas->Pen->Color=TColor(RGB(redstart+int(redinc*i),
greenstart+int(greeninc*i),
bluestart+int(blueinc*i)));
Canvas->MoveTo(i,0);
Canvas->LineTo(i,Height);
}
}
//---------------------------------------------------------------------------
C:專家點評
程序中設漸變開始的顏色為 StartColor,結束的顏色為 EndColor。利用GetRValue、GetGValue、GetBValue 函數分別獲得開始顏色的紅、綠、藍三原色分量 redstart greenstart bluestart 和結束顏色的三原色紅、綠、藍分量 redend greenend blueend。如果矩形的寬度為 pwidth 象素,則每次變化的各顏色分量值應分別為(redend-redstart)/pwidth、(greenend-greenstart)/pwidth、(blueend-bluestart)/pwidth,最後寫一個循環,畫一系列直線。
這裡介紹的僅僅是顏色漸變的一種形式,讀者完全可以參照其實現方法,改變數學運算,實現如“從上至下逐步加深”、“從左至右逐步加深”等顏色漸變形式,此外,還可以通過畫一系列顏色不斷變化的圓,制作圓形漸變效果。首先畫一個最大的圓,然後依次畫半徑比前一個圓小一個象素的圓,然後依次畫半徑比前一個圓小一個象素的圓,同時圓的顏色也發生變化。