C#學習筆記:GDI圖形高級編程(1)——如何將圖形畫到控件上

之前學習OpenGL是用C語言寫的程序,開發個界面,既繁瑣又不美觀,還一大堆BUG。現在學了C#,可以很輕易地進行界面開發,我就尋思着,怎麼樣把OpenGL搬到C#中。查了很多資料,得出了這樣一個結論:OpenGL官方沒有爲C#語言提供OpenGL API接口,而視OpenGL爲死對頭的微軟更不可能在自家的語言上爲OpenGL提供支持。只有第三方做了一些適合在C#上使用的OpenGL接口,比如CsGL,CsOpenGL等,然而這些第三方的圖形接口很老了,很久沒有維護了,OpenGL都出到4.2以上了,而它們最新的版本還在1.4。版本老一點,能用就行,畢竟不會期待着在C#做一些特別炫酷的三維圖形,可是也許是Windows系統的問題,抑或是.net framework 版本的問題,在使用CsGL的時候,總是出現一些很奇妙的問題。心裏一千頭羊駝飛過!我可能得花大量的時間去解決這些問題(以我的能力,無解都不一定)。心灰意冷,內心咒罵額微軟N多遍。學微軟家的圖形接口D3D吧!麻煩。想想還是用C#自帶的GDI圖形接口吧,雖然功能有限,但還是可以用的,不至於出現很多亂七八糟的事情。下面進入正題(內心是多麼不情願纔會纔會在前面寫了一堆廢話啊)。


GDI是什麼鬼就不囉嗦了,網上很多很好的說法。不管原理,還是直接用吧。那麼如何將圖形畫出來呢?對於一個畫家而言,要繪畫,首先得準備一塊畫布,除此之外至少還得有畫筆畫刷什麼的。下面將簡述一下繪圖的步驟。

一、引用名稱空間

GDI的相關類、方法都定義在System.Drawing這個名稱空間裏面。在使用GDI圖形接口的代碼頁面上加上一下代碼:

	Using System.Drawing;

、創建 Graphics 對象

爲什麼要創建 Graphics 對象呢?因爲要畫圖的畫,就要考慮往哪個控件上畫,這個Graphics對象就相當於畫布。大部分可視的控件都可以作爲畫布,比如Form控件、PictureBox控件、Label控件、Button控件、TextBox控件,甚至是CheckedBox控件都可以作爲畫布。選擇哪個控件作爲畫布,還需要用到CreateGraphics方法。下面是創建Graphics對象的一些例子:

Graphics  g;//創建一個圖形對象
g=this.CreateGraphics()//將圖形畫在窗體上
g=pictureBox1.CreateGraphics()//將圖形畫在PictureBox控件上
g=label1.CreateGraphics()//將圖形畫在Label控件上
g=checkedBox1.CreateGraphics()//將圖形畫在CheckedBox控件上

三、設置鋼筆(Pen)或畫刷(Brush)

選好畫布還不能幹點什麼,還要設置畫筆或者畫刷才能畫圖。畫筆(Pen)用來畫圖形的輪廓,畫刷(Brush)是用某種顏色來填充圖形,如果不填充顏色,可以不用畫刷。

(1)設置畫筆(Pen)

設置畫筆就要用到一個Pen類,該類的作用就是設置繪圖畫筆的顏色和筆觸的大小。

Color color=Color.FromArgb(255,0,0);//顏色爲紅色
Pen p=new Pen(color,3);//創建一個畫筆對象,該畫筆的顏色爲紅色,筆觸大小爲3個像素
(2)設置畫刷(Brush)
畫刷的作用就是填充圖形以顏色,需要用到Brush類,GDI的Brush類本身是抽象類,不能直接實例化,所以GDI API 提供了一下五個類,來擴展Brush,並提供了具體的實現,如下:

說明
SolidBrush 用純色填充圖形
TextureBrush 用基於光柵的圖像(位圖、Jpg等)填充圖形
LinearGradientBrush 用顏色漸變填充圖形,顏色漸變是指一種顏色沿着指定的方向或在兩個指定(平行)的邊界線之間逐漸變爲另一種暗色
PathGradientBrush 用漸變的效果填充圖形,漸變的方向是從由路徑定義的圖形邊界指向圖形的中心。
HatchBrush 用各種圖案填充圖形

下面是一些例子:

Brush brush;//創建一個畫刷
brush=new SolidBrush(Color.FromArgb(255,0,0));//設置畫刷的顏色爲紅色
Bitmap map=new Bitmap("01.jpg");//載入一張圖片
brush=new TextureBrush(map);//用圖片填充圖形

四、選擇要畫的圖形

GDI提供了很多畫圖的方法,挑幾個常用的提一下:

(1)畫圖形的輪廓

DrawArc:繪製一段弧線。

DrawElipse:繪製橢圓。

DrawLine:繪製直線。

DrawPie:繪製扇形。

DrawPolygon:繪製多邊形。

DrawRectangle:繪製矩形。

DrawString:繪製字符串。

    。。。。。。

(2)填充圖形

FillElipse:填充橢圓。

FillPie:填充扇形。

FillPolygon:填充多邊形。

。。。。。。

五、實例

在窗體上放一個Button控件和一個PictureBox控件,然後Button控件上畫一個紅色的圓,不填充;在PictureBox控件上畫紅色輪廓的橢圓,然後用綠色填充。運行時雙擊窗體,開始繪製圖形。其代碼和運行效果圖下圖所示:

運行時,雙擊窗體,效果如下:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章