国产探花免费观看_亚洲丰满少妇自慰呻吟_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,最后寫一個循環,畫一系列直線。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汝州市| 达日县| 榆中县| 罗甸县| 奉贤区| 湖口县| 霞浦县| 麻城市| 句容市| 原平市| 平邑县| 石景山区| 灵台县| 内黄县| 汉川市| 冷水江市| 益阳市| 汽车| 万载县| 鹿邑县| 洛宁县| 祁门县| 区。| 远安县| 吴江市| 博乐市| 甘洛县| 天门市| 青河县| 涡阳县| 旺苍县| 福贡县| 秀山| 渭源县| 团风县| 陵川县| 阿瓦提县| 广西| 越西县| 平利县| 界首市|