《Visual-C-NET程序設計教程與上機指導》第9章圖形圖像編程講解課件_第1頁
《Visual-C-NET程序設計教程與上機指導》第9章圖形圖像編程講解課件_第2頁
《Visual-C-NET程序設計教程與上機指導》第9章圖形圖像編程講解課件_第3頁
《Visual-C-NET程序設計教程與上機指導》第9章圖形圖像編程講解課件_第4頁
《Visual-C-NET程序設計教程與上機指導》第9章圖形圖像編程講解課件_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第9章 圖形圖像編程 教學提示:本章主要介紹圖形圖像編程的基本概念,如設備環(huán)境、坐標系統(tǒng),介紹了圖形設備接口、繪圖工具、繪圖函數、位圖的應用,并結合實例介紹了基于 .NET框架的GDI+編程方法。 教學目標:通過本章的學習,掌握圖形圖像編程的基本概念,熟悉繪圖工具、繪圖函數的應用以及基于.NET框架的GDI+編程方法。第9章 圖形圖像編程 教學提示:本章主要介9.1 圖形編程的基本概念 支持圖形是Windows編程的一個核心部分,因為在Windows當中,每一個屏幕輸出,無論是文本、圖像或圖片,都是作為圖形繪制到屏幕上的。Windows提供了圖形設備接口(Graphical Device In

2、terface,簡稱GDI)來實現繪制圖形的功能。GDI提供了一組預定義的GDI對象,如畫筆、畫刷等,讓用戶可以在任何設備上繪圖。實際上,GDI起到了應用程序和實際輸出設備之間的接口作用,如圖9.1所示。圖9.1 GDI在Windows系統(tǒng)中的作用9.1 圖形編程的基本概念 支持圖形是Win9.2 使用GDI對象編寫圖形程序9.2.1 GDI對象9.2.2 使用畫筆工具CPen9.2.3 使用畫刷工具CBrush9.2.4 使用字體工具CFont9.2.5 編寫一個簡單的繪圖程序MyPainter9.2 使用GDI對象編寫圖形程序9.2.1 GDI對象9.2.1 GDI對象 除了設備環(huán)境之外,

3、Windows也提供一套GDI對象。不同的繪圖工具(如畫筆和畫刷)和繪圖屬性(如顏色和字體)都叫作GDI對象。MFC定義了幾種GDI對象類型,包括畫筆、畫刷以及字體工具等,具體如下:筆 CPen刷子 CBrust字體 CFont位圖 CBitmap調色板 CPalette區(qū)域 CRgn返回9.2.1 GDI對象 除了設備環(huán)境之外,Win9.2.2 使用畫筆工具CPen創(chuàng)建一個畫筆,僅需提供畫筆的線型、寬度和顏色。返回9.2.2 使用畫筆工具CPen創(chuàng)建一個畫筆,僅需提供畫筆9.2.3 使用畫刷工具CBrush 對于用畫筆畫出的封閉圖形,畫刷可以用特定的顏色或圖形來填滿它。可創(chuàng)建實心和圖形畫刷,

4、甚至可以包含指定的位圖來創(chuàng)建一個畫刷。返回9.2.3 使用畫刷工具CBrush 對于用9.2.4 使用字體工具CFont Windows字體的信息是用LOGFONT結構描述的。LOGFONT結構使用了14個字段保存完整的字體信息描述,如表9.3所示。返回9.2.4 使用字體工具CFont Wind表9.3 LOGFONT結構包含的字體信息字 段描 述lfHeight字體高度lfWidth字體寬度lfEscapement畫文本的角度lfOrientation字體傾斜的角度lfWeight字體的粗細lfItalic是否斜體,非零表示斜體lfUnderline是否有下劃線,非零表示有下劃線lfStr

5、ikeOut是否鏤空,非零表示字體鏤空lfCharSet字體字符集lfOutPrecision如何匹配字體lfClipPrecision如何剪貼字體lfQuality字體的打印質量lfPitchAndFamily字體間距和字體族lfFaceName字體名稱返回表9.3 LOGFONT結構包含的字體信息字 段描 述9.2.5 編寫一個簡單的繪圖程序MyPainter 通過上面的學習,我們了解了GDI繪圖工具的基本用法。下面我們來建立一個簡單的繪圖程序:MyPaint,它實現鼠標繪圖的功能。要實現鼠標繪圖,可以這樣考慮:鼠標左鍵按下時開始繪圖,記錄下當時的坐標作為起點;鼠標移動時,每移動到一個新位

6、置就從起點畫一條直線到該新位置,然后把當前位置又作為新的起點;鼠標左鍵松開時,繪圖結束。返回9.2.5 編寫一個簡單的繪圖程序MyPainter 9.3 位圖的使用 Windows用位圖(Bitmap)來顯示和保存圖像,從單色到24位真彩色圖像都可以儲存到位圖中。 位圖實際上是一個像素值陣列。根據顏色精度的不同,每一個像素可以用1、4、8或24個位來表示。黑白位圖可以用一位代表一個像素,因為1位已經能標識兩種顏色了;16色位圖用4位表示一個像素,256色的位圖每一個字節(jié)存儲一個像素,而真彩色位圖中每個像素用3個字節(jié)來表示,紅、綠、藍3種顏色分量分別占用一個字節(jié)。位圖分為設備相關位圖(DDB)和

7、與設備無關的位圖(DIB),二者有不同的用途。 9.3.1 設備相關位圖 9.3.2 設備無關位圖9.3 位圖的使用 Windows用位圖(B9.3.1 設備相關位圖 DDB(Device-Dependent Bitmap)依賴于具體設備,這主要體現在以下兩個方面:DDB的顏色模式必須與輸出設備相一致。例如,如果當前的顯示設備是256色模式,那么DDB必然也是256色的,即一個像素用一個字節(jié)表示。在256色以下的位圖中儲存的像素值是系統(tǒng)調色板的索引,其顏色依賴于系統(tǒng)調色板。由于DDB高度依賴輸出設備,所以DDB只能存在于內存中,它要么在視頻內存中,要么在系統(tǒng)內存中。而且,DDB不能用來長期存儲

8、色彩豐富的位圖,對于那些顏色比較豐富的位圖,只有使用節(jié)將要介紹的DIB才能長期保存。返回9.3.1 設備相關位圖 DDB(Devic9.3.2 設備無關位圖1. 什么是設備無關位圖2. DIB的結構3. 自己編寫一個DIB類返回9.3.2 設備無關位圖1. 什么是設備無關位圖返回1. 什么是設備無關位圖 前面我們說過,位圖實際上是一個像素值陣列。如果位圖文件中的每個顏色值都包含完整的RGB數值,那么,由于這個顏色值完全在位圖中得到定義,這個文件就是一個設備無關位圖。如果每個顏色值實際上都是對某個顏色表的字節(jié)索引,而且位圖同時包含了這個顏色表,那么這個文件仍然是設備無關的。像這樣的顏色索引常用于

9、壓縮位圖的大小,一個8位索引只占用32位RGB值的1/4。設備無關位圖(Device Independent Bitmaps,簡稱DIB)由對顏色表的索引組成,這個顏色表在系統(tǒng)的顯卡中被定義。返回1. 什么是設備無關位圖 前面我們說過,位2. DIB的結構 要想使用DIB,首先應該先了解DIB的結構。在內存中,一個完整的DIB由兩部分組成:一個BITMAPINFO結構和一個存儲像素陣列的數組。返回2. DIB的結構 要想使用DIB,首先應該先了解D3. 自己編寫一個DIB類 對DIB的操作比較復雜,我們現在編寫一個名為CDib的較簡單的DIB類,該類封裝了DIB的基本操作,它的主要成員函數包括

10、:BOOL Load(LPCTSTR lpszFileName); BOOL Save( LPCTSTR pszFilename); BOOL SetPalette( CDC * pDC); BOOL Draw( CDC *pDC, int nX = 0, int nY = 0, int nWidth = -1, int nHeight = -1 );返回3. 自己編寫一個DIB類 對DIB的操作9.3 位圖的使用 Windows用位圖(Bitmap)來顯示和保存圖像,從單色到24位真彩色圖像都可以儲存到位圖中。 位圖實際上是一個像素值陣列。根據顏色精度的不同,每一個像素可以用1、4、8或24

11、個位來表示。黑白位圖可以用一位代表一個像素,因為1位已經能標識兩種顏色了;16色位圖用4位表示一個像素,256色的位圖每一個字節(jié)存儲一個像素,而真彩色位圖中每個像素用3個字節(jié)來表示,紅、綠、藍3種顏色分量分別占用一個字節(jié)。位圖分為設備相關位圖(DDB)和與設備無關的位圖(DIB),二者有不同的用途。 9.3.1 設備相關位圖 9.3.2 設備無關位圖9.3 位圖的使用 Windows用位圖(B9.3.1 設備相關位圖 DDB(Device-Dependent Bitmap)依賴于具體設備,這主要體現在以下兩個方面:DDB的顏色模式必須與輸出設備相一致。例如,如果當前的顯示設備是256色模式,那

12、么DDB必然也是256色的,即一個像素用一個字節(jié)表示。在256色以下的位圖中儲存的像素值是系統(tǒng)調色板的索引,其顏色依賴于系統(tǒng)調色板。由于DDB高度依賴輸出設備,所以DDB只能存在于內存中,它要么在視頻內存中,要么在系統(tǒng)內存中。而且,DDB不能用來長期存儲色彩豐富的位圖,對于那些顏色比較豐富的位圖,只有使用節(jié)將要介紹的DIB才能長期保存。返回9.3.1 設備相關位圖 DDB(Devic9.3.2 設備無關位圖1. 什么是設備無關位圖2. DIB的結構3. 自己編寫一個DIB類返回9.3.2 設備無關位圖1. 什么是設備無關位圖返回1. 什么是設備無關位圖 前面我們說過,位圖實際上是一個像素值陣列

13、。如果位圖文件中的每個顏色值都包含完整的RGB數值,那么,由于這個顏色值完全在位圖中得到定義,這個文件就是一個設備無關位圖。如果每個顏色值實際上都是對某個顏色表的字節(jié)索引,而且位圖同時包含了這個顏色表,那么這個文件仍然是設備無關的。像這樣的顏色索引常用于壓縮位圖的大小,一個8位索引只占用32位RGB值的1/4。設備無關位圖(Device Independent Bitmaps,簡稱DIB)由對顏色表的索引組成,這個顏色表在系統(tǒng)的顯卡中被定義。返回1. 什么是設備無關位圖 前面我們說過,位圖2. DIB的結構 要想使用DIB,首先應該先了解DIB的結構。在內存中,一個完整的DIB由兩部分組成:一

14、個BITMAPINFO結構和一個存儲像素陣列的數組。返回2. DIB的結構 要想使用DIB,首先應該先了解3. 自己編寫一個DIB類 對DIB的操作比較復雜,我們現在編寫一個名為CDib的較簡單的DIB類,該類封裝了DIB的基本操作,它的主要成員函數包括:BOOL Load(LPCTSTR lpszFileName); BOOL Save( LPCTSTR pszFilename); BOOL SetPalette( CDC * pDC); BOOL Draw( CDC *pDC, int nX = 0, int nY = 0, int nWidth = -1, int nHeight = -

15、1 );返回3. 自己編寫一個DIB類 對DIB的操作9.4 基于 .NET框架的GDI+編程 GDI+是GDI的擴展,也是用于Microsoft Windows XP的圖形設備接口。同GDI一樣,GDI+也用來在屏幕或打印機上顯示信息,并可以由開發(fā)人員用來創(chuàng)建設備無關的應用程序。而且,GDI+的功能比GDI更強大。GDI+包含在 .NET框架當中,可以用來創(chuàng)建功能強大的圖形程序。GDI+程序是通過C+托管程序實現的。9.4.1 GDI+的新功能9.4.2 GDI+命名空間9.4.3 GDI+中常用的類9.4.4 用GDI+編寫圖形程序9.4 基于 .NET框架的GDI+編程 GDI+是9.4

16、.1 GDI+的新功能 GDI+的API除了比GDI更簡單靈活外,還加入了許多新功能,比如:色彩改進。GDI+擁有了更多的顏色,并與其他的顏色,如Windows的顏色兼容。獨立路徑支持。漸變畫刷?;鶖禈訔l。矩陣對象和區(qū)域變換。Alpha混色。返回9.4.1 GDI+的新功能 GDI+的A9.4.2 GDI+命名空間 命名空間GDI+在Drawing命名空間和它的5個次命名空間里定義。所有Drawing代碼存在于System.Drawing.DLL程序集里。這些命名空間包括:System.Drawing System.Drawing.Design System.Drawing.Printing System.Drawing.Imaging System.Drawing.Drawing2D System.Drawing.Text返回9.4.2 GDI+命名空間 命名空間GDI9.4.3 GDI+中常用的類 與GDI不同,GDI+不需要傳遞句柄或設備環(huán)境給GDI函數。在GDI+中,我們使用Graphics對象并直接調用其方法實現繪圖功能。GDI+使用面向對象的模式,

溫馨提示

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

評論

0/150

提交評論