數據庫系統課件:第8章 圖形圖像處理 _第1頁
數據庫系統課件:第8章 圖形圖像處理 _第2頁
數據庫系統課件:第8章 圖形圖像處理 _第3頁
數據庫系統課件:第8章 圖形圖像處理 _第4頁
數據庫系統課件:第8章 圖形圖像處理 _第5頁
已閱讀5頁,還剩49頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第8章 圖形圖像處理8.1 圖形圖像基礎知識8.2 繪制基本圖形8.3 填充圖形8.4 圖像處理8.5 圖形與圖像的平移、旋轉與縮放8.6 文字處理8.1圖形圖像繪制基礎知識8.1.1 GDI+概述 GDI+:Graphics Device Interface (圖形設備接口),它提供了高級圖形圖像處理功能。在C#中,通過一套部署為托管代碼的類來展現提供的圖形圖像處理功能,這套類被稱為GDI+的托管類。利用GDI+的托管類可以輕松實現顏色漸變、透明處理、紋理處理、拉伸和縮放等多種高級功能。 GDI+主要提供了三類服務: 1.二維矢量圖形處理 2.二維圖像處理 3.文字顯示8.1.1 GDI+概

2、述(續)在C#中,所有圖形圖像處理功能都包含在以下名稱空間下: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名稱空間 提供了高級字體和

3、文本排版功能 8.1 .1 GDI+使用的坐標系1. GDI+坐標系中的基本結構Point表示某個特定位置相對于原點的水平和垂直距離。例如: Point p = new Point (1,1);Size也有兩個整型屬性來表示水平和垂直距離Width和Height。例如:Size s = new Size (5,5);Rectangle用來指定矩形的坐標,它由一個Point和一個Size組成,其中Point表示矩形左上角,Size表示矩形大小。8.1 .1 GDI+使用的坐標系(續)例如: 1) 在構造函數中分別指定x坐標、y坐標、寬度和高度。 Rectangle r1 = new Rectan

4、gle (1,2,5,6); 2) 在構造函數中指定Point位置和Size結構。 Point p = new Point (1,2); Size s = new Size (5,6); Rectangle r2 = new Rectangle (p, s);8.1 .1 GDI+使用的坐標系(續)2.GDI+中坐標系的分類世界坐標系(World coordinates)是一種通用的坐標系,適用于任何計算機設備。設備坐標系(Device coordinates)是指顯示設備或打印設備使用的坐標系,它的特點是以設備上的像素點為單位。頁面坐標系(Page coordinates)是指某種映射模式下

5、的一種坐標系。默認情況下,世界坐標系、設備坐標系和頁面坐標系是 一致的。8.1 .1 GDI+使用的坐標系(續)3. 不同坐標系的轉換調用GDI+里的Graphics對象進行操作時,輸入的坐標為世界坐標系中的坐標,而在屏幕或者打印機上顯示的是設備坐標系中的坐標。因此,每次輸出時,系統都會自動進行兩次坐標變換第一次是從世界坐標向頁面坐標的世界變換(world transformation),第二次是從頁面坐標向設備坐標的頁面變換(page transformation)。在程序中,可以通過調用Graphics對象的TranslateTransform方法改變世界變換的原點,通過設置 Graphi

6、cs對象的PageUnit屬性改變頁面變換的度量單位。8.1 .1 GDI+使用的坐標系(續)【例9-1 】不同坐標系之間的轉換示例 private void Form1_Paint(object sender, PaintEventArgs e) Graphics myGraphics = e.Graphics; myGraphics.TranslateTransform(0.5F, 0.5F); myGraphics.PageUnit = GraphicsUnit.Inch; Pen myPen = new Pen(Color.Black, 1 / myGraphics.DpiX); my

7、Graphics.DrawLine(myPen, 0, 0, 2, 2); 上面的代碼分別調用了Graphics對象的世界變換和頁面變換,使用英寸作為度量單位,并讓坐標系的原點距工作區左邊緣0.5英寸、距工作區頂部0.5英寸,然后從(0,0)到(2,2)繪制一條直線。右圖為運行效圖。XY12128.1.2 Graphics類 繪制圖形圖像前,首先必須創建Graphics對象,然后利用這個對象繪制直線、曲線、橢圓等圖形圖像。有三種常見的創建Graphics對象的方法。 1.在窗體或控件的Paint事件中獲取Graphics對象。例如: private void Form1_Paint() Gra

8、phics g = e.Graphics; 8.1.2 Graphics類(續) 2.通過當前窗體的CreateGraphics方法,把當前窗體的畫筆、字體、顏色作為默認值,獲取對Graphics對象的引用。例如: Graphics g = this.CreateGraphics(); 3. 從繼承自圖像的任何對象創建Graphics對象,例如: Bitmap myBitmap = new Bitmap(C:mytest1PicsmyPic.bmp); Graphics g = Graphics.FromImage(myBitmap); 8.1.3 顏色 顏色封裝在System.Drawing

9、.Color結構中。人眼可以分辨的任何顏色都是由一定的紅、綠、藍三色光組成。任何一種顏色都可以有四個分量:R:紅色,取值范圍0255,0表示沒有紅色成分,255為飽和紅色;G:綠色,取值范圍0255,0表示沒有綠色成分,255為飽和綠色;B:藍色,取值范圍0255,0表示沒有藍色成分,255為飽和藍色;A:Alpha值,即透明度,取值范圍0255,0表示完全透明,255表示完全不透明。 8.1.3 顏色(續) 在代碼中聲明顏色的方式常用有兩種: 1.調用靜態方法Color.FromArgb()指定任意顏色,這種方法有兩種常用形式。第一種形式為直接指定三種顏色,方法原型為: Public sta

10、tic Color FromArgb (int red,int green,int blue); 三個參數分別表示R、G、B三色,Alpha值使用默認值255,即完全不透明。例如: Color red = Color.FromArgb(255, 0, 0);第二種形式為四個參數,方法原型為: Public static Color FromArgb (int alpha,int red,int green, int blue); 四個參數分別表示透明度、R、G、B三色值。8.1.3 顏色(續)2.系統預定義顏色 System.Drawing.Color結構中提供了許多靜態性,每個屬性返回一個命

11、名顏色,在Color結構中已經預定義了141種顏色,可以直接使用。例如: this.BackColor = Color.White;8.1.4 Paint事件在C#程序中,最簡單的方式就是在Paint事件中繪制圖形圖像,任何一個控件,包括窗體本身,系統都提供了對應的Paint事件。如果在控件的Paint事件中利用傳遞的參數獲取Graphics對象,則繪制的圖形圖像僅在該控件內顯示。如果在窗體的Paint事件中繪制,則繪制的圖形圖像在該窗體內顯示。8.2 繪制基本圖形8.2.1 創建畫筆畫筆(Pen) 畫筆可用于繪制繪制具有指定寬度和樣式的直線、曲線或輪廓形狀。 下面的示例說明如何創建一支基本的

12、藍色畫筆: Pen myPen = new Pen(Color.Blue); Pen myPen = new Pen(Color.Blue, 10.5f); 也可以從畫刷對象創建畫筆對象,例如: SolidBrush myBrush = new SolidBrush(Color.Red); Pen myPen = new Pen(myBrush); Pen myPen = new Pen(myBrush, 5); 8.2.2 繪制直線所有繪制圖形的方法都位于Graphics中。DrawLine方法:繪制一條直線,常用形式: 1) 繪制一條連接指定兩個Point結構的線。 public void

13、 DrawLine (Pen pen,Point pt1, Point pt2) 其中,Pen對象確定線條的顏色、寬度和樣式; Point結構確定起點和終點。 2) 繪制一條由坐標對指定的兩個點的線。 public void DrawLine (Pen pen,int x1, int y1,int x2,int y2) 其中,Pen對象確定線條的顏色、寬度和樣式; x1,y1為起點坐標,x2,y2為終點坐標。8.2.2 繪制直線在.NET框架中,有一個LineCap枚舉,該枚舉用于指定系統預定義的線帽,例如圓形、方形、三角形、菱形、箭頭等。在System.Drawing.Drawing2D命名

14、空間下,有一個AdjustableArrowCap類,利用該類可以自定義箭頭線帽的形狀。AdjustableArrowCap arrow = new AdjustableArrowCap(8, 10, false);Pen myPen = new Pen(Color.Blue, 2);myPen.CustomEndCap = arrow;Graphics類提供的TranslateTransform方法可以幫助我們實現平移坐標系的功能。8.2.2 繪制直線【例8-1】用毫米作為度量單位,繪制一條數學上使用的坐標軸,即讓坐標系的原點位于窗體中心,橫向從左到右為x正方向,縱向從下到上為y軸正方向,然

15、后在此坐標系統下繪制一條從(0,0)點到(20,20)的直線。運行效果如下:8.2.2 繪制直線【例8-2】利用DrawLines方法和將根據正弦函數計算出來的多個點之間用直線依次相連,構成正弦曲線顯示出來。設計界面和運行界面如下:8.2.3 矩形 繪制矩形的方法:public void DrawRectangle (Pen pen, Rectangle rect)該方法根據指定的矩形結構rect來繪制矩形。public void DrawRectangle (Pen pen, int x, int y, int width, int height)該方法通過矩形的左上角坐標(x,y)和寬(w

16、idth)、高(height)來繪制矩形。8.2.3 矩形 【例8-3】演示矩形的繪制方法。運行效果如下:8.2.4 多邊形多邊形是由3條或3條以上的邊組成的閉合圖形,例如三角形、矩形、五邊形和六邊形等都屬于多邊形。DrawPolygon方法:繪制多邊形的輪廓DrawPolygon方法一般用于繪制多邊形的輪廓,該方法常用形式如下: public void DrawPolygon (Pen pen, Point points)8.2.4 多邊形【例8-4】演示多邊形的繪制方法。設計界面和運行效果如下:8.2.5 曲線1. DrawCurve方法用光滑的曲線把給定的點連接起來,常用形式有: 1)

17、public void DrawCurve (Pen pen ,Point points ) 其中,Point結構類型的數組中指明各節點,默認彎曲強度為0.5。注意,數組中至少要有3個元素。 2) public void DrawCurve (Pen pen ,Point points,float tension ) 其中,tension指定彎曲強度,該值范圍為0.0f-1.0f,超出此范圍會產生異常。當彎曲強度為零時,就是直線。8.2.5 曲線(續)2. DrawClosedCurve方法 通過連接數組中節點畫一個平滑的曲線,此方法會自動把首尾節點連接起來構成封閉曲線。注意數組中的節點至少要

18、有3個點組成,默認彎曲強度為0.5。 1) public void DrawClosedCurve (Pen pen ,Point points ) 其中,Point結構類型的數組中指明各節點。 2) public void DrawClosedCurve (Pen pen ,Point points,float tension FillMode fillmode) 其中,fillmode指明曲線封閉區域內以何種方式填充。8.2.5 曲線(續)3. 貝塞爾曲線 每段貝塞爾曲線由4個點組成,兩個端點(p1為起點,p2為終點)和兩個控制點(c1和c2)。曲線不經過控制點,但是控制點如同一個磁體吸引

19、曲線,影響并引導曲線向某個方向拉伸。8.2.5 曲線(續)1) DrawBezier方法:繪制一段貝塞爾曲線的,常用形式: public void DrawBezier (Pen pen ,Point pt1,Point pt2,Point pt3,Point pt4 ) 其中pt1、pt2、pt3和pt4分別指定四個點。2) DrawBeziers方法:繪制多段貝塞爾曲線,常用形式: public void DrawBezier (Pen pen ,Point points) 其中points是Point結構的數組,第一段貝塞爾曲線由點數組中的第1-4個點繪制而成。以后每段曲線只需要3個點:

20、2個控制點和一個結束點。前一段曲線的結束點會自動被用作后一段曲線的起始點。8.2.5 曲線(續)【例8-5 】繪制曲線示例。 8.2.6 繪制橢圓和扇形1. 繪制橢圓(DrawEllipse方法) 1)給定橢圓左上角坐標和橢圓的外接矩形的寬度和高度 public void DrawEllipse(Pen pen, int x, int y, int width, int height); 其中, pen為Pen對象, x, y為橢圓左上角的坐標, width定義橢圓外接矩形的寬度, height定義橢圓外接矩形的高度。 2)給定橢圓外接矩形的結構 public void DrawEllipse

21、(Pen pen, Rectangle rect); 其中,rect為Rectangle結構,用于確定橢圓的邊界。8.2.6 繪制橢圓和扇形2. 繪制扇形(DrawPie方法) 1) public void Drawpie(Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle); 其中, pen為Pen對象, x, y為橢圓左上角的坐標, width定義扇形外接矩形的寬度, height定義扇形外接矩形的高度, startAngle為起始角度(以度為單位), sweepAngle為延伸角度。 2

22、) public void DrawPie(Pen pen, Rectangle rect, float startAngle, float sweepAngle); 其中,rect為Rectangle結構,用于確定扇形的外接矩形。 8.2.6 繪制橢圓和扇形【例8-6】演示橢圓和扇形的繪制方法。運行效果如下:8.3 填充圖形對于封閉的圖形來說,除了用與其對應的Draw方法繪制以外,每個封閉圖形都有其對應的以“Fill”為前綴的方法,例如與橢圓對應的填充方法為FillEllipse方法,與多邊形對應的填充方法為FillPolygon方法等。8.3.1 畫刷(續) 畫刷(Brush)畫刷是可以與

23、Graphics對象一起使用來創建實心形狀和呈現文本的對象??梢杂脕硖畛涓鞣N圖形形狀,如矩形、橢圓、餅型圖和多邊形等。下表列出了幾種不同類型的畫刷。 類說明SolidBrush用純色填充圖形TextureBrush用基于光柵的圖像(位圖、JPG等)填充圖形LinearGradientBrush用顏色漸變填充圖形PathGradientBrush用漸變效果填充圖形HatchBrush用各種圖案填充圖形8.3.2 單色畫刷1)使用SolidBrush類定義單色畫刷 SolidBrush類用于定義單色畫刷。該類可以填充圖形,比如矩形、橢圓、多邊形和路徑。例如:SolidBrush solidBrus

24、h = new SolidBrush(Color.Red);Rectangle r = new Rectangle(5, 10, 100, 100);g.FillEllipse(solidBrush, r); 8.3.2 單色畫刷【例8-7】單色畫刷演示示例。 運行結果如右圖所示:8.3.3 創建漸變畫刷(續) 2)使用LinearGradientBrush類定義線性漸變LinearGradientBrush對象用顏色線性漸變填充圖形。提供了以下三種構造函數: (1) 提供兩個點和兩種顏色。 Public LinearGradientBrush ( Point point1, Point po

25、int2, Color color1, Color color2) (2) 提供一個矩形和一個角度。 Public LinearGradientBrush (Rectangle rect ,Color color1,Color color2,float angle) (3) 指定漸變的模式。 Public LinearGradientBrush (Rectangle rect ,Color color1,Color color2,LinearGradientMode linearGradientMode) 8.3.3 漸變畫刷(續) 【例8-8 】顏色漸變效果。運行效果:8.3.4 填充陰影3

26、)使用HatchBrush類填充簡單圖案 HatchBrush類提供的畫刷可以用各種圖案填充圖形。通過Hatch類型可以設置影線樣式。在創建影線的畫刷時,能設定前景色、背景色和影線樣式。有56種不同的影線樣式枚舉,該枚舉可以參看System.Drawing.Drawing2D.HatchStyle枚舉。例如:HatchStyle.Horizontal水平線的圖案HatchStyle.ForwardDiagonal從左上到右下的對角線的線條圖案HatchStyle.DiagonalBrick 具有分層磚塊外觀的陰影HatchStyle.Shingle 帶有對角分層鵝卵石外觀的陰影HatchSty

27、le.Sphere具有球體彼此相鄰放置的外觀的陰影8.3.4 填充陰影【例8-9】陰影效果示例。效果如下: 8.3.5 填充紋理 4)使用TextureBrush類填充復雜圖像TextureBrush類使用圖像作為填充的樣式,它可以使用例如.bmp、.jpg、.png等格式的圖像。初始化一個新的TextureBrush對象需要指定填充的圖像。TextureBrush類有多個重載的構造函數,常用有:public TextureBrush (Image image, Rectangle rect)public TextureBrush (Image image,WrapMode wrapMode,

28、 Rectangle rect) 其中,image指定要填充的圖像;rect指定圖像的矩形塊;wrapMode指定如何填充圖像,這是一個枚舉類型,其值如表8-2所示。 8.3.5 填充紋理 【例8-10】創建TextureBrush示例。運行效果如下:8.3.6 填充路徑 5)使用PathGradientBrush類實現彩色漸變1GraphicsPath類GraphicsPath類用于創建路徑。利用GraphicsPath類,可以繪制形狀的輪廓、填充形狀內部和創建剪輯區域。下面的代碼創建一個路徑并在路徑中添加一個橢圓。GraphicsPath path = new GraphicsPath()

29、;path.AddEllipse(this.ClientRectangle);2PathGradientBrush類PathGradientBrush稱為路徑漸變畫刷,路徑漸變畫刷用于從中心向四周通過顏色漸變來填充路徑的內部區域。8.3.6 填充路徑 【例8-11】路徑和路徑畫刷的使用示例。運行效果:8.4 圖像處理對圖像的處理主要有:從文件或其他地方加載圖像或創建一個新的圖像、顯示圖像、修改圖像、把內存中的圖像保存到文件或其他存儲器中。 8.4 .1 圖像的繪制1. 圖像的顯示 GDI+提供了兩個類用來表示圖像:Bitmap類和Metafile類。 從文件中讀取一個位圖并在屏幕中顯示出此圖像

30、需要三個步驟: 創建一個Bitmap對象指明要顯示的圖像文件; 創建一個Graphics對象表明要使用繪圖平面; 通過調用Graphics對象的DrawImage方法顯示圖像。8.4 .1 圖像的繪制1) 創建Bitmap對象 Bitmap類有很多重載的構造函數,其中常用的有: Public Bitmap(string filename) 其中filename是圖像文件的名字。可以利用該構造函數創建Bitmap對象。例如: Bitmap bitmap = new Bitmap(filename.jpg);2) DrawImage方法 Graphics類的DrawImage方法用于在指定位置顯示

31、原始圖像或者縮放后的圖像。該方法的重載形式也非常多,其中常用的一種為: Public void DrawImage(Image image,int x,int y,int width, int height) 該方法在(x,y)位置點按指定的大小顯示圖像。利用此方法可以直接顯示縮放后的圖像。 8.4 .1 圖像的繪制【例8-12 】圖像繪制功能。運行效果:8.4.2 圖像的保存1.在窗體上繪制出圖形或圖像后,利用Image對象的Save方法可以將繪制的內容保存到文件中。2.Save方法有多種重載形式,常用形式為public void Save(string filename, ImageFormat format )其中,fileName為所要保存的文件

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論