《-圖形圖像程序設(shè)計課件》由會員分享,可在線閱讀,更多相關(guān)《-圖形圖像程序設(shè)計課件(42頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、單擊此處編輯母版標(biāo)題樣式,編輯母版文本樣式,第二級,第三級,第四級,第五級,*,*,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,*,大家好,1,2,第,18,章 圖形圖像程序設(shè)計,本章將主要介紹,C#,中圖形、圖像繪制及處理的基本知識和技巧,使讀者對,C#,中圖形繪制及圖像處理過程有一個大致的了解。,3,章節(jié)內(nèi)容,18.1 GDI+,基礎(chǔ),18.2,基本圖形的繪制,18.3,圖像處理,18.4,小結(jié),4,18.1.1 GDI+,概述,GDI+,(,Graphics Device Interface Plus,,圖形設(shè)備接口)是一組通過,C+,類實現(xiàn)的應(yīng)用
2、程序編程接口,為開發(fā)人員提供了一組與各種設(shè)備進(jìn)行交互的,C+,類。,應(yīng)用程序,GDI+,打印機(jī),顯示器,文件,5,18.1.1 GDI+,概述,GDI+,是微軟推出的新一代二維圖形系統(tǒng),是,Windows XP,和,Windows Server 2003,操作系統(tǒng)自帶的圖形接口。,GDI,是,Windows,操作系統(tǒng)早期版本的圖形接口。與,GDI,相比,,GDI+,的性能更優(yōu)化,并添加了許多新的功能。目前,GDI+,已完全替代,GDI,,是在,Windows,窗口應(yīng)用程序中以編程方式呈現(xiàn)圖形的唯一一方法。,6,18.1.1 GDI+,概述,GDI+,按功能劃分,可分為,3,類:,(,1,)二維
3、矢量圖形繪制:使用,GDI+,繪制矢量線條和形狀。,GDI+,提供了用于存儲矢量圖形信息的類,如,Pen,類,以及存儲矢量圖形繪制信息的類和實際繪制圖形的類,如,Graphics,類。,(,2,)圖像處理:,GDI+,提供了,Bitmap,、,Image,等類用于顯示、操作和保存,BMP,、,JPG,、,GIF,等格式的圖像。,(,3,)文字顯示:使用,GDI+,顯示各種字體、字號和樣式的文本。,7,常用結(jié)構(gòu)體和類,Point,類:,二維表面上的一個點(diǎn),,Point p=new Point(1,1),Size,類:,表示一個尺寸,包含寬度和高度,,Size s=new Size(5,4),,公
4、共屬性,Height,和,Width,可以獲得和設(shè)置,Size,的高度和寬度。,Rectangle,類:兩種構(gòu)造函數(shù),參數(shù)如下,X,坐標(biāo),,y,坐標(biāo),寬度,高度,Point,結(jié)構(gòu)和,Size,結(jié)構(gòu),8,GraphicsPath,類:,表示一系列連接的線條和曲線,在構(gòu)造路徑時,首先使用,AddLine,或,AddRectangle,等方法添加線條、曲線、矩形等,然后使用,Graphics,對象的,DrawPath,方法繪制路徑或調(diào)用,FillPath,方法填充路徑。(例,18-1,),Color,類:,使用系統(tǒng)預(yù)定義顏色,,Color myColor=Color.Red;,使用,FromArgb
5、,方法指定任意顏色,兩種方法,Color myColor=Color.FromArgb(255,0,0);,Color myColor=Color.FromArgb(255,0,0,1);,9,18.1.2 Graphics,類,Graphics,類是所有繪圖的基礎(chǔ),繪圖之前都需要先創(chuàng)建,Graphics,對象,相當(dāng)于在窗體中創(chuàng)建了一塊畫布,然后使用,GDI+,繪制線條和形狀、呈現(xiàn)文本或顯示與操作圖像。,1,創(chuàng)建,Graphics,對象,,3,種方法:,(,1,)利用窗體或控件的,Paint,事件中的,PaintEventArgs,方法:為窗體或控件編寫,Paint,事件時,,Graphics
6、,對象可以通過,Paint,事件中的,PaintEventArgs,方法來獲取。,private void Form1_Paint(object,sender,System.Windows.Forms.PaintEventArgs e),Graphics,g=e.Graphics;,10,18.1.2 Graphics,類,(,2,)利用窗體或某個控件的,CreateGraphics,方法:當(dāng)要在某窗體或控件上顯示圖形時,可利用某窗體或控件的,CreateGraphics,方法,獲取對,Graphics,對象的引用。,Graphics,g=this.CreateGraphics();,Grap
7、hics,g1=button1.CreateGraphics();,/,其中,,this,代表某窗體,,button1,代表,Button,按鈕控件。,(,3,)由,Image,類派生的任意對象創(chuàng)建圖形對象:當(dāng)需要更改某個已經(jīng)存在的圖像時,可利用,Image,類派生的任意對象創(chuàng)建圖形對象。,Graphics,對象。,Bitmap,mybitmap=new Bitmap(1.jpg);,Graphics g=Graphics.FromImage(mybitmap);,注意,,Graphics,對象使用完后,應(yīng)當(dāng)及時釋放掉,否則會占用內(nèi)存資源。,g.Dispose(),11,18.1.2 Grap
8、hics,類,2,Graphics,對象的方法,方法,說明,Clear,清除整個繪圖面并以指定背景色填充,DrawArc,繪制一段弧線,它表示由一對坐標(biāo)、寬度和高度指定的橢圓部分,DrawEllipse,繪制一個由邊框定義的橢圓,DrawIcon,在指定坐標(biāo)處繪制由指定的,Icon,對象表示的圖像,DrawIconUnstretched,繪制指定的,Icon,對象表示的圖像,而不縮放該圖像,DrawImage,在指定位置并且按原始大小繪制指定的,Image,對象,DrawImageUnscaled,在坐標(biāo)對所指定的位置并且按其原始大小繪制指定的,Image,對象,DrawLine,繪制一條連接
9、由坐標(biāo)對指定的兩個點(diǎn)的線段,12,DrawLines,繪制一系列連接一組,Point,結(jié)構(gòu)的線段,DrawPie,繪制一個扇形,DrawPolygon,繪制由一組,Point,結(jié)構(gòu)定義的多邊形,DrawRectangle,繪制由坐標(biāo)對、寬度和高度指定的矩形,DrawRectangles,繪制一系列由,Rectangle,結(jié)構(gòu)指定的矩形,DrawString,在指定位置繪制指定的文本字符串,FillEllipse,填充邊框所定義的橢圓的內(nèi)部,FillPie,填充指定的橢圓所定義的扇形區(qū)的內(nèi)部,FillPolygon,填充,Point,結(jié)構(gòu)指定的點(diǎn)數(shù)組所定義的多邊形的內(nèi)部,FillRectangl
10、e,填充由一對坐標(biāo)、一個寬度和一個高度指定的矩形的內(nèi)部,FillPath,填充,GraphicsPath,的內(nèi)部,18.1.2 Graphics,類,13,下列代碼演示,Graphics,對象的應(yīng)用,private void Form1_Paint(object sender,PaintEventArgs e),Graphics g=e.Graphics;,g.Clear(Color.FromArgb(244,23,34);,g.Dispose();,private void button1_Click(object sender,EventArgs e),Graphics a=button1
11、.CreateGraphics();,a.Clear(Color.Red);,g.Dispose();,例:,18-1-2,18.1.2 Graphics,類,14,18.1.3,畫筆對象的使用,Graphics,類對象相當(dāng)于畫布,而畫筆就相當(dāng)于繪圖的筆,常用,Pen,類來創(chuàng)建畫筆對象繪制線、圖形邊緣,,Brush,類來填充圖形或一個封閉區(qū)域。,Pen,類的常用屬性為寬度、顏色和樣式。寬度屬性用于確定線條的寬度,以像素為單位;顏色屬性用于確定線條的顏色;樣式屬性用于確定所繪制線條的線型,通常有實線(,Solid,)、虛線(,Dash,)、點(diǎn)線(,Dot,)、點(diǎn)劃線(,DashDot,)、雙點(diǎn)劃
12、線(,DashDotDot,)等。另外,在,C#,中還可以通過屬性設(shè)置畫筆起點(diǎn)和終點(diǎn)的樣式,通常在起點(diǎn)或終點(diǎn)加上箭頭。,15,18.1.3,畫筆對象的使用,1,創(chuàng)建畫筆對象,常用的,Pen,類構(gòu)造函數(shù)為:,public Pen(Color color),public Pen(Color color,,,float width),例如:,Pen p=new Pen(Color.Red);,注意,,Pen,對象使用完畢后,應(yīng)當(dāng)被及時釋放掉,否則會占據(jù)內(nèi)存資源。,16,18.1.3,畫筆對象的使用,2,畫筆對象的屬性,。,可通過設(shè)置畫筆的屬性值來使用畫筆。,名稱,說明,Color,設(shè)置畫筆對象的顏色
13、,Width,設(shè)置畫筆的寬度,EndCap,獲取畫筆繪制的直線終點(diǎn)的樣式,StartCap,設(shè)置畫筆繪制的直線起點(diǎn)的樣式,DashStyle,設(shè)置畫筆繪制的虛線的線型,17,18.1.3,畫筆對象的使用,下列代碼演示,Pen,對象的應(yīng)用。,Graphics a=this.CreateGraphics();,a.Clear(Color.Red);,Pen p=new Pen(Color.Blue,5);,p.DashStyle=DashStyle.DashDot;,p.EndCap=LineCap.ArrowAnchor;,a.DrawLine(p,10,30,200,30);,p.Dispos
14、e();,a.Dispose();,例:,18-1-3,18,18.1.4,畫刷對象的使用,畫刷的功能與刷子類似,用于填充圖形的內(nèi)部。,C#,中代表畫刷的類是,Brush,類,該類為抽象類,它不能被實例化。若要創(chuàng)建一個畫刷對象,必須使用從,Brush,派生出的類來創(chuàng)建畫刷對象。常用畫刷派生類如下,:,SolidBrush,類:單色畫刷。,HatchBrush,類:陰影畫刷。,TextureBrush,類:紋理(圖像)畫刷。,GradientBrush,類:漸變畫刷。,注意,,Brush,對象使用完后,應(yīng)當(dāng)及時釋放掉,否則會占用內(nèi)存資源。,19,單色畫刷,功能:向某一特定區(qū)域內(nèi)填充指定的顏色,構(gòu)
15、造函數(shù),Public SolidBrush(Color.Color);,例如:,18-1-4,20,陰影畫刷,有兩種顏色(前景色和背景色),以及多種樣式,可通過屬性進(jìn)行設(shè)置。,Public HatchBrush(HatchStyle,Color foreColor),Public HatchBrush(HatchStyle,Color foreColor,Color backColor),foreColor,定義線條的顏色,,backColor,定義區(qū)域背景的顏色。,例:,18-1-5,21,紋理畫刷,使用某種紋理,如圖像,對圖形的紋理進(jìn)行修飾。,Public TextureBrush(Ima
16、ge bitmap);,例:,18-1-6,22,漸變畫刷,用于在某個特定區(qū)域內(nèi)生成漸變效果。,LinearGradientBrush,可以顯示線性漸變效果,PathGradientBrush,為路徑漸變,可以顯示具有彈性的漸變效果。,例:,18-2,23,18.1.5 Bitmap,類,1,創(chuàng)建,Bitmap,對象,Bitmap,類的構(gòu)造函數(shù)有多種重載形式,分別如下。,(,1,)從指定的現(xiàn)有圖像建立,Bitmap,對象。,Bitmap bitmap1=new Bitmap(pictureBox1.Image);,(,2,)從指定的圖像文件建立,Bitmap,對象。,Bitmap bitmap2=new Bitmap(“D:picturepicture.bmp”);,(,3,)從現(xiàn)有的,Bitmap,對象建立新的,Bitmap,對象,例如下列代碼。,Bitmap bitmap3=new Bitmap(bitmap1);,另外,,Bitmap,類相當(dāng)于一個圖形容器,里面裝載的對象即為圖像,因,此在編程時可以把,Bitmap,類的對象看作是一個圖像,.,pictureBox1.Image=