《-圖形圖像程序設(shè)計(jì)課件》由會(huì)員分享,可在線閱讀,更多相關(guān)《-圖形圖像程序設(shè)計(jì)課件(42頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、單擊此處編輯母版標(biāo)題樣式,編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),*,*,單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),*,大家好,1,2,第,18,章 圖形圖像程序設(shè)計(jì),本章將主要介紹,C#,中圖形、圖像繪制及處理的基本知識(shí)和技巧,使讀者對(duì),C#,中圖形繪制及圖像處理過程有一個(gè)大致的了解。,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+,類實(shí)現(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+,提供了用于存儲(chǔ)矢量圖形信息的類,如,Pen,類,以及存儲(chǔ)矢量圖形繪制信息的類和實(shí)際繪制圖形的類,如,Graphics,類。,(,2,)圖像處理:,GDI+,提供了,Bitmap,、,Image,等類用于顯示、操作和保存,BMP,、,JPG,、,GIF,等格式的圖像。,(,3,)文字顯示:使用,GDI+,顯示各種字體、字號(hào)和樣式的文本。,7,常用結(jié)構(gòu)體和類,Point,類:,二維表面上的一個(gè)點(diǎn),,Point p=new Point(1,1),Size,類:,表示一個(gè)尺寸,包含寬度和高度,,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)造路徑時(shí),首先使用,AddLine,或,AddRectangle,等方法添加線條、曲線、矩形等,然后使用,Graphics,對(duì)象的,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,對(duì)象,相當(dāng)于在窗體中創(chuàng)建了一塊畫布,然后使用,GDI+,繪制線條和形狀、呈現(xiàn)文本或顯示與操作圖像。,1,創(chuàng)建,Graphics,對(duì)象,,3,種方法:,(,1,)利用窗體或控件的,Paint,事件中的,PaintEventArgs,方法:為窗體或控件編寫,Paint,事件時(shí),,Graphics
6、,對(duì)象可以通過,Paint,事件中的,PaintEventArgs,方法來獲取。,private void Form1_Paint(object,sender,System.Windows.Forms.PaintEventArgs e),Graphics,g=e.Graphics;,10,18.1.2 Graphics,類,(,2,)利用窗體或某個(gè)控件的,CreateGraphics,方法:當(dāng)要在某窗體或控件上顯示圖形時(shí),可利用某窗體或控件的,CreateGraphics,方法,獲取對(duì),Graphics,對(duì)象的引用。,Graphics,g=this.CreateGraphics();,Grap
7、hics,g1=button1.CreateGraphics();,/,其中,,this,代表某窗體,,button1,代表,Button,按鈕控件。,(,3,)由,Image,類派生的任意對(duì)象創(chuàng)建圖形對(duì)象:當(dāng)需要更改某個(gè)已經(jīng)存在的圖像時(shí),可利用,Image,類派生的任意對(duì)象創(chuàng)建圖形對(duì)象。,Graphics,對(duì)象。,Bitmap,mybitmap=new Bitmap(1.jpg);,Graphics g=Graphics.FromImage(mybitmap);,注意,,Graphics,對(duì)象使用完后,應(yīng)當(dāng)及時(shí)釋放掉,否則會(huì)占用內(nèi)存資源。,g.Dispose(),11,18.1.2 Grap
8、hics,類,2,Graphics,對(duì)象的方法,方法,說明,Clear,清除整個(gè)繪圖面并以指定背景色填充,DrawArc,繪制一段弧線,它表示由一對(duì)坐標(biāo)、寬度和高度指定的橢圓部分,DrawEllipse,繪制一個(gè)由邊框定義的橢圓,DrawIcon,在指定坐標(biāo)處繪制由指定的,Icon,對(duì)象表示的圖像,DrawIconUnstretched,繪制指定的,Icon,對(duì)象表示的圖像,而不縮放該圖像,DrawImage,在指定位置并且按原始大小繪制指定的,Image,對(duì)象,DrawImageUnscaled,在坐標(biāo)對(duì)所指定的位置并且按其原始大小繪制指定的,Image,對(duì)象,DrawLine,繪制一條連接
9、由坐標(biāo)對(duì)指定的兩個(gè)點(diǎn)的線段,12,DrawLines,繪制一系列連接一組,Point,結(jié)構(gòu)的線段,DrawPie,繪制一個(gè)扇形,DrawPolygon,繪制由一組,Point,結(jié)構(gòu)定義的多邊形,DrawRectangle,繪制由坐標(biāo)對(duì)、寬度和高度指定的矩形,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,填充由一對(duì)坐標(biāo)、一個(gè)寬度和一個(gè)高度指定的矩形的內(nèi)部,FillPath,填充,GraphicsPath,的內(nèi)部,18.1.2 Graphics,類,13,下列代碼演示,Graphics,對(duì)象的應(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,畫筆對(duì)象的使用,Graphics,類對(duì)象相當(dāng)于畫布,而畫筆就相當(dāng)于繪圖的筆,常用,Pen,類來創(chuàng)建畫筆對(duì)象繪制線、圖形邊緣,,Brush,類來填充圖形或一個(gè)封閉區(qū)域。,Pen,類的常用屬性為寬度、顏色和樣式。寬度屬性用于確定線條的寬度,以像素為單位;顏色屬性用于確定線條的顏色;樣式屬性用于確定所繪制線條的線型,通常有實(shí)線(,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,畫筆對(duì)象的使用,1,創(chuàng)建畫筆對(duì)象,常用的,Pen,類構(gòu)造函數(shù)為:,public Pen(Color color),public Pen(Color color,,,float width),例如:,Pen p=new Pen(Color.Red);,注意,,Pen,對(duì)象使用完畢后,應(yīng)當(dāng)被及時(shí)釋放掉,否則會(huì)占據(jù)內(nèi)存資源。,16,18.1.3,畫筆對(duì)象的使用,2,畫筆對(duì)象的屬性,。,可通過設(shè)置畫筆的屬性值來使用畫筆。,名稱,說明,Color,設(shè)置畫筆對(duì)象的顏色
13、,Width,設(shè)置畫筆的寬度,EndCap,獲取畫筆繪制的直線終點(diǎn)的樣式,StartCap,設(shè)置畫筆繪制的直線起點(diǎn)的樣式,DashStyle,設(shè)置畫筆繪制的虛線的線型,17,18.1.3,畫筆對(duì)象的使用,下列代碼演示,Pen,對(duì)象的應(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,畫刷對(duì)象的使用,畫刷的功能與刷子類似,用于填充圖形的內(nèi)部。,C#,中代表畫刷的類是,Brush,類,該類為抽象類,它不能被實(shí)例化。若要?jiǎng)?chuàng)建一個(gè)畫刷對(duì)象,必須使用從,Brush,派生出的類來創(chuàng)建畫刷對(duì)象。常用畫刷派生類如下,:,SolidBrush,類:單色畫刷。,HatchBrush,類:陰影畫刷。,TextureBrush,類:紋理(圖像)畫刷。,GradientBrush,類:漸變畫刷。,注意,,Brush,對(duì)象使用完后,應(yīng)當(dāng)及時(shí)釋放掉,否則會(huì)占用內(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,紋理畫刷,使用某種紋理,如圖像,對(duì)圖形的紋理進(jìn)行修飾。,Public TextureBrush(Ima
16、ge bitmap);,例:,18-1-6,22,漸變畫刷,用于在某個(gè)特定區(qū)域內(nèi)生成漸變效果。,LinearGradientBrush,可以顯示線性漸變效果,PathGradientBrush,為路徑漸變,可以顯示具有彈性的漸變效果。,例:,18-2,23,18.1.5 Bitmap,類,1,創(chuàng)建,Bitmap,對(duì)象,Bitmap,類的構(gòu)造函數(shù)有多種重載形式,分別如下。,(,1,)從指定的現(xiàn)有圖像建立,Bitmap,對(duì)象。,Bitmap bitmap1=new Bitmap(pictureBox1.Image);,(,2,)從指定的圖像文件建立,Bitmap,對(duì)象。,Bitmap bitmap2=new Bitmap(“D:picturepicture.bmp”);,(,3,)從現(xiàn)有的,Bitmap,對(duì)象建立新的,Bitmap,對(duì)象,例如下列代碼。,Bitmap bitmap3=new Bitmap(bitmap1);,另外,,Bitmap,類相當(dāng)于一個(gè)圖形容器,里面裝載的對(duì)象即為圖像,因,此在編程時(shí)可以把,Bitmap,類的對(duì)象看作是一個(gè)圖像,.,pictureBox1.Image=