C#第8章圖形圖像處理.ppt
《C#第8章圖形圖像處理.ppt》由會員分享,可在線閱讀,更多相關(guān)《C#第8章圖形圖像處理.ppt(78頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第8章圖形圖像處理,8.1圖形圖像基礎(chǔ)知識8.2繪制基本圖形8.3填充圖形8.4圖像處理8.5圖形與圖像的平移、旋轉(zhuǎn)與縮放8.6文字處理,本章綜合舉例,1.繪制柱狀圖、餅狀圖等圖形。舉例1:,本章綜合舉例,舉例2:,本章綜合舉例,2.使用鼠標(biāo)繪制圖形舉例:,本章綜合舉例,3.生成校驗碼,本章知識的其他應(yīng)用,4.本章知識的典型應(yīng)用(1)繪制天氣預(yù)報圖(2)繪制財務(wù)軟件中各種類型的圖。(3)某些管理系統(tǒng)中的銷售、庫存等各種統(tǒng)計制圖。例如:某公司近兩年來月收支結(jié)余走勢圖(單位:萬元),8.1圖形圖像繪制基礎(chǔ)知識,GDI+簡介?GDI+:GraphicsDeviceInterface(圖形設(shè)備接口),它提供了高級圖形圖像處理功能。從程序設(shè)計的角度看,GDI包括兩部分:一部分是GDI對象,另一部分是GDI函數(shù)。GDI對象定義了GDI函數(shù)使用的工具和環(huán)境變量,而GDI函數(shù)使用GDI對象繪制各種圖形。在C#中,進行圖形程序編寫時用到的是GDI+,GDI+是GDI的進一步擴展,它使編程更加方便。GDI+是下一代Windows的繪圖程序,將各種繪圖功能井井有條地封裝在一個個的類中,以面向?qū)ο笙驊?yīng)用程序提供繪圖支持。,GDI+是微軟在Windows2000以后操作系統(tǒng)中提供的新的圖形設(shè)備接口,其在C#中,通過一套部署為托管代碼的類來展現(xiàn)提供的圖形圖像處理功能,這套類被稱為GDI+的托管類。利用GDI+的托管類可以輕松實現(xiàn)顏色漸變、透明處理、紋理處理、拉伸和縮放等多種高級功能。GDI+主要提供了三類服務(wù):1.二維矢量圖形處理2.二維圖像處理3.文字顯示,8.1圖形圖像繪制基礎(chǔ)知識,(1)二維矢量圖形:GDI+提供了存儲圖形基元自身信息的類(或結(jié)構(gòu)體)、存儲圖形基元繪制方式信息的類以及實際進行繪制的類,如Pen、Brush等等。(2)圖像處理:大多數(shù)圖片都難以劃定為直線和曲線的集合,無法使用二維矢量圖形方式進行處理。因此,GDI+為我們提供了Bitmap、Image等類,它們可用于顯示、操作和保存BMP、JPG、GIF等圖像格式。(3)文字顯示:GDI+支持使用各種字體、字號和樣式來顯示文本。,8.1圖形圖像繪制基礎(chǔ)知識,,GDI+比GDI優(yōu)越主要表現(xiàn)在兩個方面:(一)GDI+通過提供新功能(例如:漸變畫筆和alpha混合)擴展了GDI的功能;(二)修訂了編程模型,使圖形編程更加簡易靈活。,,基類抽象類接口,子類具體類實現(xiàn)了接口,使用基類的屬性、方法編程,8.1.1GDI+概述(續(xù)),.NET框架提供的類1.System.Drawing名稱空間提供了對GDI+基本圖形功能的訪問,主要有Graphics類Bitmap類、從Brush類繼承的類、Font類、Icon類、Image類、Pen類、Color類等。2.System.Drawing.Drawing2D名稱空間提供了高級的二維和矢量圖形處理功能。主要有:梯度型畫刷、Matrix類(用于定義幾何變換)和GraphicsPath類等。3.System.Drawing.Imaging名稱空間提供了高級圖像處理功能。4.System.Drawing.Text名稱空間提供了高級字體和文本排版功能,8.1.1GDI+概述(續(xù)),基本結(jié)構(gòu)?Point表示某個特定位置相對于原點的水平和垂直距離。例如:Pointp=newPoint(1,1);?Size也有兩個整型屬性來表示水平和垂直距離—Width和Height。例如:Sizes=newSize(5,5);?Rectangle用來指定矩形的坐標(biāo),它由一個Point和一個Size組成,其中Point表示矩形左上角,Size表示矩形大小。,基本結(jié)構(gòu),Point點結(jié)構(gòu)Point和PointF表示某個特定位置相對于原點的水平和垂直距離。有兩個成員:X,Y,表示x軸和y軸的坐標(biāo)。常用構(gòu)造函數(shù)如下:Pointp1=newPoint(intX,intY);//X,Y為整數(shù),表示在二維平面中定義點的、整數(shù)X和Y坐標(biāo)的有序?qū)?。PointFp2=newPointF(floatX,floaY);//X,Y為浮點數(shù)//float類型是為了支持坐標(biāo)不是點距的單位,Size結(jié)構(gòu)Size和SizeF用來描述對象寬和高,有成員Width和Height。常用構(gòu)造函數(shù)如下://坐標(biāo)系統(tǒng)可以轉(zhuǎn)換,坐標(biāo)單位可以不是點距Size(intwidth,intheight);//float類型是為了支持坐標(biāo)不是點距的單位//(例如單位為mm)SizeF(floatwidth,floatheight);,基本結(jié)構(gòu),Rectangle矩形結(jié)構(gòu)Rectangle和RectangleF用來描述一個矩形,常用屬性和方法如下:屬性X、Y和只讀屬性Left、Top、Right和Bottom:屬性Width、Height和只讀屬性Size:構(gòu)造函數(shù)Rectangle(Pointlocation,Sizesize):Rectangle(intX,intY,intwidth,intheight):,基本結(jié)構(gòu),8.1.1GDI+概述(續(xù)),基本結(jié)構(gòu)例如:1)在構(gòu)造函數(shù)中分別指定x坐標(biāo)、y坐標(biāo)、寬度和高度。Rectangler1=newRectangle(1,2,5,6);2)在構(gòu)造函數(shù)中指定Point位置和Size結(jié)構(gòu)。Pointp=newPoint(1,2);Sizes=newSize(5,6);Rectangler2=newRectangle(p,s);,8.1.1GDI+概述(續(xù)),坐標(biāo)系默認(rèn)情況下,坐標(biāo)系的原點在繪圖設(shè)備的左上角,x軸正方向水平向右,y軸正方向水平垂直向下。默認(rèn)繪圖單位為像素。也可以指定其他繪圖單位。,Graphics對象是GDI+繪圖中的核心對象。要使用計算機繪圖,必須首先創(chuàng)建Graphics對象,然后利用這個對象繪制直線、曲線、橢圓等圖形圖像。繪圖程序的一般步驟:(1)創(chuàng)建Graphics對象(2)使用Graphics對象的方法繪圖、顯示文本或處理圖像。通常用三種方法創(chuàng)建Graphics對象:注意:Graphics類是密封類,不能有派生類。,8.1.1GDI+概述(續(xù)),8.1.2Graphics類,三種常見的創(chuàng)建Graphics對象的方法。1.在窗體或控件的Paint事件中獲取Graphics對象。每一個窗體或控件都有一個Paint事件,該事件的參數(shù)中包含了當(dāng)前窗體或控件的Graphics對象,在為窗體或控件創(chuàng)建繪制代碼時,一般使用此方法來獲取對圖形對象的引用。例如:privatevoidForm1_Paint(……){Graphicsg=e.Graphics;}也可以重載窗體的OnPaint方法protectedoverridevoidOnPaint(PaintEventArgse){Graphicsg=e.Graphics;},8.1.2Graphics類(續(xù)),2.通過當(dāng)前窗體的CreateGraphics方法,把當(dāng)前窗體的畫筆、字體、顏色作為默認(rèn)值,獲取對Graphics對象的引用。注意這種對象只有在處理當(dāng)前Windows窗口消息的過程中有效。如果想在已存在的窗體或控件上繪圖,可以使用此方法。例如:Graphicsg=this.CreateGraphics();……注意:此時以this所代表的窗體為畫布,也可以使用其他控件對象的引用,創(chuàng)建以控件對象為畫布的Graphics對象。,3.從繼承自圖像的任何對象創(chuàng)建Graphics對象,例如:BitmapmyBitmap=newBitmap(@"C:\mytest1\Pics\myPic.bmp");Graphicsg=Graphics.FromImage(myBitmap);此方法在需要更改已存在的圖像時十分有用。注意:此時以文件“myPic.bmp"為畫布,使用g進行繪制圖形時,其圖形是繪制在文件“myPic.bmp"”上的。,8.1.1GDI+概述(續(xù)),8.1.3顏色,顏色是進行圖形操作的基本要素。顏色封裝在System.Drawing.Color結(jié)構(gòu)中。人眼可以分辨的任何顏色都是由一定的紅、綠、藍(lán)三色光組成。任何一種顏色都可以有四個分量,每個分量占一個字節(jié):R:紅色,取值范圍0~255,0表示沒有紅色成分,255為飽和紅色;G:綠色,取值范圍0~255,0表示沒有綠色成分,255為飽和綠色;B:藍(lán)色,取值范圍0~255,0表示沒有藍(lán)色成分,255為飽和藍(lán)色;A:Alpha值,即透明度,取值范圍0~255,0表示完全透明,255表示完全不透明。,8.1.3顏色(續(xù)),在代碼中聲明顏色的方式常用有兩種:1.調(diào)用靜態(tài)方法Color.FromArgb()指定任意顏色,這種方法有兩種常用形式。?第一種形式為直接指定三種顏色,方法原型為:PublicstaticColorFromArgb(intred,intgreen,intblue);三個參數(shù)分別表示R、G、B三色,Alpha值使用默認(rèn)值255,即完全不透明。例如:Colorred=Color.FromArgb(255,0,0);?第二種形式為四個參數(shù),方法原型為:PublicstaticColorFromArgb(intalpha,intred,intgreen,intblue);四個參數(shù)分別表示透明度、R、G、B三色值。,8.1.3顏色(續(xù)),2.系統(tǒng)預(yù)定義顏色System.Drawing.Color結(jié)構(gòu)中提供了許多靜態(tài)性,每個屬性返回一個命名顏色,在Color結(jié)構(gòu)中已經(jīng)預(yù)定義了141種顏色,可以直接使用。例如:this.BackColor=Color.White;,【例】本例創(chuàng)建3個半透明的紅、綠、藍(lán)刷子,填充3個矩形,請注意例子中透明度及顏色使用的方法。privatevoidForm1_Paint(objectsender,PaintEventArgse){Graphicsg=e.Graphics;SolidBrushRedBrush=newSolidBrush(Color.FromArgb(128,255,0,0));//半透明,試試255SolidBrushGreenBrush=newSolidBrush(Color.FromArgb(128,0,255,0));SolidBrushBlueBrush=newSolidBrush(Color.FromArgb(128,0,0,255));g.FillRectangle(RedBrush,0,0,80,80);g.FillRectangle(GreenBrush,40,0,80,80);g.FillRectangle(BlueBrush,20,20,80,80);},8.1.3顏色(續(xù)),8.1.4Paint事件,任何一個控件(包括窗體),系統(tǒng)都提供了對應(yīng)的Paint事件。如果在控件的Paint事件中利用傳遞的參數(shù)獲取Graphics對象,則繪制的圖形圖像僅在該控件內(nèi)顯示。在各種繪制命令中,坐標(biāo)原點都是相對的。例如(1)在控件的Paint事件中繪制,控件的左上角為(0,0)點。(2)在窗體的Paint事件中繪制,(0,0)點在窗體的左上角。,例:畫一個邊界為紅色,內(nèi)部填充為藍(lán)色的圓privatevoidbutton1_Click(objectsender,EventArgse){//1、得到窗體使用的Graphics類對象方法1Graphicsg=this.CreateGraphics();//2、創(chuàng)建紅色的筆對象Penpen1=newPen(Color.Red);//3、創(chuàng)建藍(lán)色的刷子對象SolidBrushbrush1=newSolidBrush(Color.Blue);//4、用紅色筆在窗體中畫矩形內(nèi)切圓的邊界g.DrawEllipse(pen1,10,10,100,100);//用藍(lán)色刷子填充矩形內(nèi)切圓的內(nèi)部g.FillEllipse(brush1,10,10,100,100);},使用Graphics類繪圖的基本步驟,窗體的Paint事件,運行上例,單擊按鈕,出現(xiàn)邊界為紅色,內(nèi)部填充為藍(lán)色的圓。問題:最小化后再最大化,圖形消失!原因:這是因為當(dāng)窗體被遮擋,操作系統(tǒng)不保存被被遮擋的內(nèi)容。而是由應(yīng)用程序自己恢復(fù)被遮擋的用戶區(qū)內(nèi)容。當(dāng)被遮擋用戶區(qū)內(nèi)容恢復(fù)可見時,Windows操作系統(tǒng)向應(yīng)用程序發(fā)送Paint事件,我們只考慮用戶區(qū),窗體的標(biāo)題、邊框由Windows負(fù)責(zé)。Form類窗體不能自動響應(yīng)Paint事件,程序員必須生成Paint事件處理函數(shù)。,privatevoidForm1_Paint(objectsender,PaintEventArgse){//得到窗體的使用的Graphics類對象方法2,Graphicsg=e.Graphics;Penpen1=newPen(Color.Red);SolidBrushbrush1=newSolidBrush(Color.Blue);g.DrawEllipse(pen1,10,10,100,100);g.FillEllipse(brush1,10,10,100,100);}運行后,出現(xiàn)邊界為紅色,內(nèi)部填充藍(lán)色的圓。最小化后,再最大化,圖形不消失。,,在.NET中,GDI+的所有繪圖功能都包括在System、System.Drawing、System.Drawing.Imaging、System.Drawing.Darwing2D和System.Drawing.Text等命名空間中,因此在開始用GDI+類之前,需要先引用相應(yīng)的命名空間。,8.2繪制基本圖形,8.2.1創(chuàng)建畫筆畫筆:畫筆是Pen類的實例,用于繪制各種基本圖形。下面的示例說明如何創(chuàng)建一支基本的藍(lán)色畫筆:PenmyPen=newPen(Color.Blue);PenmyPen=newPen(Color.Blue,10.5f);也可以從畫刷對象創(chuàng)建畫筆對象,例如:SolidBrushmyBrush=newSolidBrush(Color.Red);PenmyPen=newPen(myBrush);PenmyPen=newPen(myBrush,5);創(chuàng)建畫筆后,即可使用它來繪制直線、曲線或空心的輪廓形狀。還可以修改畫筆的各種屬性,例如使用【W(wǎng)idth】屬性修改畫筆的寬度;,8.2.2繪制直線,所有繪制圖形的方法都位于Graphics中。1.繪制直線的方法DrawLine方法:繪制一條直線,常用形式:1)繪制一條連接指定兩個Point結(jié)構(gòu)的線。publicvoidDrawLine(Penpen,Pointpt1,Pointpt2)其中,Pen對象確定線條的顏色、寬度和樣式;Point結(jié)構(gòu)確定起點和終點。2)繪制一條由坐標(biāo)對指定的兩個點的線。publicvoidDrawLine(Penpen,intx1,inty1,intx2,inty2)其中,Pen對象確定線條的顏色、寬度和樣式;x1,y1為起點坐標(biāo),x2,y2為終點坐標(biāo)。,8.2.2繪制直線,1.繪制直線的方法(續(xù))DrawLines方法的常用語法為publicvoidDrawLines(Penpen,Point[]points)其中,Pen對象確定線條的顏色、寬度和樣式;數(shù)組中的第一個點指定起始點,后面的每個點都以相臨的前一個點為起始點組成線段。,8.2.2繪制直線,2.定義畫筆線帽在.NET框架中,有一個LineCap枚舉,該枚舉用于指定系統(tǒng)預(yù)定義的線帽,例如圓形、方形、三角形、菱形、箭頭等。在System.Drawing.Drawing2D命名空間下,有一個AdjustableArrowCap類,利用該類可以自定義箭頭線帽的形狀。AdjustableArrowCaparrow=newAdjustableArrowCap(8,10,false);PenmyPen=newPen(Color.Blue,2);myPen.CustomEndCap=arrow;通過設(shè)置畫筆的【CustomStartCap】屬性或者【CustomEndCap】屬性來自定義畫筆線帽的形狀和大小。,8.2.2繪制直線,3.自定義坐標(biāo)系默認(rèn)情況下(1)屏幕坐標(biāo)是以屏幕左上角為(0,0)點(2)向右為x軸正方向,向下為y軸正方向。坐標(biāo)平移Graphics類提供的TranslateTransform方法可實現(xiàn)坐標(biāo)平移。TranslateTransform方法的常用形式為publicvoidTranslateTransform(floatdx,floatdy)其中,dx表示平移的x分量,dy表示平移的y分量。,8.2.2繪制直線,【例8-1】用毫米作為度量單位,繪制一條數(shù)學(xué)上使用的坐標(biāo)軸,即讓坐標(biāo)系的原點位于窗體中心,橫向從左到右為x正方向,縱向從下到上為y軸正方向,然后在此坐標(biāo)系統(tǒng)下繪制一條從(0,0)點到(20,20)的直線。運行效果如下:,8.2.2繪制直線,【例8-2】利用DrawLines方法和將根據(jù)正弦函數(shù)計算出來的多個點之間用直線依次相連,構(gòu)成正弦曲線顯示出來。設(shè)計界面和運行界面如下:,8.2.3矩形,繪制矩形的方法:(1)根據(jù)指定的矩形結(jié)構(gòu)publicvoidDrawRectangle(Penpen,Rectanglerect)(2)通過矩形的左上角坐標(biāo)(x,y)和寬、高publicvoidDrawRectangle(Penpen,intx,inty,intwidth,intheight)(3)矩形數(shù)組rects來繪制多個矩形publicvoidDrawRectangles(Penpen,Rectangle[]rects),8.2.3矩形,【例8-3】演示矩形的繪制方法。運行效果如下:,8.2.4多邊形,多邊形:是由3條或3條以上的邊組成的閉合圖形。例如:三角形、矩形、五邊形和六邊形等都屬于多邊形。DrawPolygon方法:繪制多邊形的輪廓DrawPolygon方法一般用于繪制多邊形的輪廓,該方法常用形式如下:publicvoidDrawPolygon(Penpen,Point[]points),8.2.4多邊形,【例8-4】演示多邊形的繪制方法。設(shè)計界面和運行效果如下:,8.2.5曲線,DrawCurve方法:用光滑的曲線把給定的點連接起來,常用形式有:1)publicvoidDrawCurve(Penpen,Point[]points)其中,Point結(jié)構(gòu)類型的數(shù)組中指明各節(jié)點,默認(rèn)彎曲強度為0.5。注意,數(shù)組中至少要有3個元素。2)publicvoidDrawCurve(Penpen,Point[]points,floattension)其中,tension指定彎曲強度,該值范圍為0.0f-1.0f,超出此范圍會產(chǎn)生異常。當(dāng)彎曲強度為零時,就是直線。,8.2.5曲線(續(xù)),2.DrawClosedCurve方法通過連接數(shù)組中節(jié)點畫一個平滑的曲線,此方法會自動把首尾節(jié)點連接起來構(gòu)成封閉曲線。注意數(shù)組中的節(jié)點至少要有3個點組成,默認(rèn)彎曲強度為0.5。1)publicvoidDrawClosedCurve(Penpen,Point[]points)其中,Point結(jié)構(gòu)類型的數(shù)組中指明各節(jié)點。2)publicvoidDrawClosedCurve(Penpen,Point[]points,floattensionFillModefillmode)其中,fillmode指明曲線封閉區(qū)域內(nèi)以何種方式填充。,8.2.5曲線(續(xù)),3.貝塞爾曲線每段貝塞爾曲線由4個點組成,兩個端點(p1為起點,p2為終點)和兩個控制點(c1和c2)。曲線不經(jīng)過控制點,但是控制點如同一個磁體吸引曲線,影響并引導(dǎo)曲線向某個方向拉伸。,8.2.5曲線(續(xù)),1)DrawBezier方法:繪制一段貝塞爾曲線的,常用形式:publicvoidDrawBezier(Penpen,Pointpt1,Pointpt2,Pointpt3,Pointpt4)其中pt1、pt2、pt3和pt4分別指定四個點。2)DrawBeziers方法:繪制多段貝塞爾曲線,常用形式:publicvoidDrawBezier(Penpen,Point[]points)其中points是Point結(jié)構(gòu)的數(shù)組,第一段貝塞爾曲線由點數(shù)組中的第1-4個點繪制而成。以后每段曲線只需要3個點:2個控制點和一個結(jié)束點。前一段曲線的結(jié)束點會自動被用作后一段曲線的起始點。,8.2.5曲線(續(xù)),【例8-5】繪制曲線示例。,8.2.6繪制橢圓和扇形,1.繪制橢圓(DrawEllipse方法)1)給定橢圓左上角坐標(biāo)和橢圓的外接矩形的寬度和高度publicvoidDrawEllipse(Penpen,intx,inty,intwidth,intheight);其中,pen為Pen對象,x,y為橢圓外接矩形左上角的坐標(biāo),width定義橢圓外接矩形的寬度,height定義橢圓外接矩形的高度。2)給定橢圓外接矩形的結(jié)構(gòu)publicvoidDrawEllipse(Penpen,Rectanglerect);其中,rect為Rectangle結(jié)構(gòu),用于確定橢圓的邊界。,8.2.6繪制橢圓和扇形,2.繪制扇形(DrawPie方法)1)publicvoidDrawpie(Penpen,intx,inty,intwidth,intheight,intstartAngle,intsweepAngle);其中,pen為Pen對象,x,y為橢圓外接左上角的坐標(biāo),width定義扇形外接矩形的寬度,height定義扇形外接矩形的高度,startAngle為起始角度(以度為單位),sweepAngle為延伸角度。2)publicvoidDrawPie(Penpen,Rectanglerect,floatstartAngle,floatsweepAngle);其中,rect為Rectangle結(jié)構(gòu),用于確定扇形的外接矩形。,8.2.6繪制橢圓和扇形,【例8-6】演示橢圓和扇形的繪制方法。運行效果如下:,8.3填充圖形,對于封閉的圖形:封閉圖形包括矩形、橢圓、多邊形、封閉的曲線、扇形等基本圖形。Draw方法繪制以“Fill”為前綴的方法完成填充,例如:與橢圓對應(yīng)的填充方法為FillEllipse方法。與多邊形對應(yīng)的填充方法為FillPolygon方法等。,8.3.1畫刷(續(xù)),畫刷(Brush)畫刷是可以與Graphics對象一起使用來創(chuàng)建實心形狀和呈現(xiàn)文本的對象??梢杂脕硖畛涓鞣N圖形形狀,如矩形、橢圓、餅型圖和多邊形等。下表列出了幾種不同類型的畫刷。,8.3.2單色畫刷,1)使用SolidBrush類定義單色畫刷SolidBrush類用于定義單色畫刷。該類可以填充圖形,比如矩形、橢圓、多邊形和路徑。例如:SolidBrushsolidBrush=newSolidBrush(Color.Red);Rectangler=newRectangle(5,10,100,100);g.FillEllipse(solidBrush,r);,8.3.2單色畫刷,【例8-7】單色畫刷演示示例。,運行結(jié)果如右圖所示:,8.3.3創(chuàng)建漸變畫刷(續(xù)),2)使用LinearGradientBrush類定義線性漸變LinearGradientBrush對象用顏色線性漸變填充圖形。提供了三種構(gòu)造函數(shù):(1)提供兩個點和兩種顏色。PublicLinearGradientBrush(Pointpoint1,Pointpoint2,Colorcolor1,Colorcolor2)(2)提供一個矩形和一個角度。PublicLinearGradientBrush(Rectanglerect,Colorcolor1,Colorcolor2,floatangle)(3)指定漸變的模式。PublicLinearGradientBrush(Rectanglerect,Colorcolor1,Colorcolor2,LinearGradientModelinearGradientMode),8.3.3漸變畫刷(續(xù)),【例8-8】顏色漸變效果。運行效果:,8.3.4填充陰影,3)使用HatchBrush類填充簡單圖案HatchBrush類提供的畫刷可以用各種圖案填充圖形。通過Hatch類型可以設(shè)置影線樣式。在創(chuàng)建影線的畫刷時,能設(shè)定前景色、背景色和影線樣式。有56種不同的影線樣式枚舉,該枚舉可以參看System.Drawing.Drawing2D.HatchStyle枚舉。例如:HatchStyle.Horizontal水平線的圖案HatchStyle.ForwardDiagonal從左上到右下的對角線的線條圖案HatchStyle.DiagonalBrick具有分層磚塊外觀的陰影HatchStyle.Shingle帶有對角分層鵝卵石外觀的陰影HatchStyle.Sphere具有球體彼此相鄰放置的外觀的陰影,8.3.4填充陰影,【例8-9】陰影效果示例。效果如下:,8.3.5填充紋理,4)使用TextureBrush類填充復(fù)雜圖像TextureBrush類使用圖像作為填充的樣式,它可以使用例如.bmp、.jpg、.png等格式的圖像。初始化一個新的TextureBrush對象需要指定填充的圖像。publicTextureBrush(Imageimage,Rectanglerect)publicTextureBrush(Imageimage,WrapModewrapMode,Rectanglerect)其中,image指定要填充的圖像;rect指定圖像的矩形塊;wrapMode指定如何填充圖像,枚舉類型,8.3.5填充紋理,【例8-10】創(chuàng)建TextureBrush示例。運行效果如下:,8.3.6填充路徑,5)使用PathGradientBrush類實現(xiàn)彩色漸變1.GraphicsPath類GraphicsPath類用于創(chuàng)建路徑。利用GraphicsPath類,可以繪制形狀的輪廓、填充形狀內(nèi)部和創(chuàng)建剪輯區(qū)域。下面的代碼創(chuàng)建一個路徑并在路徑中添加一個橢圓。GraphicsPathpath=newGraphicsPath();path.AddEllipse(this.ClientRectangle);2.PathGradientBrush類PathGradientBrush稱為路徑漸變畫刷,路徑漸變畫刷用于從中心向四周通過顏色漸變來填充路徑的內(nèi)部區(qū)域。,8.3.6填充路徑,【例8-11】路徑和路徑畫刷的使用示例。運行效果:,本章綜合舉例—柱狀圖和餅狀圖繪制,柱狀圖實現(xiàn)要點確定柱子左上角頂點的坐標(biāo)確定柱子的高度填充矩形柱子餅狀圖實現(xiàn)要點確定每個部分所占的比例,以及相應(yīng)的延伸角度從第一部分開始,順時針繪制扇形填充扇形,第8章圖形圖像處理,8.1圖形圖像基礎(chǔ)知識8.2繪制基本圖形8.3填充圖形8.4圖像處理8.5圖形與圖像的平移、旋轉(zhuǎn)與縮放8.6文字處理,8.4圖像處理,對圖像的處理主要有:從文件或其他地方加載圖像或創(chuàng)建一個新的圖像顯示圖像修改圖像把內(nèi)存中的圖像保存到文件和其他存儲器中。,8.4.1圖像的繪制,1.圖像的顯示GDI+提供了兩個類表示圖像:Bitmap類和Metafile類。Bitmap類:提供了處理位圖的功能Metafile類:提供了處理矢量圖的功能顯示步驟:從文件中讀取一個位圖并在屏幕中顯示圖像需要三個步驟:①創(chuàng)建一個Bitmap對象指明要顯示的圖像文件;②創(chuàng)建一個Graphics對象表明要使用繪圖平面;③通過調(diào)用Graphics對象的DrawImage方法顯示圖像。,8.4.1圖像的繪制,1)創(chuàng)建Bitmap對象Bitmap類有很多重載的構(gòu)造函數(shù),其中常用的有:PublicBitmap(stringfilename)其中filename是圖像文件的名字??梢岳迷摌?gòu)造函數(shù)創(chuàng)建Bitmap對象。例如:Bitmapbitmap=newBitmap("filename.jpg");2)DrawImage方法Graphics類的DrawImage方法用于在指定位置顯示原始圖像或者縮放后的圖像。該方法的重載形式也非常多,其中常用的一種為:PublicvoidDrawImage(Imageimage,intx,inty,intwidth,intheight)該方法在(x,y)位置點按指定的大小顯示圖像。利用此方法可以使由image對象表示的圖像被縮放為rect矩形的尺寸。,8.4.1圖像的繪制,【例8-12】圖像繪制功能。運行效果:,8.4.2圖像的保存,在窗體上繪制出圖形或圖像后,利用Image對象的Save方法可以將繪制的內(nèi)容保存到文件中。publicvoidSave(stringfilename,ImageFormatformat)其中,fileName為所要保存的文件名。format為保存的圖像類型,圖像類型由ImageFormat類的屬性來指定注意:要將繪制的信息(圖形或者圖像)保存到圖像文件中,其對應(yīng)的Graphics對象應(yīng)該從Image對象獲取,例如:Graphicsg=Graphics.FromImage(image);其中,image為任何從Image類繼承的對象,例如Bitmap對象。,,從image對象得到Graphics對象后,在其中繪制的所有圖形和圖像都會保存在該image對象中,然后再保存該對象到文件中即可。,Imaging.ImageFormat支持的格式,Imaging.ImageFormat支持的格式,8.4.2圖像的保存,【例8-13】將繪制的圖形和圖像保存到文件中。設(shè)計界面和繪制效果如下:,8.4.3圖像的拉伸與反轉(zhuǎn)變換,【例8-14】圖像變換演示。設(shè)計界面如下:,8.5圖像的平移、旋轉(zhuǎn)和縮放,1.TranslateTransform方法常用形式:publicvoidTranslateTransform(floatdx,floatdy)其中dx表示平移的x分量,dy表示平移的y分量。2.RotateTransform方法常用形式:publicvoidRotateTransform(floatangle)其中angle表示旋轉(zhuǎn)角度。3.ScaleTransform方法常用形式:publicvoidScaleTransform(floatsx,floatsy)其中sx表示x方向縮放比例,sy表示y方向縮放的比例。,8.5圖像的平移、旋轉(zhuǎn)和縮放,【例8-15】圖像的平移、旋轉(zhuǎn)和縮放演示。運行效果如下:,8.6文字處理,Graphics類提供的DrawString方法來實現(xiàn)一些文字的特殊效果。DrawString方法的常用形式為:publicvoidDrawString(strings,Fontfont,Brushbrush,PointFpoint,StringFormatformat)參數(shù)說明:s:要繪制的字符串font指定字符串所用的字體brush指定字符串的顏色和紋理point指定所繪制的字符串的左上角位置format指定應(yīng)用于字符串的格式化屬性(如行距和對齊方式),8.6文字處理,【例8-16】演示文字繪制效果。運行效果為:,本章實驗與習(xí)題,作業(yè):1、2,- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- C# 圖形圖像 處理
鏈接地址:http://appdesigncorp.com/p-3399027.html