1. 程式人生 > >GDI+基礎知識三 鋼筆(pen)和筆刷(brush) 1

GDI+基礎知識三 鋼筆(pen)和筆刷(brush) 1

在談到繪製圖形時,鋼筆和筆刷是最基本的工具。在Graphics類中,大多數函式都需要使用Pen或Brush物件,在GDI+中,Pen類主要用於繪製直線、曲線和圖形的邊框,而Brush類以各種顏色和圖案填充或描繪圖形。這兩個類在GDI+中使用非常頻繁。

首先看Pen類,主要介紹:

不同線寬度的鋼筆

繪製實線、點畫線和虛線的鋼筆,以及如何配置這些樣式

繪製帶箭頭和其他形狀的線段的鋼筆

連線線段的不同方式

然後是Brush類,主要介紹:

紋理筆刷的行為,以及如何使用它們

如何使用線性漸變筆刷給自定義控制元件繪製平滑而時尚的外觀

如何使用HatchBrush類以指定的圖案填充某個區域

最後將描述如何使用筆刷建立鋼筆。這個技術允許使用筆刷型別的樣式執行鋼筆的型別操作,為建立各種型別的效果提供了更大的靈活性。

1.控制鋼筆的屬性

先建立一個最簡單的例子,在vs中新建一個windows窗體應用程式,事件面板中雙擊進入Paint事件,新增如下程式碼:

Graphics g = e.Graphics;          //建立Graphics物件,為繪圖做準備
            g.FillRectangle(Brushes.White, this.ClientRectangle);//將客戶區域設定為白色
            Pen p = new Pen(Color.Black, 5); //設定鋼筆顏色為黑色,寬度為5,可以F12看看Pen的建構函式有哪些
            g.DrawLine(p, 10, 10, 50, 50);   //使用鋼筆畫一條線段,起點座標(10,10),終點座標(50,50)
            p.Dispose();                     //釋放鋼筆所用資源
            g.Dispose();     

效果圖:

實際上,Pen類有兩個建構函式,各兩種方式

第一個建構函式的兩種方式:

//Specified color,default width(1px)

Pen p1 = new Pen(myColor);

//Specified color, Specified width(px)

Pen P2 = new Pen(myColor, myWidth);

第二個建構函式的兩種方式:(合併使用鋼筆和筆刷的功能)

Pen p3 = new Pen(myBrush);

Pen p4 = new Pen(myBrush,myWidth);

2.繪製短劃線

//關鍵部分的程式碼

Pen p = new Pen(Color.Black, 5);

p.DashStyle = DashStyle.Dash;

g.DrawLine(p, 3, 3, 100, 3);

效果圖:

DashStyle列舉由System.Drawing.Drawing2D名稱空間提供,它提供了5個預定義的樣式:Solid、Dash、DashDot、DashDotDot和Dot。可以自己嘗試下。

短劃線也可以自己定製,方法是使用一個整數陣列,描述短線以及短線之間距離的畫素長度,如:

Graphics  g = e.Graphics;

g.FillRectangle(Brushes.White, this.ClientRectangle);

Pen p = new Pen(Color.Black, 2);

    float[] f = {15, 5, 10, 5};

p.DashPattern = f;

g.DrawRectangle(p, 10, 10, 80,100);

p.Dispose();

g.Dispose();

效果圖:

線寬改成5或更大時會有驚喜,試試!

3.箭頭和其他線段端部圖形

使用line cap可以指定GDI+如何裝飾線段的開始和結尾。事實上這表示把值賦予Pen物件的StartCap和EndCap屬性。

Pen p = new Pen(Color.Black, 10);

p.StartCap = LineCap.Round;

p.EndCap = LineCap.ArrowAnchor;

g.DrawLine(p,30,30,80,30);

效果圖:

  可用線段端部和他們的外觀:

4.連線線段

線段之間的連線,主要是設定連線處的樣式,System.Drawing.Drawing2D名稱空間中LineJoin枚舉了四個值:Miter(預設值)、Beveled、MiterClipped和Round。下面將使用Round值繪製一個矩形:

Pen p = new Pen(Color.Black, 10);

p.LineJoin = LineJoin.Round;

e.Graphics.DrawRectangle(p, 20, 20, 60, 60);

p.Dispose();

如圖,矩形帶有圓角

Pens類

為了方便,GDI+提供了141中預定義的彩色鋼筆,對應於Color結構中預定義的141種顏色,使用預定義的鋼筆會有一些效能上的優勢,由於使用Pens類時沒有建立物件,所以不需要釋放資源。例如繪製一個。略帶桃色的矩形:

Graphics g = e.Graphics;

g.FillRectangle(Brushes.White, this.ClientRectangle);

g.DrawRectangle(Pens.MistyRose, 20, 20, 40, 40);