Visual C# .NET-GDI+與圖形編程(工程師培訓(xùn))_第1頁
Visual C# .NET-GDI+與圖形編程(工程師培訓(xùn))_第2頁
Visual C# .NET-GDI+與圖形編程(工程師培訓(xùn))_第3頁
Visual C# .NET-GDI+與圖形編程(工程師培訓(xùn))_第4頁
Visual C# .NET-GDI+與圖形編程(工程師培訓(xùn))_第5頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第11章

GDI+與圖形編程

本章要點:

GDI+的基本概念

GDI+的常用對象,包括Graphics、Font、Brush、Pen等對象的創(chuàng)建和使用

常用圖形的繪制

Color結(jié)構(gòu)、Point結(jié)構(gòu)和Rectangle結(jié)構(gòu)11.1循序漸進學(xué)理論

11.1.1GDI+與繪圖命名空間

1.GDI+的概念

GDI+是GDI(GraphicsDeviceInterface,圖形設(shè)備接口)的改進產(chǎn)品。

2.GDI+的繪圖命名空間用戶所使有的GDI+函數(shù)都保存在System.Drawing.d11程序集中。其中包括System.Drawing、System.Drawing.Text、System.Drawing.Printing、System.Drawing.Imaging、System.Drawing.Drawing2D和System.Drawing.Design等命名空間。

11.1.2Graphics對象

創(chuàng)建Graphics對象的方法—般有三種

:(1)利用窗體或控件的Paint事件的參數(shù)PaintEventArgs創(chuàng)建Graphics對象。利用該方式創(chuàng)建Graphics對象的例子如下:

privatevoidForml_Paint(objectsender,PaintEventArgse){Graphicsg=e.Graphics;//聲明一個Graphics對象g}

(2)使用窗體或控件的CreateGraphics方法

窗體和控件類都有一個CreateGraphics方法,通過該方法可以在程序中生成此窗體或控件所對應(yīng)的Graphics對象。這種方法一般應(yīng)用于對象已經(jīng)存在的情況下。如下所示:Graphicsg;g=this.CreateGraphics();(3)使用Image的派生類創(chuàng)建Graphics對象。使用Image的任何派生類均可以生成相應(yīng)的Graphics對象,這種方法一般適用于在C#中對圖像進行處理的場合。如下:Bitmapb=newBitmap("Mybmp.bmp");Graphicsg=Graphics.FromImage(b);11.1.3Pen對象

1.Pen對象的創(chuàng)建

Pen類的構(gòu)造函數(shù)有四種,使用方法如下。(1)創(chuàng)建某一顏色的Pen對象:publicPen(Color)(2)創(chuàng)建某一刷子樣式的Pen對象:publicPen(Brush)(3)創(chuàng)建某—刷子樣式并具有相應(yīng)寬度的Pen對象:publicPen(Brush,float)(4)創(chuàng)建某一顏色和相應(yīng)寬度的Pen對象:publicPen(Color,float)2.Pen對象的常用屬性

(1)Alignment屬性:用來獲取或設(shè)置此Pen對象的對齊方式。(2)Color屬性:用來獲取或設(shè)置此Pen對象的顏色。(3)Width屬性:用來獲取或設(shè)置此Pen對象的寬度。(4)DashStyle屬性:用來獲取或設(shè)置通過此Pen對象繪制的虛線的樣式。

(5)DashCap屬性:用來指定虛線兩端風(fēng)格,是一個DashCap枚舉型的值。(6)StartCap屬性:用來獲取或設(shè)置通過此Pen對象繪制的直線起點的帽樣式。(7)EndCap屬性:用來獲取或設(shè)置通過此Pen對象繪制的直線終點的帽樣式。(8)PenType屬性:用來獲取用此Pen對象繪制的直線的樣式。

11.1.4Font對象

Font對象的常用屬性例如有下列程序代碼:privatevoidbutton1_Click(objectsender,System.EventArgse){ Fontfnt=newFont("Tahoma",20,FontStyle.Bold|FontStyle.Italic);//創(chuàng)建字體

Graphicsg=this.CreateGraphics();//創(chuàng)建Graphics對象

g.DrawString("GDI+編程世界",fnt,newSolidBrush(Color.Blue),14,10);//輸出文字}程序的執(zhí)行結(jié)果如圖11-2所示。

圖11-2程序運行結(jié)果11.1.5Brush對象

1.SolidBrush畫刷

SolidBrush類用來定義單一顏色的Brush,其構(gòu)造函數(shù)如下。

publicSolidBrush(Color.Color)例如:

SolidBrushMyBrush=newSolidBrush(Color.Blue);

該語句創(chuàng)建了一個名為MyBrush的藍色畫刷。2.HatchBrush畫刷

HatchBrush類的構(gòu)造函數(shù)有兩種,分別如下:

[格式1]:publicHatchBrush(HatchStyle,Color);[格式2]:publicHatchBrush(HatchStyle,Color,Color);HatchBrush畫刷具有三個屬性,分別如下:(1)BackgroundColor屬性:獲取此

HatchBrush

對象的背景色。(2)ForegroundColor屬性:獲取此

HatchBrush

對象的前景色。(3)HatchStyle屬性:獲取此HatchBrush

對象的陰影樣式。例如,有下列語句:HatchBrushHb=newHatchBrush(HatchStyle.Cross,Color.Blue);該語句創(chuàng)建一個名為Hb的畫刷對象,該畫刷的前景色為藍色,填充樣式為十字交叉。

3.LinearGradientBrush畫刷

LinearGradientBrush類的構(gòu)造函數(shù)有多種格式,最常用的格式如下。

publicLinearGradientBrush(Point1,Point2,Color1,Color2);

該構(gòu)造函數(shù)有四個參數(shù),其中Point1是表示漸變的起始點,Point2是表示漸變的終結(jié)點,Color1表示的漸變的起始色,Color2表示的是漸變的終止色。此處的Point1和Point2是Point結(jié)構(gòu)型的變量,Point結(jié)構(gòu)表示一個點,有兩個成員x和y,分別表示點的橫坐標和縱坐標。

例如有下列程序段:

privatevoidbutton1_Click(objectsender,System.EventArgse) {Graphicsg=this.CreateGraphics();//生成圖形對象

PenMypen=newPen(Color.Green,5);//生成畫筆

LinearGradientBrushMyBrush=newLinearGradientBrush(newPoint(0,20), newPoint(20,0),Color.Yellow,Color.Blue);//生成漸變畫刷

g.FillRectangle(MyBrush,0,0,200,100);//填充矩形

}

程序的執(zhí)行結(jié)果如圖11-3所示。圖11-3線性漸變填充

11.1.6常用圖形的繪制方法

1.畫直線

[格式1]:publicvoidDrawLine(Penpen,intx1,inty1,intx2,inty2);[格式2]:publicvoidDrawLine(Penpen,Pointpt1,Pointpt2);例如有下列程序:

privatevoidbutton1_Click(objectsender,System.EventArgse) {Graphicsg=this.CreateGraphics();//生成圖形對象

PenMypen=newPen(Color.Blue,5);//生成畫筆,藍色,5個像素

g.DrawLine(Mypen,1,1,30,30);//畫線

Pointpt1=newPoint(1,30);//生成起點

Pointpt2=newPoint(30,1);//生成終點

g.DrawLine(Mypen,pt1,pt2);//畫線

}程序的執(zhí)行結(jié)果如圖11-4所示。

圖11-4所畫直線

2.畫橢圓

[格式1]:publicvoidDrawEllipse(Penpen,Rectanglerect);

[格式2]:publicvoidDrawEllipse(Penpen,intx,inty,intwidth,intheight);例如有以下程序:

privatevoidForm1_Click(objectsender,System.EventArgse) { Graphicsg=this.CreateGraphics();//生成圖形對象

PenMypen=newPen(Color.Blue,5);//生成畫筆,藍色,5個像素

g.DrawEllipse(Mypen,1,1,80,40);//畫橢圓Rectanglerect=newRectangle(85,1,165,40);//生成矩形

g.DrawEllipse(Mypen,rect);//畫橢圓

}程序的執(zhí)行結(jié)果如圖11-5所示。

圖11-5繪制的橢圓

3.繪制圓弧

[格式1]:publicvoidDrawArc(Penpen,Rectanglerect,floatstartAngle,floatsweepAngle);

[格式2]:publicvoidDrawArc(Penpen,intx,inty,intwidth,intheight,intstartAngle,intsweepAngle);例如有以下程序:

privatevoidForm1_Click(objectsender,System.EventArgse) { Graphicsg=this.CreateGraphics();//生成圖形對象

PenMypen=newPen(Color.Blue,5);//生成畫筆,藍色,5個像素

g.DrawArc(Mypen,1,1,80,40,90,270);//畫弧線

Rectanglerect=newRectangle(85,1,165,40);//生成起點

g.DrawArc(Mypen,rect,0,90);//畫弧線

}程序的執(zhí)行結(jié)果如圖11-6所示。

圖11-6繪制的弧線

4.畫扇形圖使用Graphics對象的DrawPie方法可以繪制扇形圖,所謂扇形圖其實就是把一段圓弧的兩個端點與圓心相連。DrawPie方法的格式與DrawArc方法基本一致。例如有以下程序:

privatevoidForm1_Click(objectsender,System.EventArgse) { Graphicsg=this.CreateGraphics();//生成圖形對象

PenMypen=newPen(Color.Blue,5);//生成畫筆,藍色,5個像素

g.DrawPie(Mypen,1,1,80,40,90,270);//畫扇形

Rectanglerect=newRectangle(85,1,165,40);//生成矩形

g.DrawPie(Mypen,rect,0,90);//畫扇形

}程序的執(zhí)行結(jié)果如圖11-7所示。

圖11-7繪制的餅形

5.畫矩形

[格式1]:publicvoidDrawRectangle(Penpen,Rectanglerect);

[格式2]:publicvoidDrawRectangle(Penpen,intx,inty,intwidth,intheight);例如有以下程序:

privatevoidForm1_Click(objectsender,System.EventArgse) { Graphicsg=this.CreateGraphics();//生成圖形對象

PenMypen=newPen(Color.Blue,2);//生成畫筆,藍色,2個像素

g.DrawRectangle(Mypen,5,5,80,40);//畫矩形

Rectanglerect=newRectangle(85,15,140,50);//生成矩形

g.DrawRectangle(Mypen,rect);//畫矩形

}程序的執(zhí)行結(jié)果如圖11-8所示。

圖11-8繪制的矩形6.畫Bezier曲線

[格式1]:publicvoidDrawBezier(Penpen,Pointpt1,Pointpt2,Pointpt3,Pointpt4);[格式2]:publicvoidDrawBezier(Penpen,floatx1,floaty1,floatx2,floaty2,floatx3,floaty3,floatx4,floaty4);例如有以下程序:

privatevoidForm1_Click(objectsender,System.EventArgse) { Graphicsg=this.CreateGraphics();//生成圖形對象

PenMypen=newPen(Color.Blue,2);//生成畫筆,藍色,2個像素

g.DrawBezier(Mypen,newPoint(10,10),newPoint(50,100), newPoint(80,60),newPoint(140,20));//按Point結(jié)構(gòu)畫貝塞爾曲線g.DrawBezier(Mypen,20,10,60,40,80,45,90,10);//按順序點畫貝塞爾曲線

}程序的執(zhí)行結(jié)果如圖11-9所示。

圖11-9繪制的貝塞爾曲線7.畫多邊形

[格式1]:publicvoidDrawPolygon(Penpen,Point[]points);

[格式2]:publicvoidDrawPolygon(Penpen,PointF[]points);例如有以下程序:

privatevoidForm1_Click(objectsender,System.EventArgse) { PenblackPen=newPen(Color.Black,3)//生成畫筆; Graphicsg=this.CreateGraphics();//生成圖形對象

Pointpoint1=newPoint(50,50);//生成5個點 Pointpoint2=newPoint(70,25);Pointpoint3=newPoint(100,30); Pointpoint4=newPoint(120,85);Pointpoint5=newPoint(80,100); Point[]curvePoints={point1,point2,point3,point4,point5};//定義Point結(jié)構(gòu)的數(shù)組

g.DrawPolygon(blackPen,curvePoints);//繪制多邊形

}

程序的執(zhí)行結(jié)果如圖11-10所示。

圖11-10繪制的多邊形8.繪制閉合曲線

[格式1]:publicvoidDrawClosedCurve(Penpen,Point[]points);

[格式2]:publicvoidDrawClosedCurve(Penpen,Point[]points,floattension,FillModefillmode);例如有以下程序:

privatevoidForm1_Click(objectsender,System.EventArgse) { PenblackPen=newPen(Color.Black,3);//生成畫筆; Graphicsg=this.CreateGraphics();//生成圖形對象Pointpoint1=newPoint(50,50);//生成5個點

Pointpoint2=newPoint(70,25);Pointpoint3=newPoint(100,30); Pointpoint4=newPoint(120,85);Pointpoint5=newPoint(80,100); Point[]curvePoints={point1,point2,point3,point4,point5};//定義Point結(jié)構(gòu)的數(shù)組

g.DrawClosedCurve(blackPen,curvePoints,.9F,FillMode.Alternate);//繪制閉合曲線

}程序的執(zhí)行結(jié)果如圖11-11所示。

圖11-11繪制的閉合曲線9.繪制非閉合曲線

[格式]:publicvoidDrawCurve(Penpen,Point[]points);

圖11-12繪制的非閉合曲線

10.繪制路徑

[格式]:publicvoidDrawPath(Penpen,GraphicsPathpath);例如有以下程序:

privatevoidForm1_Click(objectsender,System.EventArgse) { PenblackPen=newPen(Color.Black,3);//生成畫筆; Graphicsg=this.CreateGraphics();//生成圖形對象

GraphicsPathgraphPath=newGraphicsPath();//生成圖形路徑對象

graphPath.AddEllipse(5,5,50,50);//在路徑中增加橢圓graphPath.AddBezier(30,60,70,80,50,30,90,40);//在路徑中增加貝塞爾曲線

graphPath.AddRectangle(newRectangle(60,5,100,50));//在路徑中增加矩形

g.DrawPath(blackPen,graphPath);//繪制路徑

}

程序的執(zhí)行結(jié)果如圖11-13所示。

圖11-13繪制的路徑

11.填充橢圓

[格式1]:publicvoidFillEllipse(Brushbrush,Rectanglerect);

[格式2]:publicvoidDrawEllipse(Brushbrush,intx,inty,intwidth,intheight);例如有以下程序:

privatevoidForm1_Click(objectsender,System.EventArgse) { Graphicsg=this.CreateGraphics();//生成圖形對象

SolidBrushBlueBrush=newSolidBrush(Color.Blue);//生成填充用的畫刷

intx=0;//定義外接矩形的左上角坐標和高度及寬度

inty=0; intwidth=200; intheight=100; Rectanglerect=newRectangle(x,y,width,height);//定義矩形

g.FillEllipse(BlueBrush,rect);//填充橢圓

}

程序的執(zhí)行結(jié)果如圖11-14所示。

圖11-14填充的橢圓

12.填充矩形

[格式1]:publicvoidFillRectangle(Brushbrush,Rectanglerect);

[格式2]:publicvoidFillRectangle(Brushbrush,intx,inty,intwidth,intheight);例如有以下程序:

privatevoidForm1_Click(objectsender,System.EventArgse) { Graphicsg=this.CreateGraphics();//生成圖形對象

SolidBrushBlueBrush=newSolidBrush(Color.Blue);//生成填充用的畫刷

intx=15;//定義外接矩形的左上角坐標和高度及寬度inty=15; intwidth=200; intheight=100; Rectanglerect=newRectangle(x,y,width,height);//定義矩形

g.FillRectangle(BlueBrush,rect);//填充矩形

}

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論