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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

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

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

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

5、ikeOut是否鏤空,非零表示字體鏤空l(shuí)fCharSet字體字符集lfOutPrecision如何匹配字體lfClipPrecision如何剪貼字體lfQuality字體的打印質(zhì)量lfPitchAndFamily字體間距和字體族lfFaceName字體名稱返回表9.3 LOGFONT結(jié)構(gòu)包含的字體信息字 段描 述9.2.5 編寫一個(gè)簡(jiǎn)單的繪圖程序MyPainter 通過(guò)上面的學(xué)習(xí),我們了解了GDI繪圖工具的基本用法。下面我們來(lái)建立一個(gè)簡(jiǎn)單的繪圖程序:MyPaint,它實(shí)現(xiàn)鼠標(biāo)繪圖的功能。要實(shí)現(xiàn)鼠標(biāo)繪圖,可以這樣考慮:鼠標(biāo)左鍵按下時(shí)開(kāi)始繪圖,記錄下當(dāng)時(shí)的坐標(biāo)作為起點(diǎn);鼠標(biāo)移動(dòng)時(shí),每移動(dòng)到一個(gè)新位

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

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

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

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

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. 自己編寫一個(gè)DIB類 對(duì)DIB的操作9.3 位圖的使用 Windows用位圖(Bitmap)來(lái)顯示和保存圖像,從單色到24位真彩色圖像都可以儲(chǔ)存到位圖中。 位圖實(shí)際上是一個(gè)像素值陣列。根據(jù)顏色精度的不同,每一個(gè)像素可以用1、4、8或24

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

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

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

14、個(gè)BITMAPINFO結(jié)構(gòu)和一個(gè)存儲(chǔ)像素陣列的數(shù)組。返回2. DIB的結(jié)構(gòu) 要想使用DIB,首先應(yīng)該先了解3. 自己編寫一個(gè)DIB類 對(duì)DIB的操作比較復(fù)雜,我們現(xiàn)在編寫一個(gè)名為CDib的較簡(jiǎn)單的DIB類,該類封裝了DIB的基本操作,它的主要成員函數(shù)包括: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. 自己編寫一個(gè)DIB類 對(duì)DIB的操作9.4 基于 .NET框架的GDI+編程 GDI+是GDI的擴(kuò)展,也是用于Microsoft Windows XP的圖形設(shè)備接口。同GDI一樣,GDI+也用來(lái)在屏幕或打印機(jī)上顯示信息,并可以由開(kāi)發(fā)人員用來(lái)創(chuàng)建設(shè)備無(wú)關(guān)的應(yīng)用程序。而且,GDI+的功能比GDI更強(qiáng)大。GDI+包含在 .NET框架當(dāng)中,可以用來(lái)創(chuàng)建功能強(qiáng)大的圖形程序。GDI+程序是通過(guò)C+托管程序?qū)崿F(xiàn)的。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更簡(jiǎn)單靈活外,還加入了許多新功能,比如:色彩改進(jìn)。GDI+擁有了更多的顏色,并與其他的顏色,如Windows的顏色兼容。獨(dú)立路徑支持。漸變畫刷?;鶖?shù)樣條。矩陣對(duì)象和區(qū)域變換。Alpha混色。返回9.4.1 GDI+的新功能 GDI+的A9.4.2 GDI+命名空間 命名空間GDI+在Drawing命名空間和它的5個(gè)次命名空間里定義。所有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+不需要傳遞句柄或設(shè)備環(huán)境給GDI函數(shù)。在GDI+中,我們使用Graphics對(duì)象并直接調(diào)用其方法實(shí)現(xiàn)繪圖功能。GDI+使用面向?qū)ο蟮哪J剑?/p>

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論