




已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
C#圖形圖象程序設(shè)計,西源軟件培訓(xùn)中心,目標(biāo),掌握GDI+繪制圖形基礎(chǔ) 掌握GDI+提供的庫函數(shù),GDI+繪圖基礎(chǔ),圖形設(shè)備接口 GDI+:Graphics Device Interface Plus,它提供了各種豐富的圖形圖像處理功能 在C#.NET中,使用GDI+處理二維(2D)的圖形和圖像,使用DirectX處理三維(3D)的圖形圖像 GDI+主要有二維矢量圖形、圖像處理和版式三部分組成 GDI+提供了存儲基元自身相關(guān)信息的類和結(jié)構(gòu)、存儲基元繪制方式相關(guān)信息的類,以及實際進(jìn)行繪制的類 GDI+ 為使用各種字體、字號和樣式來顯示文本這種復(fù)雜任務(wù)提供了大量的支持 其他高級功能,圖形圖像處理中常常調(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+ 字體和文本排版功能,GDI+繪圖基礎(chǔ),創(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)建繪 制代碼時,一般使用此方法來獲取對圖形對象的引用: Private void Form_Paint(object sender, System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics; ,GDI+繪圖基礎(chǔ),2.利用窗體或某個控件的CreateGraphics方法 此方法所建對象是該控件或窗體的繪圖區(qū)域,可把當(dāng)前窗體的畫刷、字體、顏色作為缺省值獲取對Graphics對象的引用, 注意這種對象只有在處理當(dāng)前Windows窗口消息的過程中有效;如果想在已存在的窗體或控件上繪圖,可以使用此方法。 例如: Graphics g=this.CreatGraphics();,3.從繼承自圖像的任何對象創(chuàng)建Graphics對象 此方法在需要更改已存在的圖像時十分有用,例如: Bitmap bitmap = new Bitmap(”C:testa1.bmp”); Graphics g = Graphics.FromImage( bitmap );,GDI+繪圖基礎(chǔ),在圖形圖像處理程序設(shè)計中,與Graphics對象一起使用的用戶對象常有: Pen:用于繪制線條、勾勒形狀輪廓等; Brush:用于填充圖形區(qū)域; Font:提供有關(guān)在呈現(xiàn)文本時要使用什么形狀的說明; Color:該結(jié)構(gòu)表示要顯示的不同顏色 注意:由于圖像對象非常占資源,所以在不用這些對象時要用Dispose方法及時釋放資源,GDI+繪圖基礎(chǔ),附: 顏色 顏色是進(jìn)行圖形操作的基本要素。任何一種顏色都可以由四個分量決定,每個分量占據(jù)一個字節(jié): R:紅色,取值范圍0255,255為飽和紅色 G:綠色,取值范圍0255,255為飽和綠色 B:藍(lán)色,取值范圍0255,255為飽和藍(lán)色 A:Alpha值,即透明度。取值范圍0255,0為完全透明,255為完全不透明 在System.Drawing名稱空間下,有一個Color結(jié)構(gòu)類型,包含系統(tǒng)已定義的顏色種類。 可以使用下列方法創(chuàng)建顏色對象: 使用FromArgb指定任意顏色 這個方法有兩種常用的形式:,GDI+繪圖基礎(chǔ),第一種形式是直接指定三種顏色,方法原型為: public static Color FromArgb( int red, int green, int blue ) 三個參數(shù)分別表示R、G、B三色,Alpha值使用缺省值255,即 完全不透明;例如: Color red = Color.FromArgb( 255, 0, 0); Color green = Color.FromArgb( 0, 255, 0); Color blue = Color.FromArgb( 0, 0, 0xff); 其中,0xff為十六進(jìn)制表示形式。 第二種形式使用四個參數(shù),格式為: public static Color FromArgb( int alpha, int red, int green, int blue ) 四個參數(shù)分別表示透明度和 R、G、B三色值。,GDI+繪圖基礎(chǔ),使用系統(tǒng)預(yù)定義顏色 在Color結(jié)構(gòu)中已經(jīng)預(yù)定義了141種顏色,可以直接使 用,例如: Color myColor; myColor = Color.Red; myColor = Color.Aquamarine; myColor = Color.LightGoldenrodYellow;,GDI+繪圖基礎(chǔ),用Pen類創(chuàng)建畫筆對象,畫筆通常具有寬度、樣式和顏色三種屬性。 1.Pen對象的創(chuàng)建: public Pen( Color color ); public Pen( Color color, float width ); public Pen( Brush brush ); public Pen( Brush brush, float width ); 如: Pen myPen = new Pen( Color.Black ); Pen myPen = new Pen( Color.Black, 5 ); SolidBrush myBrush = new SolidBrush( Color.Red ); Pen myPen = new Pen( myBrush); Pen myPen = new Pen( myBrush, 5 );,畫筆對象,2.Pen對象的屬性: 畫筆對象的屬性用于返回或設(shè)置畫筆對象的顏色、畫線樣式、畫線始點及終點的樣式等。常用屬性如下: Color: DashCap: DashStyle: EndCap: PenType: StartCap: Width:,畫筆對象,1) 新建一個Windows應(yīng)用程序,適當(dāng)加寬窗體寬度。然后切換到代碼方式,添加名稱空間引用: using System.Drawing.Drawing2D; 2) 添加Form1_Paint事件代碼。 private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics; Pen pen = new Pen( Color.Blue, 10.5f ); g.DrawString( “藍(lán)色,寬度為10.5“, this.Font, new SolidBrush(Color.Black), 5, 5 ); g.DrawLine( pen, new Point(110,10), new Point(380,10) ); pen.Width=2; pen.Color=Color.Red; g.DrawString( “紅色,寬度為2“, this.Font, new SolidBrush(Color.Black), 5, 25 );,示例,g.DrawLine( pen, new Point(110,30), new Point(380,30) ); pen.StartCap = LineCap.Flat; pen.EndCap = LineCap.ArrowAnchor; pen.Width = 9; g.DrawString( “紅色箭頭線“, this.Font, new SolidBrush(Color.Black), 5, 45); g.DrawLine( pen,new Point(110,50), new Point(380,50); pen.DashStyle = DashStyle.Custom; pen.DashPattern = new float 4,4; pen.Width = 2; pen.EndCap = LineCap.NoAnchor; g.DrawString( “自定義虛線“, this.Font, new SolidBrush(Color.Black), 5, 65 ); g.DrawLine( pen, new Point(110,70), new Point(380,70) ); pen.DashStyle = DashStyle.Dot; g.DrawString(“點劃線“, this.Font, new SolidBrush(Color.Black), 5, 85); g.DrawLine( pen, new Point(110,90), new Point(380,90); ,示例,運行結(jié)果,畫刷是可與Graphics對象一起使用來創(chuàng)建實心形狀和呈現(xiàn)文本的對象??梢杂卯嬎⑻畛涓鞣N圖形形狀,如矩形、橢圓、扇形、多邊形和封閉路徑等。 幾種不同類型的畫刷: SolidBrush:畫刷最簡單的形式,用純色進(jìn)行繪制 HatchBrush:類似于 SolidBrush,但是可以利用該類從大量預(yù)設(shè)的圖案中選擇繪制時要使用的圖案,而不是純色 TextureBrush:使用紋理(如圖像)進(jìn)行繪制 LinearGradientBrush:使用沿漸變混合的兩種顏色進(jìn)行繪制 PathGradientBrush :基于編程者定義的唯一路徑,使用復(fù)雜的混合色漸變進(jìn)行繪制,畫刷對象,(1)使用SolidBrush類定義單色畫筆 SolidBrush類用于定義單色畫筆。該類只有一個構(gòu)造函 數(shù),帶有一個Color類型的參數(shù)。 下面的示例說明如何在窗體上繪制一個純紅色的橢圓。 該橢圓將符合為其提供的矩形的大?。ù死袨楸硎菊麄€ 窗體的ClientRectangle)。 例: private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics; SolidBrush myBrush = new SolidBrush( Color.Red ); g.FillEllipse( myBrush, this.ClientRectangle ); ,畫刷對象,運行效果,(2)使用HatchBrush類繪制簡單圖案 HatchBrush類用于從大量預(yù)設(shè)的圖案中選擇繪制時要使用 的圖案,而不是純色。 下面的示例說明如何創(chuàng)建一個HatchBrush,它使用90%的 陰影,前景色與背景色的比例為90:100,并使用白色作為前 景色,黑色作為背景色。 例: private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics; HatchBrush aHatchBrush = new HatchBrush( HatchStyle.Percent90, Color.White, Color.Black); g.FillEllipse( aHatchBrush, this.ClientRectangle ); ,繪制簡單圖案,運行效果,3)使用TextureBrush類繪制復(fù)雜圖案 TextureBrush類允許使用一幅圖像作為填充的樣式。該類 提供了5個重載的構(gòu)造函數(shù),分別是: Public TextureBrush( Image ) Public TextureBrush( Image, Rectangle ) Public TextureBrush( Image, WrapMode ) Public TextureBrush( Image, Rectangle, ImageAttributes) Public TextureBrush( Image, WrapMode, Rectangle) 其中:Image:用于指定畫筆的填充圖案。 Rectangle: 用于指定圖像上用于畫筆的矩形區(qū)域,其位置不能超越圖像的范圍。 WrapMode: WrapMode枚舉成員用于指定如何排布圖像,可以是 Clamp: 完全由繪制對象的邊框決定 Tile: 平鋪 TileFlipX: 水平方向翻轉(zhuǎn)并平鋪圖像 TileFlipY: 垂直方向翻轉(zhuǎn)并平鋪圖像 TileFlipXY: 水平和垂直方向翻轉(zhuǎn)并平鋪圖像,繪制復(fù)雜圖案,ImageAttributes:用于指定圖像的附加特性參數(shù)。 TextureBrush類有三個屬性: Image:Image類型,與畫筆關(guān)聯(lián)的圖像對象。 Transform:Matrix類型,畫筆的變換矩陣。 WrapMode:WrapMode枚舉成員,指定圖像的排布方式。 下面的示例說明了如何創(chuàng)建一個TextureBrush,例子使 用名為m23.jpg的圖像進(jìn)行繪制。 例: private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics; TextureBrush myBrush = new TextureBrush(new Bitmap(“e:testm23.jpg“); g.FillEllipse( myBrush, this.ClientRectangle ); ,繪制復(fù)雜圖案,運行效果,(4) LinearGradientBrush這個類用于定義線性漸變畫筆,可以是雙色漸變,也可以是多色漸變。缺省情況下,漸變由起始顏色沿著水平方向平均過渡到終止顏色。要定義多色漸變,需要使用 InterpolationColors屬性。下面的示例說明如何由白色漸變到藍(lán)色。 例: private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics; LinearGradientBrush myBrush = new LinearGradientBrush( this.ClientRectangle, Color.White, Color.Blue, LinearGradientMode.Vertical ); g.FillRectangle( myBrush, this.ClientRectangle ); ,LinearGradientBrush類定義線性漸變,如果創(chuàng)建應(yīng)用程序后向設(shè)計窗體上拖放一些控件,可以看到運行后該圖就是一個漂亮的背景了。,LinearGradientBrush類定義線性漸變,在GDI+中,把一個或多個圖形組成的形體稱作路徑??梢?使用GraphicsPath類定義路徑,使用PathGradientBrush類定 義路徑內(nèi)部的漸變色畫筆。漸變色從路徑內(nèi)部的中心點逐漸過 渡到路徑的外邊界邊緣。 PathGradientBrush類有三種形式的構(gòu)造函數(shù),形式之一是: public PathGradientBrush( GraphicsPath path ) 其中,GraphicsPath定義畫筆填充的區(qū)域。 例,路徑和路徑畫筆的使用: using System.Drawing.Drawing2D; ,PathGradientBrush類實現(xiàn)彩色漸變,private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) Graphics g = e.Graphics; Point centerPoint = new Point(150,100); int R=60; GraphicsPath path=new GraphicsPath(); path.AddEllipse(centerPoint.X-R,centerPoint.Y-R,2*R,2*R); PathGradientBrush brush=new PathGradientBrush(path); /指定路徑中心點 brush.CenterPoint=centerPoint; /指定路徑中心點的顏色 brush.CenterColor=Color.Red; /Color類型的數(shù)組指定與路徑上每個頂點對應(yīng)的顏色 brush.SurroundColors=new Color Color.Plum ;,PathGradientBrush類實現(xiàn)彩色漸變,g.FillEllipse(brush,centerPoint.X-R,centerPoint.Y-R,2*R,2*R); centerPoint=new Point(350,100); R=20; path=new GraphicsPath(); 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=new PathGradientBrush(path); brush.CenterPoint=centerPoint; brush.CenterColor=Color.Red; brush.SurroundColors=new Color Color.Black,Color.Blue,Color.Green ; g.FillPath(brush,path); ,PathGradientBrush類實現(xiàn)彩色漸變,在這個例子中,可以看到當(dāng)使用FillPath()方法填充路徑的時候,如果多個圖形互相重疊,則重疊部分的數(shù)目為偶數(shù)時不會被填充,因此右圖中間部分仍為背景色而不是藍(lán)色。,PathGradientBrush類實現(xiàn)彩色漸變,Graphics類提供了三種對圖像進(jìn)行幾何變換的方法,它們 是TranslateTransform()方法、RotateTransform()方法和 ScaleTransform()方法,分別用于圖形圖像的平移、旋轉(zhuǎn)和 縮放(以坐標(biāo)系原點為中心)。 TranslateTransform( )方法的形式為: public void TranslateTransform(float dx,float dy) 其中,dx表示平移的x分量,dy表示平移的y分量; Rotate
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中小學(xué)教師試題及答案
- 中外戲劇試題及答案詳解
- 中醫(yī)期末試題及答案
- 浙江省杭州市西湖高中2025年生物高二下期末質(zhì)量檢測模擬試題含解析
- 餐飲行業(yè)知識產(chǎn)權(quán)保護(hù)合同
- 車輛抵押擔(dān)保汽車俱樂部會員合同范本
- 環(huán)保節(jié)能型汽車合伙經(jīng)營合同書
- 車間租賃合同模板及安全措施
- 宿舍租賃合同(17篇)
- 2025交流工作總結(jié)(17篇)
- 市政工程質(zhì)量通病與防治
- 魔方社團(tuán)精彩活動記錄簿 副本
- 配電項目工程重點、難點及解決措施
- JJG 966-2010手持式激光測距儀
- GB/T 21558-2008建筑絕熱用硬質(zhì)聚氨酯泡沫塑料
- GB/T 18494.1-2014變流變壓器第1部分:工業(yè)用變流變壓器
- 醫(yī)師多機(jī)構(gòu)備案申請審核表
- 中青班結(jié)業(yè)論文
- 天津科技大學(xué) 分子生物學(xué) 名詞解釋
- 宏觀經(jīng)濟(jì)學(xué)模擬試卷
- 工程設(shè)計重點難點分析及應(yīng)對措施
評論
0/150
提交評論