C圖形程序設(shè)計基礎(chǔ)實用_第1頁
C圖形程序設(shè)計基礎(chǔ)實用_第2頁
C圖形程序設(shè)計基礎(chǔ)實用_第3頁
C圖形程序設(shè)計基礎(chǔ)實用_第4頁
C圖形程序設(shè)計基礎(chǔ)實用_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

會計學(xué)1C圖形程序設(shè)計基礎(chǔ)實用圖形圖像處理中常常調(diào)用的名稱空間:System:包括常用基礎(chǔ)數(shù)據(jù)類型和24個子名稱空間System.Drawing:提供了對GDI+基本圖形功能的訪問,主要有Graphics類、Bitmap類、從Brush類繼承的類、Font類、Icon類、Image類、Pen類、Color類等System.Drawing.Drawing2D:提供了高級的二維和矢量圖形功能。主要有梯度型畫刷、Matrix類(用于定義幾何變換)和GraphicsPath類等

System.Drawing.Imaging:提供了高級GDI+圖像處理功能System.WinForms:提供許多與數(shù)據(jù)處理相關(guān)的結(jié)構(gòu)的類

System.Timers:提供精確的計時操作System.Drawing.Text:提供了高級GDI+字體和文本排版功能第2頁/共57頁第1頁/共57頁1.2創(chuàng)建Graphics對象Graphics類包含在System.Drawing名稱空間下。要進(jìn)行圖形處理,必須首先創(chuàng)建Graphics對象,然后才能利用它進(jìn)行各種畫圖操作,即先創(chuàng)建Graphics對象再使用該對象的方法繪圖、顯示文本或處理圖像。創(chuàng)建Graphics對象的形式有:1.在窗體或控件的Paint事件中直接引用Graphics對象每一個窗體或控件都有一個Paint事件,該事件的參數(shù)中包含了當(dāng)前窗體或控件的Graphics對象,在為窗體或控件創(chuàng)建繪制代碼時,一般使用此方法來獲取對圖形對象的引用:PrivatevoidForm_Paint(objectsender,System.Windows.Forms.PaintEventArgse){Graphicsg=e.Graphics;……}第3頁/共57頁第2頁/共57頁2.利用窗體或某個控件的CreateGraphics方法此方法所建對象是該控件或窗體的繪圖區(qū)域,可把當(dāng)前窗體的畫刷、字體、顏色作為缺省值獲取對Graphics對象的引用,注意這種對象只有在處理當(dāng)前Windows窗口消息的過程中有效;如果想在已存在的窗體或控件上繪圖,可以使用此方法。例如:

Graphicsg=this.CreatGraphics();3.從繼承自圖像的任何對象創(chuàng)建Graphics對象此方法在需要更改已存在的圖像時十分有用,例如:

Bitmapbitmap=newBitmap(@”C:\test\a1.bmp”);Graphicsg=Graphics.FromImage(bitmap);第4頁/共57頁第3頁/共57頁在圖形圖像處理程序設(shè)計中,與Graphics對象一起使用的用戶對象常有:Pen:用于繪制線條、勾勒形狀輪廓等;Brush:用于填充圖形區(qū)域;Font:提供有關(guān)在呈現(xiàn)文本時要使用什么形狀的說明;Color:該結(jié)構(gòu)表示要顯示的不同顏色注意:由于圖像對象非常占資源,所以在不用這些對象時要用Dispose方法及時釋放資源第5頁/共57頁第4頁/共57頁附:顏色顏色是進(jìn)行圖形操作的基本要素。任何一種顏色都可以由四個分量決定,每個分量占據(jù)一個字節(jié):

R:紅色,取值范圍0~255,255為飽和紅色

G:綠色,取值范圍0~255,255為飽和綠色

B:藍(lán)色,取值范圍0~255,255為飽和藍(lán)色

A:Alpha值,即透明度。取值范圍0~255,0為完全透明,255為完全不透明在System.Drawing名稱空間下,有一個Color結(jié)構(gòu)類型,包含系統(tǒng)已定義的顏色種類??梢允褂孟铝蟹椒▌?chuàng)建顏色對象:⑴使用FromArgb指定任意顏色這個方法有兩種常用的形式:第6頁/共57頁第5頁/共57頁第一種形式是直接指定三種顏色,方法原型為:publicstaticColorFromArgb(intred,intgreen,intblue)

三個參數(shù)分別表示R、G、B三色,Alpha值使用缺省值255,即完全不透明;例如:

Colorred=Color.FromArgb(255,0,0); Colorgreen=Color.FromArgb(0,255,0); Colorblue=Color.FromArgb(0,0,0xff);

其中,0xff為十六進(jìn)制表示形式。第二種形式使用四個參數(shù),格式為:publicstaticColorFromArgb(intalpha,intred,intgreen,intblue)四個參數(shù)分別表示透明度和R、G、B三色值。第7頁/共57頁第6頁/共57頁⑵使用系統(tǒng)預(yù)定義顏色在Color結(jié)構(gòu)中已經(jīng)預(yù)定義了141種顏色,可以直接使用,例如:

ColormyColor;myColor=Color.Red;myColor=Color.Aquamarine;myColor=Color.LightGoldenrodYellow;第8頁/共57頁第7頁/共57頁1.3創(chuàng)建畫筆對象用Pen類創(chuàng)建畫筆對象,畫筆通常具有寬度、樣式和顏色三種屬性。1.Pen對象的創(chuàng)建:publicPen(Colorcolor);publicPen(Colorcolor,floatwidth);publicPen(Brushbrush);publicPen(Brushbrush,floatwidth);如:PenmyPen=newPen(Color.Black);PenmyPen=newPen(Color.Black,5);SolidBrushmyBrush=newSolidBrush(Color.Red);PenmyPen=newPen(myBrush);PenmyPen=newPen(myBrush,5);第9頁/共57頁第8頁/共57頁2.Pen對象的屬性:畫筆對象的屬性用于返回或設(shè)置畫筆對象的顏色、畫線樣式、畫線始點及終點的樣式等。常用屬性如下:Color:DashCap:DashStyle:EndCap:PenType:StartCap:Width:例:第10頁/共57頁第9頁/共57頁1)新建一個Windows應(yīng)用程序,適當(dāng)加寬窗體寬度。然后切換到代碼方式,添加名稱空間引用:

usingSystem.Drawing.Drawing2D;

2)添加Form1_Paint事件代碼。

privatevoidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Graphicsg=e.Graphics; Penpen=newPen(Color.Blue,10.5f); g.DrawString("藍(lán)色,寬度為10.5",this.Font,newSolidBrush(Color.Black),5,5); g.DrawLine(pen,newPoint(110,10),newPoint(380,10)); pen.Width=2;pen.Color=Color.Red; g.DrawString("紅色,寬度為2",this.Font,newSolidBrush(Color.Black),5,25);第11頁/共57頁第10頁/共57頁g.DrawLine(pen,newPoint(110,30),newPoint(380,30));pen.StartCap=LineCap.Flat;pen.EndCap=LineCap.ArrowAnchor;pen.Width=9;g.DrawString("紅色箭頭線",this.Font,newSolidBrush(Color.Black),5,45);g.DrawLine(pen,newPoint(110,50),newPoint(380,50));pen.DashStyle=DashStyle.Custom;pen.DashPattern=newfloat[]{4,4};pen.Width=2;pen.EndCap=LineCap.NoAnchor;g.DrawString("自定義虛線",this.Font,newSolidBrush(Color.Black),5,65);g.DrawLine(pen,newPoint(110,70),newPoint(380,70));pen.DashStyle=DashStyle.Dot;g.DrawString("點劃線",this.Font,newSolidBrush(Color.Black),5,85);g.DrawLine(pen,newPoint(110,90),newPoint(380,90)); }

第12頁/共57頁第11頁/共57頁運(yùn)行結(jié)果

第13頁/共57頁第12頁/共57頁1.4創(chuàng)建畫刷畫刷是可與Graphics對象一起使用來創(chuàng)建實心形狀和呈現(xiàn)文本的對象??梢杂卯嬎⑻畛涓鞣N圖形形狀,如矩形、橢圓、扇形、多邊形和封閉路徑等。幾種不同類型的畫刷:SolidBrush:畫刷最簡單的形式,用純色進(jìn)行繪制HatchBrush:類似于

SolidBrush,但是可以利用該類從大量預(yù)設(shè)的圖案中選擇繪制時要使用的圖案,而不是純色TextureBrush:使用紋理(如圖像)進(jìn)行繪制LinearGradientBrush:使用沿漸變混合的兩種顏色進(jìn)行繪制PathGradientBrush:基于編程者定義的唯一路徑,使用復(fù)雜的混合色漸變進(jìn)行繪制第14頁/共57頁第13頁/共57頁(1)使用SolidBrush類定義單色畫筆

SolidBrush類用于定義單色畫筆。該類只有一個構(gòu)造函數(shù),帶有一個Color類型的參數(shù)。下面的示例說明如何在窗體上繪制一個純紅色的橢圓。該橢圓將符合為其提供的矩形的大小(此例中為表示整個窗體的ClientRectangle)。例:

privatevoidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse) { Graphicsg=e.Graphics; SolidBrushmyBrush=newSolidBrush(Color.Red); g.FillEllipse(myBrush,this.ClientRectangle); }

第15頁/共57頁第14頁/共57頁運(yùn)行效果第16頁/共57頁第15頁/共57頁(2)使用HatchBrush類繪制簡單圖案

HatchBrush類用于從大量預(yù)設(shè)的圖案中選擇繪制時要使用的圖案,而不是純色。下面的示例說明如何創(chuàng)建一個HatchBrush,它使用90%的陰影,前景色與背景色的比例為90:100,并使用白色作為前景色,黑色作為背景色。例:

privatevoidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Graphicsg=e.Graphics; HatchBrushaHatchBrush=new HatchBrush(HatchStyle.Percent90,Color.White,Color.Black); g.FillEllipse(aHatchBrush,this.ClientRectangle);}

第17頁/共57頁第16頁/共57頁運(yùn)行效果:第18頁/共57頁第17頁/共57頁(3)使用TextureBrush類繪制復(fù)雜圖案

TextureBrush類允許使用一幅圖像作為填充的樣式。該類提供了5個重載的構(gòu)造函數(shù),分別是:

PublicTextureBrush(Image)PublicTextureBrush(Image,Rectangle)PublicTextureBrush(Image,WrapMode)PublicTextureBrush(Image,Rectangle,ImageAttributes)PublicTextureBrush(Image,WrapMode,Rectangle)其中:Image:用于指定畫筆的填充圖案。

Rectangle:用于指定圖像上用于畫筆的矩形區(qū)域,其位置不能超越圖像的范圍。

WrapMode:WrapMode枚舉成員用于指定如何排布圖像,可以是

Clamp完全由繪制對象的邊框決定

Tile平鋪

TileFlipX水平方向翻轉(zhuǎn)并平鋪圖像

TileFlipY垂直方向翻轉(zhuǎn)并平鋪圖像

TileFlipXY水平和垂直方向翻轉(zhuǎn)并平鋪圖像第19頁/共57頁第18頁/共57頁ImageAttributes:用于指定圖像的附加特性參數(shù)。

TextureBrush類有三個屬性:

Image:Image類型,與畫筆關(guān)聯(lián)的圖像對象。

Transform:Matrix類型,畫筆的變換矩陣。

WrapMode:WrapMode枚舉成員,指定圖像的排布方式。

下面的示例說明了如何創(chuàng)建一個TextureBrush,例子使用名為m23.jpg的圖像進(jìn)行繪制。

例:private

voidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Graphicsg=e.Graphics; TextureBrushmyBrush=newTextureBrush(newBitmap(@"e:\test\m23.jpg")); g.FillEllipse(myBrush,this.ClientRectangle);}

第20頁/共57頁第19頁/共57頁運(yùn)行效果:第21頁/共57頁第20頁/共57頁(4)使用LinearGradientBrush類定義線性漸變這個類用于定義線性漸變畫筆,可以是雙色漸變,也可以是多色漸變。缺省情況下,漸變由起始顏色沿著水平方向平均過渡到終止顏色。要定義多色漸變,需要使用InterpolationColors屬性。下面的示例說明如何由白色漸變到藍(lán)色。例:privatevoidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Graphicsg=e.Graphics;LinearGradientBrushmyBrush=newLinearGradientBrush(

this.ClientRectangle,Color.White,Color.Blue,LinearGradientMode.Vertical);g.FillRectangle(myBrush,this.ClientRectangle);}第22頁/共57頁第21頁/共57頁

如果創(chuàng)建應(yīng)用程序后向設(shè)計窗體上拖放一些控件,可以看到運(yùn)行后該圖就是一個漂亮的背景了。

第23頁/共57頁第22頁/共57頁(5)使用PathGradientBrush類實現(xiàn)彩色漸變在GDI+中,把一個或多個圖形組成的形體稱作路徑??梢允褂肎raphicsPath類定義路徑,使用PathGradientBrush類定義路徑內(nèi)部的漸變色畫筆。漸變色從路徑內(nèi)部的中心點逐漸過渡到路徑的外邊界邊緣。PathGradientBrush類有三種形式的構(gòu)造函數(shù),形式之一是:

publicPathGradientBrush(GraphicsPathpath)

其中,GraphicsPath定義畫筆填充的區(qū)域。例,路徑和路徑畫筆的使用:

usingSystem.Drawing.Drawing2D;

……

第24頁/共57頁第23頁/共57頁privatevoidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Graphicsg=e.Graphics; PointcenterPoint=newPoint(150,100); intR=60;GraphicsPathpath=newGraphicsPath(); path.AddEllipse(centerPoint.X-R,centerPoint.Y-R,2*R,2*R); PathGradientBrushbrush=newPathGradientBrush(path);//指定路徑中心點

brush.CenterPoint=centerPoint;

//指定路徑中心點的顏色

brush.CenterColor=Color.Red;

//Color類型的數(shù)組指定與路徑上每個頂點對應(yīng)的顏色

brush.SurroundColors=newColor[]{Color.Plum};第25頁/共57頁第24頁/共57頁

g.FillEllipse(brush,centerPoint.X-R,centerPoint.Y-R,2*R,2*R); centerPoint=newPoint(350,100);R=20; path=newGraphicsPath(); path.AddEllipse(centerPoint.X-R,centerPoint.Y-R,2*R,2*R); path.AddEllipse(centerPoint.X-2*R,centerPoint.Y-2*R,4*R,4*R); path.AddEllipse(centerPoint.X-3*R,centerPoint.Y-3*R,6*R,6*R);brush=newPathGradientBrush(path); brush.CenterPoint=centerPoint; brush.CenterColor=Color.Red; brush.SurroundColors=newColor[]{Color.Black,Color.Blue,Color.Green}; g.FillPath(brush,path);}第26頁/共57頁第25頁/共57頁

在這個例子中,可以看到當(dāng)使用FillPath()方法填充路徑的時候,如果多個圖形互相重疊,則重疊部分的數(shù)目為偶數(shù)時不會被填充,因此右圖中間部分仍為背景色而不是藍(lán)色。

第27頁/共57頁第26頁/共57頁附:平移、旋轉(zhuǎn)與縮放

Graphics類提供了三種對圖像進(jìn)行幾何變換的方法,它們是TranslateTransform()方法、RotateTransform()方法和ScaleTransform()方法,分別用于圖形圖像的平移、旋轉(zhuǎn)和縮放(以坐標(biāo)系原點為中心)。TranslateTransform()方法的形式為:

publicvoidTranslateTransform(floatdx,floatdy)

其中,dx表示平移的x分量,dy表示平移的y分量;RotateTransform()方法的形式為:

publicvoidRotateTransform(floatangle)

其中,angle表示旋轉(zhuǎn)角度;ScaleTransform()方法的形式為:

publicvoidScaleTransform(floatsx,floatsy)

其中,sx表示x方向的縮放比例,sy表示y方向的縮放比例;

第28頁/共57頁第27頁/共57頁例:三種變換方法示例。

private

voidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Graphicsg=e.Graphics; g.FillEllipse(newSolidBrush(Color.FromArgb(80,Color.Red)),120,30,200,100);//橢圓透明度80% g.RotateTransform(30.0f);//順時針旋轉(zhuǎn)30度

g.FillEllipse(newSolidBrush(Color.FromArgb(80,Color.Blue)), 120,30,200,100);

//水平方向向右平移200個像素,垂直方向向上平移100個像素

g.TranslateTransform(200.0f,-100.0f); g.FillEllipse(newSolidBrush(Color.FromArgb(50,Color.Green)),120,30,200,100); g.ScaleTransform(0.5f,0.5f);//縮小到一半

g.FillEllipse(new SolidBrush(Color.FromArgb(100,Color.Red)),120,30,200,100);}

第29頁/共57頁第28頁/共57頁第30頁/共57頁第29頁/共57頁2基本圖形的繪制1.畫點C#采用Point結(jié)構(gòu)和SetPixel()方法完成畫點的功能;其中Point用于圖形設(shè)計,SetPixel()用于圖像處理Point原型:publicstructPoint;使用:publicPointp1=newPoint();每個點結(jié)構(gòu)有x和y兩個屬性,表示橫縱坐標(biāo),如:p1.x=30;p1.y=100;第31頁/共57頁第30頁/共57頁2.畫直線1)DrawLine方法publicvoidDrawLine(Penpen,intx1,inty1,intx2,inty2);或publicvoidDrawLine(Penpen,Pointpt1,Pointpt2);如:Graphicsg=this.CreateGraphics(); Penp1=newPen(Color.Red,2); Pointpt1=newPoint(40,50); Pointpt2=newPoint(220,150); g.DrawLine(p1,10,20,40,50); g.DrawLine(p1,pt1,pt2);2)DrawLines方法publicvoidDrawLines(Penpen,Point[]pts);第32頁/共57頁第31頁/共57頁private

voidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Penpen=newPen(Color.Black,3); Point[]points={newPoint(10,10),

newPoint(10,100),

newPoint(200,50),

newPoint(250,120) }; e.Graphics.DrawLines(pen,points);}效果

第33頁/共57頁第32頁/共57頁3.畫橢圓1)publicvoidDrawEllipse(Penpen,intx,inty,intwidth,intheight)

其中x,y為橢圓外接矩形左上角的坐標(biāo),width定義橢圓的外接矩形的寬度,height定義橢圓外接矩形的高度。2)publicvoidDrawEllipse(Penpen,Rectanglerect)

其中rect為Rectangle結(jié)構(gòu),用于確定橢圓的外接矩形。第34頁/共57頁第33頁/共57頁4.繪制圓弧publicvoidDrawArc(Penpen,intx,inty,intwidth,intheight,intstartAngle,intsweepAngle)

其中x,y為橢圓外接矩形左上角的坐標(biāo),width定義橢圓。startAngle圓弧起點,sweepAngle順時針畫過的角度的外接矩形的寬度,height定義橢圓外接矩形的高度。例:

Graphicsg=this.CreateGraphics();Penpen=newPen(Color.Red,2);g.Clear(this.BackColor);g.DrawArc(pen,0,0,200,300,-60,180);第35頁/共57頁第34頁/共57頁5.DrawPie(扇形)publicvoidDrawPie(Penpen,intx,inty,intwidth,intheight,intstartAngle,intsweepAngle)各參數(shù)意義:例:

Graphicsg=this.CreateGraphics();Penpen=newPen(Color.Red,2);g.Clear(this.BackColor);g.DrawPie(pen,60,60,160,160,160,200);第36頁/共57頁第35頁/共57頁6.畫矩形1)publicvoidDrawRectangle(Penpen,intx,inty,intwidth,intheight)參數(shù)含意:2)publicvoidDrawRectangle(Penpen,Rectanglerect)參數(shù)含意:例:private

voidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Graphicsg=e.Graphics; Penpen=newPen(Color.Black,3); Rectanglerect=newRectangle(30,30,200,100); e.Graphics.DrawRectangle(pen,rect);}第37頁/共57頁第36頁/共57頁3)publicvoidDrawRectangles(Penpen,Rectangle[]rects)該方法用于繪制多個矩形。例:private

voidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ Graphicsg=e.Graphics; Penpen=newPen(Color.Black,3); Rectangle[]rects={

newRectangle(0,0,100,200),

newRectangle(100,200,250,50),

newRectangle(300,0,50,100) }; e.Graphics.DrawRectangles(pen,rects);}

第38頁/共57頁第37頁/共57頁7.Bezier每段貝塞爾曲線都需要四個點,第一個點是起始點,第四個點是終止點,第二個點和第三個點控制曲線的形狀。使用DrawBezier()方法繪制一段貝塞爾曲線,使用DrawBeziers()方法繪制多段貝塞爾曲線。常用形式有:1)publicvoidDrawBezier(Penpen,floatx1,floaty1,floatx2,floaty2,floatx3,floaty3,floatx4,floaty4)2)publicvoidDrawBezier(Penpen,Pointpt1,Pointpt2,Pointpt3,Pointpt4)3)publicvoidDrawBeziers(Penpen,Point[]points)

其中points是Point結(jié)構(gòu)的數(shù)組,第一段貝塞爾曲線從點數(shù)組中的第一個點到第四個點繪制而成。以后每段曲線只需要三個點:兩個控制點和一個結(jié)束點。前一段曲線的結(jié)束點會自動用作后一段曲線的起始點。

第39頁/共57頁第38頁/共57頁例:private

voidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse) { PenblackPen=newPen(Color.Black,3); Point[]bezierPoints= { newPoint(50,100),

newPoint(100,10),

newPoint(150,290),

newPoint(200,100),

newPoint(250,10),

newPoint(300,290),

newPoint(350,100) }; e.Graphics.DrawBeziers(blackPen,bezierPoints); }

第40頁/共57頁第39頁/共57頁8.DrawPolygon(多邊形)publicvoidDrawPolygon(Penpen,Point[]points);publicvoidDrawPolygon(Penpen,PointF[]points);其中:PointF表示在二維平面中定義點的、浮點x和y坐標(biāo)的有序?qū)?畫一個四邊形privatevoidbutton_Click(objectsender,System.EventArgse){Graphicsg=this.CreateGraphics();Penpen=newPen(Color.Red,2);g.Clear(this.BackColor);Point[]p1=newPoint[]{newPoint(10,120),newPoint(120,100),newPoint(300,180),newPoint(60,200)};g.DrawPolygon(pen,p1);}第41頁/共57頁第40頁/共57頁9.DrawClosedCurve方法這個方法用平滑的曲線將各節(jié)點連接起來,但會自動把首尾節(jié)點連接起來構(gòu)成封閉曲線。publicvoidDrawClosedCurve(Penpen,Point[]pts);publicvoidDrawClosedCurve(Penpen,PointF[]pts);publicvoidDrawClosedCurve(Pen,Point[],float,FillMode);publicvoidDrawClosedCurve(Pen,PointF[],float,FillMode);

其中float型參數(shù)指定彎曲強(qiáng)度,該值范圍為0.0f~1.0f,超出此范圍會產(chǎn)生異常,當(dāng)彎曲強(qiáng)度為零時,就是直線,默認(rèn)張力為0.5。例:PenblackPen=newPen(Color.Black);Point[]p1=newPoint[]{ newPoint(10,120),newPoint(120,100),newPoint(300,180),newPoint(60,200) };g.DrawClosedCurve(blackPen,p1);第42頁/共57頁第41頁/共57頁10.DrawCurve方法(以四個點畫出一條基本曲線)繪制經(jīng)過一組指定的Point結(jié)構(gòu)數(shù)組定義的曲線,最后一個點與第一個點間不畫線。publicvoidDrawCurve(Penpen,Point[]pts);publicvoidDrawCurve(Penpen,PointF[]pts);publicvoidDrawCurve(Pen,Point[],float);publicvoidDrawCurve(Pen,PointF[],float);其中float參數(shù)代表曲線彎曲的強(qiáng)度。例:privatevoidbutton_Click(objectsender,System.EventArgse){Graphicsg=this.CreateGraphics();g.Clear(this.BackColor);PenblackPen=newPen(Color.Black,3);Point[]p1=newPoint[]{newPoint(10,120),newPoint(120,100),newPoint(300,180),newPoint(60,200)};g.DrawCurve(blackPen,p1);}第43頁/共57頁第42頁/共57頁例:繪制直線與平滑曲線private

voidForm1_Paint(objectsender,System.Windows.Forms.PaintEventArgse){ PenredPen=newPen(Color.Red,3); PengreenPen=newPen(Color.Green,3); Point[]curvePoints= {

newPoint(50,250),

newPoint(100,25),

newPoint(200,250),

newPoint(250,50),

newPoint(300,75),

newPoint(350,200),

newPoint(400,150) }; e.Graphics.DrawLines(redPen,curvePoints); e.Graphics.DrawCurve(greenPen,curvePoints);}

第44頁/共57頁第43頁/共57頁11.DrawPath方法路徑通過組合直線、矩形和簡單的曲線形成的,可通過Graphics類的DrawPath方法來繪制整個路徑的各個對象。publicvoidDrawPath(Penpen,GraphicsPathpath);例:privatevoidbutton_Click(objectsender,System.EventArgse){ Graphicsg=this.CreateGraphics(); GraphicsPathgraphPath=newGraphicsPath(); graphPath.AddEllipse(0,0,200,100); graphPath.AddRectangle(newRectangle(100,80,200,100)); graphPath.AddBezier(30,60,70,60,50,30,100,10); PenblackPen=newPen(Color.Black,3); g.DrawPath(blackPen,graphPath);}第45頁/共57頁第44頁/共57頁12.FillEllipse該方法用于畫一個填充橢圓,常用格式有:publicvoidFillEllipse(Brushbrush,intx,inty,intwidth,intheight);publicvoidFillEllipse(Brushbrush,RectangleFrect);參數(shù)意義:例:privatevoidbutton_Click(objectsender,System.EventArgse){ Graphicsg=this.CreateGraphics(); g.Clear(this.BackColor); Brushsp=newSolidBrush(Color.Red); g.FillEllipse(sp,80,90,200,100);}第46頁/共57頁第45頁/共57頁13.FillRectangle該方法用于畫一個填充矩形,常用格式有:publicvoidFillRectangle(Brushbrush,intx,inty,intwidth,intheight);2)publicvoidFillRectangle(Brushbrush,Rectanglerect);參數(shù)意義:例:privatevoidbutton_Click(objectsender,System.EventArgse){ Graphicsg=this.CreateGraphics(); g.Clear(this.BackColor); Brushsp=newSolidBrush(Color.Red); g.FillRectangle(sp,80,90,200,100);}第47頁/共57頁第46頁/共57頁14.FillPie該方法用于畫一個填充餅圖,常用格式有:publicvoidFillPie(Brushbrush,intx,inty,intwidth,intheight,intstartAngle,intsweepAngle);2)publicvoidFillPie(Brushbrush,RectangleFrect,floatstartAngle,floatsweepAngle);參數(shù)意義:例:privatevoidbutton_Click(objectsender,System.EventArgse){ Graphicsg=this.CreateGraphics(); g.Clear(this.BackColor); Brushsp=newSolidBrush(Color.Red); g.FillPie(sp,80,90,200,100,-60,300);}第48頁/共57頁第47頁/共57頁3實用圖形程序設(shè)計3.1設(shè)計內(nèi)容--簡單繪圖板

設(shè)計一個簡單繪圖板,功能類似Windows畫圖工具。功能有:

能由鼠標(biāo)控制繪制直線、矩形、橢圓,曲線,并能控制線條的顏色。

第49頁/共57頁第48頁/共57頁3.2設(shè)計過程3.2.1程序界面設(shè)計在Form中拖入pictureBox和button控件,并進(jìn)行合理布局。3.2.2繪制直線A.直接繪制直線在“直線”按鈕Click事件中輸入代碼:

Pointp1=newPoint(10,10); Pointp2=newPoint(50,50); Graphicsg=this.pictureBox1.CreateGraphics(); Penpen=newPen(Color.Black,1); g.DrawLine(pen,p1,p2);第50頁/共57頁第49頁/共57頁B.鼠標(biāo)控制繪制直線

1.“直線”起點坐標(biāo)獲取:在控件pictureBox1中按下鼠標(biāo)左鍵獲取起點p1(X,Y),在pictureBox1_MouseDown事件中輸入代碼:

Pointp1=Point.Empty, p2=Point.Empty; p1.X=e.X; p1.Y=e.Y; p2.X=100; p2.Y=100; Graphicsg=this.pictureBox1.CreateGraphics(); Penpen=newPen(Color.Black,1); g.DrawLine(pen,p1,p2);第51頁/共57頁第50頁/共57頁2.“直線”終點坐標(biāo)獲?。涸诳丶ictureBox1中松開鼠標(biāo)左鍵獲取終點p2(X,Y),在pictureBox1_MouseUp事件中輸入代碼:

Pointp1=Point.Empty, p2=Point.Empty; p1.X=100; p1.Y

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論