国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

實現窗體的漸變背景

2019-11-17 05:23:23
字體:
來源:轉載
供稿:網友

  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,最后寫一個循環,畫一系列直線。

這里介紹的僅僅是顏色漸變的一種形式,讀者完全可以參照其實現方法,改變數學運算,實現如“從上至下逐步加深”、“從左至右逐步加深”等顏色漸變形式,此外,還可以通過畫一系列顏色不斷變化的圓,制作圓形漸變效果。首先畫一個最大的圓,然后依次畫半徑比前一個圓小一個象素的圓,然后依次畫半徑比前一個圓小一個象素的圓,同時圓的顏色也發生變化。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浙江省| 瑞金市| 舒兰市| 泰兴市| 徐汇区| 合江县| 庆阳市| 徐汇区| 孟连| 玉屏| 屏山县| 滨州市| 普兰店市| 栾城县| 大荔县| 进贤县| 秀山| 甘谷县| 临澧县| 博客| 厦门市| 尚义县| 呼图壁县| 交口县| 临海市| 云梦县| 湘阴县| 五莲县| 沅江市| 黄山市| 紫金县| 蒙山县| 广安市| 西华县| 广元市| 漳浦县| 潼南县| 榆社县| 洛宁县| 策勒县| 沂南县|