




已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
_C#圖形圖像編程基礎(chǔ)本次課程主要介紹使用C#進(jìn)行圖形圖像編程基礎(chǔ),其中包括GDI+繪圖基礎(chǔ)、C#圖像處理基礎(chǔ)以及簡單的圖像處理技術(shù)。1 GDI+繪圖基礎(chǔ)編寫圖形程序時(shí)需要使用GDI(Graphics Device Interface,圖形設(shè)備接口),從程序設(shè)計(jì)的角度看,GDI包括兩部分:一部分是GDI對象,另一部分是GDI函數(shù)。GDI對象定義了GDI函數(shù)使用的工具和環(huán)境變量,而GDI函數(shù)使用GDI對象繪制各種圖形,在C#中,進(jìn)行圖形程序編寫時(shí)用到的是GDI+(Graphice Device Interface Plus圖形設(shè)備接口)版本,GDI+是GDI的進(jìn)一步擴(kuò)展,它使我們編程更加方便。1.1 GDI+概述GDI+是微軟在Windows 2000以后操作系統(tǒng)中提供的新的圖形設(shè)備接口,其通過一套部署為托管代碼的類來展現(xiàn),這套類被稱為GDI+的“托管類接口”,GDI+主要提供了以下三類服務(wù):(1) 二維矢量圖形:GDI+提供了存儲圖形基元自身信息的類(或結(jié)構(gòu)體)、存儲圖形基元繪制方式信息的類以及實(shí)際進(jìn)行繪制的類。(2) 圖像處理:大多數(shù)圖片都難以劃定為直線和曲線的集合,無法使用二維矢量圖形方式進(jìn)行處理。因此,GDI+為我們提供了Bitmap、Image等類,它們可用于顯示、操作和保存BMP、JPG、GIF等圖像格式。(3) 文字顯示:GDI+支持使用各種字體、字號和樣式來顯示文本。我們要進(jìn)行圖形編程,就必須先講解Graphics類,同時(shí)我們還必須掌握Pen、Brush和Rectangle這幾種類。GDI+比GDI優(yōu)越主要表現(xiàn)在兩個(gè)方面:第(一)GDI+通過提供新功能(例如:漸變畫筆和alpha混合)擴(kuò)展了GDI的功能;第(二)修訂了編程模型,使圖形編程更加簡易靈活。1.2 Graphics類Graphics類封裝一個(gè)GDI+繪圖圖面,提供將對象繪制到顯示設(shè)備的方法,Graphics與特定的設(shè)備上下文關(guān)聯(lián)。畫圖方法都被包括在Graphics類中,在畫任何對象(例如:Circle,Rectangle)時(shí),我們首先要?jiǎng)?chuàng)建一個(gè)Graphics類實(shí)例,這個(gè)實(shí)例相當(dāng)于建立了一塊畫布,有了畫布才可以用各種畫圖方法進(jìn)行繪圖。繪圖程序的設(shè)計(jì)過程一般分為兩個(gè)步驟:(一)創(chuàng)建Graphics對象;(二)使用Graphics對象的方法繪圖、顯示文本或處理圖像。通常我們使用下述三種方法來創(chuàng)建一個(gè)Graphics對象。方法一、利用控件或窗體的Paint事件中的PainEventArgs在窗體或控件的Paint事件中接收對圖形對象的引用,作為PaintEventArgs(PaintEventArgs指定繪制控件所用的Graphics)的一部分,在為控件創(chuàng)建繪制代碼時(shí),通常會使用此方法來獲取對圖形對象的引用。例如:/窗體的Paint事件的響應(yīng)方法private void form1_Paint(object sender, PaintEventArgs e) Graphics g = e.Graphics;也可以直接重載控件或窗體的OnPaint方法,具體代碼如下所示:protected override void OnPaint(PaintEventArgs e) Graphics g = e.Graphics;Paint事件在重繪控件時(shí)發(fā)生。方法二、調(diào)用某控件或窗體的CreateGraphics方法調(diào)用某控件或窗體的CreateGraphics方法以獲取對Graphics對象的引用,該對象表示該控件或窗體的繪圖圖面。如果想在已存在的窗體或控件上繪圖,通常會使用此方法。例如:Graphics g = this.CreateGraphics();方法三、調(diào)用Graphics類的FromImage靜態(tài)方法由從Image繼承的任何對象創(chuàng)建Graphics對象。在需要更改已存在的圖像時(shí),通常會使用此方法。例如:/名為“g1.jpg”的圖片位于當(dāng)前路徑下Image img = Image.FromFile(g1.jpg);/建立Image對象Graphics g = Graphics.FromImage(img);/創(chuàng)建Graphics對象Graphics類的方法成員有了一個(gè)Graphics的對象引用后,就可以利用該對象的成員進(jìn)行各種各樣圖形的繪制,表7.1列出了Graphics類的常用方法成員。表7.1 Graphics類常用方法名稱說明DrawArc畫弧。DrawBezier畫立體的貝爾塞曲線。DrawBeziers畫連續(xù)立體的貝爾塞曲線。DrawClosedCurve畫閉合曲線。DrawCurve畫曲線。DrawEllipse畫橢圓。DrawImage畫圖像。DrawLine畫線。DrawPath通過路徑畫線和曲線。DrawPie畫餅形。DrawPolygon畫多邊形。DrawRectangle畫矩形。DrawString繪制文字。FillEllipse填充橢圓。FillPath填充路徑。FillPie填充餅圖。FillPolygon填充多邊形。FillRectangle填充矩形。FillRectangles填充矩形組。FillRegion填充區(qū)域。在.NET中,GDI+的所有繪圖功能都包括在System、System.Drawing、System.Drawing.Imaging、System.Drawing.Darwing2D和System.Drawing.Text等命名空間中,因此在開始用GDI+類之前,需要先引用相應(yīng)的命名空間。2引用命名空間在C#應(yīng)用程序中使用using命令已用給定的命名空間或類,下面是一個(gè)C#應(yīng)用程序引用命名空間的例子:using System;using System.Collections.Generic;using System.Data;using System.ComponentModel;using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Imaging;1.3 常用畫圖對象在創(chuàng)建了Graphics對象后,就可以用它開始繪圖了,可以畫線、填充圖形、顯示文本等等,其中主要用到的對象還有:l Pen:用來用patterns、colors或者bitmaps進(jìn)行填充。l Color:用來畫線和多邊形,包括矩形、圓和餅形。l Font:用來給文字設(shè)置字體格式。l Brush:用來描述顏色。l Rectangle:矩形結(jié)構(gòu)通常用來在窗體上畫矩形。l Point:描述一對有序的x,y兩個(gè)坐標(biāo)值。1Pen類Pen用來繪制指定寬度和樣式的直線。使用DashStyle屬性繪制幾種虛線,可以使用各種填充樣式(包括純色和紋理)來填充Pen繪制的直線,填充模式取決于畫筆或用作填充對象的紋理。使用畫筆時(shí),需要先實(shí)例化一個(gè)畫筆對象,主要有以下幾種方法。用指定的顏色實(shí)例化一只畫筆的方法如下:public Pen(Color);用指定的畫刷實(shí)例化一只畫筆的方法如下:public Pen(Brush);用指定的畫刷和寬度實(shí)例化一只畫筆的方法如下:public Pen(Brush, float);用指定的顏色和寬度實(shí)例化一只畫筆的方法如下:public Pen(Color, float);實(shí)例化畫筆的語句格式如下:Pen pn=new Pen(Color.Blue);或者Pen pn=new Pen(Color.Blue,100);Pen常用的屬性有以下幾個(gè),如表7.2所示:表7.2 Pen常用屬性名稱說明Alignment獲得或者設(shè)置畫筆的對齊方式。Brush獲得或者設(shè)置畫筆的屬性。Color獲得或者設(shè)置畫筆的顏色。Width獲得或者設(shè)置畫筆的寬度。2Color結(jié)構(gòu)在自然界中,顏色大都由透明度(A)和三基色(R,G,B)所組成。在GDI+中,通過Color結(jié)構(gòu)封裝對顏色的定義,Color結(jié)構(gòu)中,除了提供(A,R,G,B)以外,還提供許多系統(tǒng)定義的顏色,如Pink(粉顏色),另外,還提供許多靜態(tài)成員,用于對顏色進(jìn)行操作。Color結(jié)構(gòu)的基本屬性如表7.3所示。表7.3 顏色的基本屬性名稱說明A獲取此Color結(jié)構(gòu)的alpha分量值,取值(0255)。B獲取此Color結(jié)構(gòu)的藍(lán)色分量值,取值(0255)。G獲取此Color結(jié)構(gòu)的綠色分量值,取值(0255)。R獲取此Color結(jié)構(gòu)的紅色分量值,取值(0255)。Name獲取此Color結(jié)構(gòu)的名稱,這將返回用戶定義的顏色的名稱或已知顏色的名稱(如果該顏色是從某個(gè)名稱創(chuàng)建的),對于自定義的顏色,將返回RGB值。Color結(jié)構(gòu)的基本(靜態(tài))方法如表7.4所示表7.4 顏色的基本方法名稱說明FromArgb從四個(gè)8位ARGB分量(alpha、紅色、綠色和藍(lán)色)值創(chuàng)建Color結(jié)構(gòu)。FromKnowColor從指定的預(yù)定義顏色創(chuàng)建一個(gè)Color結(jié)構(gòu)。FromName從預(yù)定義顏色的指定名稱創(chuàng)建一個(gè)Color結(jié)構(gòu)。Color結(jié)構(gòu)變量可以通過已有顏色構(gòu)造,也可以通過RGB建立,例如:Color clr1 = Color.FromArgb(122,25,255);Color clr2 = Color.FromKnowColor(KnowColor.Brown);/KnownColor為枚舉類型Color clr3 = Color.FromName(SlateBlue);在圖像處理中一般需要獲取或設(shè)置像素的顏色值,獲取一幅圖像的某個(gè)像素顏色值的具體步驟如下:(1)定義BitmapBitmap myBitmap = new Bitmap(c:MyImagesTestImage.bmp);(2)定義一個(gè)顏色變量把在指定位置所取得的像素值存入顏色變量中Color c = new Color();c = myBitmap.GetPixel(10,10);/獲取此Bitmap中指定像素的顏色。(3)將顏色值分解出單色分量值int r,g,b;r= c.R;g=c.G;b=c.B; 3Font類Font類定義特定文本格式,包括字體、字號和字形屬性。Font類的常用構(gòu)造函數(shù)是public Font(string 字體名,float 字號,F(xiàn)ontStyle 字形),其中字號和字體為可選項(xiàng)和public Font(string 字體名,float 字號),其中“字體名”為Font的FontFamily的字符串表示形式。下面是定義一個(gè)Font對象的例子代碼:FontFamily fontFamily = new FontFamily(Arial);Font font = new Font(fontFamily,16,FontStyle.Regular,GraphicsUnit.Pixel);字體常用屬性如表7.5所示。表7.5 字體的常用屬性名稱說明Bold是否為粗體。FontFamily字體成員。Height字體高。Italic是否為斜體。Name字體名稱。Size字體尺寸。SizeInPoints獲取此 Font對象的字號,以磅為單位。Strikeout是否有刪除線。Style字體類型。Underline是否有下劃線。Unit字體尺寸單位。4Brush類Brush類是一個(gè)抽象的基類,因此它不能被實(shí)例化,我們總是用它的派生類進(jìn)行實(shí)例化一個(gè)畫刷對象,當(dāng)我們對圖形內(nèi)部進(jìn)行填充操作時(shí)就會用到畫刷,關(guān)于畫刷在7.1.5中有詳細(xì)講解。5Rectangle結(jié)構(gòu)存儲一組整數(shù),共四個(gè),表示一個(gè)矩形的位置和大小。矩形結(jié)構(gòu)通常用來在窗體上畫矩形,除了利用它的構(gòu)造函數(shù)構(gòu)造矩形對象外,還可以使用Rectangle結(jié)構(gòu)的屬性成員,其屬性成員如表7.6所示。表7.6 Rectangle結(jié)構(gòu)屬性名稱說明Bottom底端坐標(biāo)Height矩形高IsEmpty測試矩形寬和高是否為0Left矩形左邊坐標(biāo)Location矩形的位置Right矩形右邊坐標(biāo)Size矩形尺寸.Top矩形頂端坐標(biāo)Width矩形寬X矩形左上角頂點(diǎn)X坐標(biāo)Y矩形左上角頂點(diǎn)Y坐標(biāo)Retangle結(jié)構(gòu)的構(gòu)造函數(shù)有以下兩個(gè):/用指定的位置和大小初始化Rectangle類的新實(shí)例。public Retangle(Point,Size);/Size結(jié)構(gòu)存儲一個(gè)有序整數(shù)對,通常為矩形的寬度和高度。和public Rectangle(int,int,int,int);6Point結(jié)構(gòu)用指定坐標(biāo)初始化Point類的新實(shí)例。這個(gè)結(jié)構(gòu)很像C+中的Point結(jié)構(gòu),它描述了一對有序的x,y兩個(gè)坐標(biāo)值,其構(gòu)造函數(shù)為:public Point(int x,int y);其中x為該點(diǎn)的水平位置;y為該點(diǎn)的水垂直位置。下面是構(gòu)造Point對象的例子代碼:Point pt1=new Point(30,30);Point pt2=new Point(110,100);71.4 基本圖形繪制舉例1畫一個(gè)矩形【例1】建立一個(gè)項(xiàng)目,在窗體上畫一個(gè)矩形,通過直接在Form1類中重載OnPaint函數(shù)的方法來實(shí)現(xiàn)。圖1 畫一個(gè)矩形protected override void OnPaint(PaintEventArgs e) Graphics g = e.Graphics ; Rectangle rect = new Rectangle(50, 30, 100, 100); LinearGradientBrush lBrush = new LinearGradientBrush(rect, Color.Red,Color.Yellow,LinearGradientMode.BackwardDiagonal); g.FillRectangle(lBrush, rect); 運(yùn)行結(jié)果如圖1所示。2畫一個(gè)弧【例2】畫一個(gè)弧形。弧形函數(shù)格式如下:public void DrawArc(Pen pen,Rectangle rect,Float startArgle,Float sweepAngle);直接在Form1類中重載OnPaint函數(shù)protected override void OnPaint(PaintEventArgs e)Graphics g = e.Graphics ;Pen pn = new Pen( Color.Blue);Rectangle rect = new Rectangle(50, 50, 200,100);g.DrawArc(pn,rect,12,84);運(yùn)行結(jié)果如圖2所示。圖2 畫一個(gè)弧3畫線【例3】畫一條線。protected override void OnPaint(PaintEventArgs e) Graphics g = e.Graphics ; Pen pn = new Pen(Color.Blue); Point pt1 = new Point(30,30); Point pt2 = new Point(110,100); g.DrawLine(pn,pt1,pt2); 運(yùn)行結(jié)果如圖3所示。圖3畫一條線4畫橢圓【例4】畫一個(gè)橢圓。圖4畫一個(gè)橢圓protected override void OnPaint(PaintEventArgs e) Graphics g = e.Graphics ; Pen pn = new Pen( Color.Blue, 100 ); Rectangle rect = new Rectangle(50, 50, 200, 100); g.DrawEllipse( pn, rect ); 運(yùn)行結(jié)果如圖4所示。5輸出文本【例5】輸出文本。protected override void OnPaint(PaintEventArgs e)Font fnt = new Font(Verdana, 16);Graphics g = e.Graphics;g.DrawString(GDI+ World, fnt, new SolidBrush(Color.Red), 14,10);運(yùn)行結(jié)果如圖5所示。圖5 輸出文本6填充路徑【例6】填充路徑。protected override void OnPaint(PaintEventArgs e) Graphics g = e.Graphics; g.FillRectangle(new SolidBrush(Color.White), ClientRectangle); GraphicsPath path = new GraphicsPath(new Point new Point(40, 140), new Point(275, 200), new Point(105, 225), new Point(190, 300), new Point(50, 350), new Point(20, 180), , new byte (byte)PathPointType.Start, (byte)PathPointType.Bezier, (byte)PathPointType.Bezier, (byte)PathPointType.Bezier, (byte)PathPointType.Line, (byte)PathPointType.Line, ); PathGradientBrush pgb = new PathGradientBrush(path); pgb.SurroundColors = new Color Color.Green,Color.Yellow,Color.Red, Color.Blue,Color.Orange, Color.White, ;g.FillPath(pgb, path);運(yùn)行結(jié)果如圖6所示。圖6 填充路徑注意:GraphicsPath類位于命名空間System.Drawing.Drawing2D中,表示一系列相互連接的直線和曲線。1.5 畫刷和畫刷類型Brush類型是一個(gè)抽象類,所以它不能被實(shí)例化,也就是不能直接應(yīng)用,但是我們可以利用它的派生類,如:HatchBrush、SolidBrush和TextureBrush等。畫刷類型一般在System.Drawing命名空間中,如果應(yīng)用HatchBrush和GradientBrush畫刷,需要在程序中引入System.Drawing.Drawing2D命名空間。1SolidBrush(單色畫刷)它是一種一般的畫刷,通常只用一種顏色去填充GDI+圖形,例如:protected override void OnPaint(PaintEventArgs e)Graphics g = e.Graphics;SolidBrush sdBrush1 = new SolidBrush(Color.Red);SolidBrush sdBrush2 = new SolidBrush(Color.Green);SolidBrush sdBrush3 = new SolidBrush(Color.Blue);g.FillEllipse(sdBrush2, 20, 40, 60, 70);Rectangle rect = new Rectangle(0, 0, 200, 100);g.FillPie(sdBrush3, 0, 0, 200, 40, 0.0f, 30.0f );PointF point1 = new PointF(50.0f, 250.0f);PointF point2 = new PointF(100.0f, 25.0f);PointF point3 = new PointF(150.0f, 40.0f);PointF point4 = new PointF(250.0f, 50.0f);PointF point5 = new PointF(300.0f, 100.0f);PointF curvePoints = point1, point2, point3, point4,point5 ;g.FillPolygon(sdBrush1, curvePoints);運(yùn)行結(jié)果如圖7所示。圖7 SolidBrush應(yīng)用2HatchBrush(陰影畫刷)HatchBrush類位于System.Drawing.Drawing2D命名空間中。陰影畫刷有兩種顏色:前景色和背景色,以及6種陰影。前景色定義線條的顏色,背景色定各線條之間間隙的顏色。HatchBrush類有兩個(gè)構(gòu)造函數(shù):l public HatchBrush(HatchStyle,Color forecolor);l public HatchBrush(HatchStyle,Color forecolor,Color backcolor);HatchStyle枚舉值指定可用于HatchBrush對象的不同圖案。HatchStyle的主要成員如表7所示。表7 HatchStyle主要成員名稱說明BackwardDiagonal從右上到左下的對角線的線條圖案。Cross指定交叉的水平線和垂直線。DarkDownwardDiagonal指定從頂點(diǎn)到底點(diǎn)向右傾斜的對角線,其兩邊夾角比ForwardDiagonal小50%,寬度是其兩倍。此陰影圖案不是鋸齒消除的。DarkHorizontal指定水平線的兩邊夾角比Horizontal小50%并且寬度是Horizontal的兩倍。DarkUpwardDiagonal指定從頂點(diǎn)到底點(diǎn)向左傾斜的對角線,其兩邊夾角比BackwardDiagonal小50%,寬度是其兩倍,但這些直線不是鋸齒消除的。DarkVertical指定垂直線的兩邊夾角比Vertical小50%并且寬度是其兩倍。DashedDownwardDiagonal指定虛線對角線,這些對角線從頂點(diǎn)到底點(diǎn)向右傾斜。DashedHorizontal指定虛線水平線。DashedUpwardDiagonal指定虛線對角線,這些對角線從頂點(diǎn)到底點(diǎn)向左傾斜。DashedVertical指定虛線垂直線。DiagonalBrick指定具有分層磚塊外觀的陰影,它從頂點(diǎn)到底點(diǎn)向左傾斜。DiagonalCross交叉對角線的圖案。Divot指定具有草皮層外觀的陰影。ForwardDiagonal從左上到右下的對角線的線條圖案。Horizontal水平線的圖案。HorizontalBrick指定具有水平分層磚塊外觀的陰影。LargeGrid指定陰影樣式Cross。LightHorizontal指定水平線,其兩邊夾角比Horizontal小50%。LightVertical指定垂直線的兩邊夾角比Vertical小50%。Max指定陰影樣式SolidDiamond。Min指定陰影樣式Horizontal。NarrowHorizontal指定水平線的兩邊夾角比陰影樣式Horizontal小 75%(或者比LightHorizontal小25%)。NarrowVertical指定垂直線的兩邊夾角比陰影樣式Vertical小 75%(或者比LightVertica小25%)。OutlinedDiamond指定互相交叉的正向?qū)蔷€和反向?qū)蔷€,但這些對角線不是鋸齒消除的。Percent05指定5%陰影。前景色與背景色的比例為5:100。Percent90指定90%陰影。前景色與背景色的比例為90:100。Plaid指定具有格子花呢材料外觀的陰影。Shingle指定帶有對角分層鵝卵石外觀的陰影,它從頂點(diǎn)到底點(diǎn)向右傾斜。SmallCheckerBoard指定帶有棋盤外觀的陰影。SmallConfetti指定帶有五彩紙屑外觀的陰影。SolidDiamond指定具有對角放置的棋盤外觀的陰影。Sphere指定具有球體彼此相鄰放置的外觀的陰影。Trellis指定具有格架外觀的陰影。Vertical垂直線的圖案。Wave指定由代字號“”構(gòu)成的水平線。Weave指定具有織物外觀的陰影。下面代碼顯示了HatchBrush畫刷的使用。protected override void OnPaint(PaintEventArgs e)Graphics g = e.Graphics;HatchBrush hBrush1 = new HatchBrush(HatchStyle.DiagonalCross, Color.Chocolate, Color.Red); HatchBrush hBrush2 = new HatchBrush(HatchStyle.DashedHorizontal, Color.Green, Color.Black); HatchBrush hBrush3 = new HatchBrush(HatchStyle.Weave, Color.BlueViolet, Color.Blue); g.FillEllipse(hBrush1, 20, 80, 60, 20); Rectangle rect = new Rectangle(0, 0, 200, 100); g.FillPie(hBrush3, 0, 0, 200, 40, 0.0f, 30.0f ); PointF point1 = new PointF(50.0f, 250.0f);PointF point2 = new PointF(100.0f, 25.0f); PointF point3 = new PointF(150.0f, 40.0f); PointF point4 = new PointF(250.0f, 50.0f); PointF point5 = new PointF(300.0f, 100.0f); PointF curvePoints = point1, point2, point3, point4, point5 ; g.FillPolygon(hBrush2, curvePoints); 運(yùn)行結(jié)果如圖8所示。圖8 HatchBrush應(yīng)用3TextureBrush(紋理畫刷)紋理畫刷擁有圖案,并且通常使用它來填充封閉的圖形。為了對它初始化,可以使用一個(gè)已經(jīng)存在的別人設(shè)計(jì)好了的圖案,或使用常用的設(shè)計(jì)程序設(shè)計(jì)的自己的圖案,同時(shí)應(yīng)該使圖案存儲為常用圖形文件格式,如BMP格式文件。這里有一個(gè)設(shè)計(jì)好的位圖,被存儲為Papers.bmp文件。private void Form1_Paint(object sender, PaintEventArgs e)Graphics g = e.Graphics;/根據(jù)文件名創(chuàng)建原始大小的bitmap對象Bitmap bitmap = new Bitmap(D:mm.jpg);/將其縮放到當(dāng)前窗體大小bitmap = new Bitmap(bitmap, this.ClientRectangle.Size);TextureBrush myBrush = new TextureBrush(bitmap);g.FillEllipse(myBrush, this.ClientRectangle);運(yùn)行結(jié)果如圖9所示。圖9 TextTureBursh應(yīng)用4LinearGradientBrush和PathGradientBrush(漸變畫刷)漸變畫刷類似與實(shí)心畫刷,因?yàn)樗彩腔陬伾?,與實(shí)心畫刷不同的是:漸變畫刷使用兩種顏色;它的主要特點(diǎn)是:在使用過程中,一種顏色在一端,而另外一種顏色在另一端,在中間,兩種顏色融合產(chǎn)生過渡或衰減的效果。漸變畫刷有兩種:線性畫刷和路徑畫刷(LinearGradientBrush和PathGradientBrush)。其中LinearGradientBrush可以顯示線性漸變效果,而PathGradientBrush是路徑漸變的可以顯示比較具有彈性的漸變效果。(1)LinearGradientBrush類LinearGradientBrush類構(gòu)造函數(shù)如下:public LinearGradientBrush(Point point1,Point point2,Color color1,Color color2)參數(shù)說明:point1:表示線性漸變起始點(diǎn)的Point結(jié)構(gòu)。 point2:表示線性漸變終結(jié)點(diǎn)的Point結(jié)構(gòu)。 color1:表示線性漸變起始色的Color結(jié)構(gòu)。 color2:表示線性漸變結(jié)束色的Color結(jié)構(gòu)。 代碼如下:private void Form1_Paint(object sender, PaintEventArgs e)Graphics g = e.Graphics;LinearGradientBrush myBrush = new LinearGradientBrush(this.ClientRectangle, Color.White, Color.Blue, LinearGradientMode.Vertical);g.FillRectangle(myBrush, this.ClientRectangle);運(yùn)行結(jié)果如圖10所示。圖10 LinearGradientBrush的應(yīng)用(2)PathGradientBrush類PathGradientBrush類的構(gòu)造函數(shù)如下:public PathGradientBrush (GraphicsPath path);參數(shù)說明:path:GraphicsPath,定義此PathGradientBrush填充的區(qū)域。例子代碼如下:private void Form1_Paint(object sender, 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); /指定路徑中心點(diǎn) brush.CenterPoint = centerPoint; /指定路徑中心的顏色brush.CenterColor = Color.Red;/Color類型的數(shù)組指定與路徑上每個(gè)頂點(diǎn)的顏色brush.SurroundColors = new Color Color.Plum ;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);運(yùn)行結(jié)果如圖11所示。圖11 PathGradientBrush應(yīng)用2 C#圖像處理基礎(chǔ)本次課程主要介紹C#圖像處理基礎(chǔ)知識以及對圖像的基本處理方法和技巧,主要包括圖像的加載、變換和保存等操作。2.1 C#圖像處理概述1圖像文件的類型GDI+支持的圖像格式有BMP、GIF、JPEG、EXIF、PNG、TIFF、ICON、WMF、EMF等,幾乎涵蓋了所有的常用圖像格式,使用GDI+可以顯示和處理多種格式的圖像文件。2圖像類GDI+提供了Image、Bitmap和Metafile等類用于圖像處理,為用戶進(jìn)行圖像格式的加載、變換和保存等操作提供了方便。(1)Image類Image類是為Bitmap和Metafile的類提供功能的抽象基類。(2)Metafile類定義圖形圖元文件,圖元文件包含描述一系列圖形操作的記錄,這些操作可以被記錄(構(gòu)造)和被回放(顯示)。(3)Bitmap類封裝GDI+位圖,此位圖由圖形圖像及其屬性的像素?cái)?shù)據(jù)組成,Bitmap是用于處理由像素?cái)?shù)據(jù)定義的圖像的對象,它屬于System.Drawing命名空間,該命名空間提供了對GDI+基本圖形功能的訪問。Bitmap類常用方法和屬性如表8所示。表8 Bitmap常用屬性和方法名稱說明公共屬性Height獲取此Image對象的高度。RawFormat獲取此Image對象的格式。Size獲取此Image對象的寬度和高度。Width獲取此Image對象的寬度。公共方法GetPixel獲取此Bitmap中指定像素的顏色。MakeTransparent使默認(rèn)的透明顏色對此Bitmap透明。RotateFlip旋轉(zhuǎn)、翻轉(zhuǎn)或者同事旋轉(zhuǎn)和翻轉(zhuǎn)Image對象。Save將Image對象以指定的格式保存到指定的Stream對象。SetPixel設(shè)置Bitmap對象中指定像素的顏色。SetPropertyItem將指定的屬性項(xiàng)設(shè)置為指定的值。SetResolution設(shè)置此Bitmap的分辨率。Bitmap類有多種構(gòu)造函數(shù),因此可以通過多種形式建立Bitmap對象,例如:從指定的現(xiàn)有圖像建立Bitmap對象Bitmap box1 =new Bitmap(pictureBox1.Image);從指定的圖像文件建立Bitmap對象,其中“C:MyImagesTestImage.bmp”已存在的圖像文件Bitmap box2 =new Bitmap(C:MyImagesTestImage.bmp);從現(xiàn)有的Bitmap對象建立新的Bitmap對象Bitmap box3 = new Bitmap(box1);2.2 圖像的輸入和保存1圖像的輸入在窗體或圖形框內(nèi)輸入圖像有兩種方式:(一)在窗體設(shè)計(jì)時(shí)使用圖形框?qū)ο蟮腎mage屬性輸入;(二)在程序中通過打開文件對話框輸入。方法(一)、窗體設(shè)計(jì)時(shí)使用圖形框?qū)ο蟮腎mage屬性輸入窗體設(shè)計(jì)時(shí)使用對象的Image屬性輸入圖像的操作如下:(1)在窗體上,建立一個(gè)圖形框?qū)ο螅╬ictureBox1),選擇圖形框?qū)ο髮傩灾械腎mage屬性,如圖12所示。(2)單擊Image屬性右側(cè)的【】,彈出一個(gè)“選擇資源”窗口,在該窗口中選擇“本地資源”,單擊【導(dǎo)入(M).】將彈出一個(gè)“打開”對話框,如圖13所示。圖12 Image屬性圖13“打開”對話框(3)選擇圖像文件后,單擊【打開】按鈕。方法(二)、使用“打開文件”對話框輸入圖像在窗體上添加一個(gè)命令按鈕(button1)和一個(gè)圖形框?qū)ο螅╬ictureBox1),雙擊命令按鈕,在響應(yīng)方法中輸入如下代碼:private void button1_Click(object sender, EventArgs e) OpenFileDialog ofdlg = new OpenFileDialog(); ofdlg.Filter = BMP File(*.bmp)|*.bmp; if (ofdlg.ShowDialog() = DialogResult.OK) Bitmap image = new Bitmap(ofdlg.FileName); pictureBox1.Image = image; 執(zhí)行該程序時(shí),使用“打開文件”對話框,選擇圖像文件,該圖像將會被打開,并顯示在pictureBox1圖像框中?!纠?】圖像輸入。采用方法(二)來實(shí)現(xiàn)圖像的輸入。設(shè)計(jì)步驟如下:(1)建立如圖14所示的項(xiàng)目界面,在窗體上加入【打開圖像】命令按鈕和一個(gè)PictureBox控件。(2)雙擊【打開圖像】命令按鈕,編輯按鈕的單擊事件響應(yīng)函數(shù),其代碼同方法(二)中所寫代碼,在此不再重復(fù)。圖14 圖像輸入(3)運(yùn)行后單擊【打開圖像】按鈕,彈出一個(gè)“打開文件”對話框,選擇圖象文件名,運(yùn)行結(jié)果如圖15所示。圖15 運(yùn)行結(jié)果2圖像的保存保存圖像的步驟如下:(1)當(dāng)使用按鈕和保存對話框保存文件時(shí),加入保存按鈕和PictureBox控件,窗體設(shè)計(jì)如圖16所示。(2)保存命令鈕的單擊事件的響應(yīng)函數(shù)代碼如下:private void button2_Click(object sender, EventArgs e) string str; Bitmap box1 = new Bitmap(pictureBox1.Image); SaveFileDialog sfdlg = new SaveFileDialog(); sfdlg.Filter = bmp文件(*.BMP)|*.BMP|All File(*.*)|*.*; sfdlg.ShowDialog(); str = sfdlg.FileName; box1.Save(str); 執(zhí)行該過程時(shí),將打開“另存為”對話框,如圖17所示。圖16 保存圖像圖17 “另存為”對話框選擇圖像文件的保存路徑。3圖像格式的轉(zhuǎn)換使用Bitmap對象的Save方法,可以把打開的圖像保存為不同的文件格式,從而實(shí)現(xiàn)圖像格式的轉(zhuǎn)換。在上述例子中添加一個(gè)命令按鈕,雙擊該命令按鈕,編輯其相應(yīng)代碼如下:private void button3_Click(object sender, EventArgs e)string str; Bitmap box1 = new Bitmap(pictureBox1.Image); SaveFileDialog sfdlg = new SaveFileDialog(); sfdlg.Filter = bmp文件(*.jpeg)|*.jpeg|All File(*.*)|*.*; sfdlg.ShowDialog(); str = sfdlg.FileName;box1.Save(str,System.Drawing.Imaging.ImageFormat.Jpeg);Bitmap對象的Save方法中的第二個(gè)參數(shù)指定了圖像保存的格式。Imaging.ImageFormat支持的格式如表9所示:表9 Imaging.ImageFormat支持的格式名稱說明 Bmp獲取位圖圖像格式(BMP)。Emf獲取增強(qiáng)型Windows圖元文件圖像格式(EMF)。Exif獲取可交換圖像文件(Exif)格式。 Gif獲取圖形交換格式(GIF)圖像格式。 Guid獲取表示此ImageForma 對象的Guid結(jié)構(gòu)。Icon獲取Windows圖標(biāo)圖像格式。Jpeg獲取聯(lián)合圖像專家組(JPEG)圖像格式。MemoryBmp獲取內(nèi)存位圖圖像格式。Png獲取W3C可移植網(wǎng)絡(luò)圖形
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)注行業(yè)發(fā)展熱點(diǎn)的2025年市場營銷理論考試試題及答案
- 2025年醫(yī)學(xué)專業(yè)執(zhí)業(yè)考試試卷及答案
- 2025年心理測量與評估方法綜合考核試題及答案
- 2025年現(xiàn)代藝術(shù)與文化創(chuàng)新的考試試題及答案
- 2025年心理咨詢師資格考試試卷及答案
- 2025年水資源管理與保護(hù)課程考試卷及答案
- 2025年人工智能與機(jī)器學(xué)習(xí)基礎(chǔ)試卷及答案
- 北師大版(2024)七年級下冊英語期末復(fù)習(xí):Unit1~6語法練習(xí)100題(含答案)
- 2025年建筑設(shè)計(jì)基礎(chǔ)知識測試卷及答案
- 2025年建筑經(jīng)濟(jì)與管理綜合能力考試試卷及答案
- 云南省昆明市呈貢區(qū)2023-2024學(xué)年五年級下學(xué)期7月期末道德與法治試題
- 國開學(xué)習(xí)網(wǎng)《小企業(yè)管理基礎(chǔ)》形考任務(wù)1-4答案
- 2024年湖北武漢市法院系統(tǒng)雇員制審判輔助人員招聘245人歷年高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 2024年安徽省農(nóng)業(yè)信貸融資擔(dān)保有限公司招聘筆試參考題庫附帶答案詳解
- 《新能源汽車動(dòng)力電池及管理系統(tǒng)檢修》 課件 模塊1 新能源汽車動(dòng)力電池及管理系統(tǒng)認(rèn)知
- 地方病防治課件
- 住院醫(yī)師規(guī)范化培訓(xùn)急診科出科理論考核A卷
- 供應(yīng)商稽核查檢表
- 免疫檢驗(yàn) 免疫應(yīng)答之 非特異性免疫
- GB/T 20490-2023鋼管無損檢測無縫和焊接鋼管分層缺欠的自動(dòng)超聲檢測
- 生活中的化學(xué)知識課件
評論
0/150
提交評論