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);