版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第9章 圖形圖像編程 教學(xué)提示:本章主要介紹圖形圖像編程的基本概念,如設(shè)備環(huán)境、坐標(biāo)系統(tǒng),介紹了圖形設(shè)備接口、繪圖工具、繪圖函數(shù)、位圖的應(yīng)用,并結(jié)合實(shí)例介紹了基于 .NET框架的GDI+編程方法。 教學(xué)目標(biāo):通過本章的學(xué)習(xí),掌握圖形圖像編程的基本概念,熟悉繪圖工具、繪圖函數(shù)的應(yīng)用以及基于.NET框架的GDI+編程方法。第9章 圖形圖像編程 教學(xué)提示:本章主要介9.1 圖形編程的基本概念 支持圖形是Windows編程的一個核心部分,因?yàn)樵赪indows當(dāng)中,每一個屏幕輸出,無論是文本、圖像或圖片,都是作為圖形繪制到屏幕上的。Windows提供了圖形設(shè)備接口(Graphical Device In
2、terface,簡稱GDI)來實(shí)現(xiàn)繪制圖形的功能。GDI提供了一組預(yù)定義的GDI對象,如畫筆、畫刷等,讓用戶可以在任何設(shè)備上繪圖。實(shí)際上,GDI起到了應(yīng)用程序和實(shí)際輸出設(shè)備之間的接口作用,如圖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對象 除了設(shè)備環(huán)境之外,
3、Windows也提供一套GDI對象。不同的繪圖工具(如畫筆和畫刷)和繪圖屬性(如顏色和字體)都叫作GDI對象。MFC定義了幾種GDI對象類型,包括畫筆、畫刷以及字體工具等,具體如下:筆 CPen刷子 CBrust字體 CFont位圖 CBitmap調(diào)色板 CPalette區(qū)域 CRgn返回9.2.1 GDI對象 除了設(shè)備環(huán)境之外,Win9.2.2 使用畫筆工具CPen創(chuàng)建一個畫筆,僅需提供畫筆的線型、寬度和顏色。返回9.2.2 使用畫筆工具CPen創(chuàng)建一個畫筆,僅需提供畫筆9.2.3 使用畫刷工具CBrush 對于用畫筆畫出的封閉圖形,畫刷可以用特定的顏色或圖形來填滿它??蓜?chuàng)建實(shí)心和圖形畫刷,
4、甚至可以包含指定的位圖來創(chuàng)建一個畫刷。返回9.2.3 使用畫刷工具CBrush 對于用9.2.4 使用字體工具CFont Windows字體的信息是用LOGFONT結(jié)構(gòu)描述的。LOGFONT結(jié)構(gòu)使用了14個字段保存完整的字體信息描述,如表9.3所示。返回9.2.4 使用字體工具CFont Wind表9.3 LOGFONT結(jié)構(gòu)包含的字體信息字 段描 述lfHeight字體高度lfWidth字體寬度lfEscapement畫文本的角度lfOrientation字體傾斜的角度lfWeight字體的粗細(xì)lfItalic是否斜體,非零表示斜體lfUnderline是否有下劃線,非零表示有下劃線lfStr
5、ikeOut是否鏤空,非零表示字體鏤空lfCharSet字體字符集lfOutPrecision如何匹配字體lfClipPrecision如何剪貼字體lfQuality字體的打印質(zhì)量lfPitchAndFamily字體間距和字體族lfFaceName字體名稱返回表9.3 LOGFONT結(jié)構(gòu)包含的字體信息字 段描 述9.2.5 編寫一個簡單的繪圖程序MyPainter 通過上面的學(xué)習(xí),我們了解了GDI繪圖工具的基本用法。下面我們來建立一個簡單的繪圖程序:MyPaint,它實(shí)現(xiàn)鼠標(biāo)繪圖的功能。要實(shí)現(xiàn)鼠標(biāo)繪圖,可以這樣考慮:鼠標(biāo)左鍵按下時開始繪圖,記錄下當(dāng)時的坐標(biāo)作為起點(diǎn);鼠標(biāo)移動時,每移動到一個新位
6、置就從起點(diǎn)畫一條直線到該新位置,然后把當(dāng)前位置又作為新的起點(diǎn);鼠標(biāo)左鍵松開時,繪圖結(jié)束。返回9.2.5 編寫一個簡單的繪圖程序MyPainter 9.3 位圖的使用 Windows用位圖(Bitmap)來顯示和保存圖像,從單色到24位真彩色圖像都可以儲存到位圖中。 位圖實(shí)際上是一個像素值陣列。根據(jù)顏色精度的不同,每一個像素可以用1、4、8或24個位來表示。黑白位圖可以用一位代表一個像素,因?yàn)?位已經(jīng)能標(biāo)識兩種顏色了;16色位圖用4位表示一個像素,256色的位圖每一個字節(jié)存儲一個像素,而真彩色位圖中每個像素用3個字節(jié)來表示,紅、綠、藍(lán)3種顏色分量分別占用一個字節(jié)。位圖分為設(shè)備相關(guān)位圖(DDB)和
7、與設(shè)備無關(guān)的位圖(DIB),二者有不同的用途。 9.3.1 設(shè)備相關(guān)位圖 9.3.2 設(shè)備無關(guān)位圖9.3 位圖的使用 Windows用位圖(B9.3.1 設(shè)備相關(guān)位圖 DDB(Device-Dependent Bitmap)依賴于具體設(shè)備,這主要體現(xiàn)在以下兩個方面:DDB的顏色模式必須與輸出設(shè)備相一致。例如,如果當(dāng)前的顯示設(shè)備是256色模式,那么DDB必然也是256色的,即一個像素用一個字節(jié)表示。在256色以下的位圖中儲存的像素值是系統(tǒng)調(diào)色板的索引,其顏色依賴于系統(tǒng)調(diào)色板。由于DDB高度依賴輸出設(shè)備,所以DDB只能存在于內(nèi)存中,它要么在視頻內(nèi)存中,要么在系統(tǒng)內(nèi)存中。而且,DDB不能用來長期存儲
8、色彩豐富的位圖,對于那些顏色比較豐富的位圖,只有使用節(jié)將要介紹的DIB才能長期保存。返回9.3.1 設(shè)備相關(guān)位圖 DDB(Devic9.3.2 設(shè)備無關(guān)位圖1. 什么是設(shè)備無關(guān)位圖2. DIB的結(jié)構(gòu)3. 自己編寫一個DIB類返回9.3.2 設(shè)備無關(guān)位圖1. 什么是設(shè)備無關(guān)位圖返回1. 什么是設(shè)備無關(guān)位圖 前面我們說過,位圖實(shí)際上是一個像素值陣列。如果位圖文件中的每個顏色值都包含完整的RGB數(shù)值,那么,由于這個顏色值完全在位圖中得到定義,這個文件就是一個設(shè)備無關(guān)位圖。如果每個顏色值實(shí)際上都是對某個顏色表的字節(jié)索引,而且位圖同時包含了這個顏色表,那么這個文件仍然是設(shè)備無關(guān)的。像這樣的顏色索引常用于
9、壓縮位圖的大小,一個8位索引只占用32位RGB值的1/4。設(shè)備無關(guān)位圖(Device Independent Bitmaps,簡稱DIB)由對顏色表的索引組成,這個顏色表在系統(tǒng)的顯卡中被定義。返回1. 什么是設(shè)備無關(guān)位圖 前面我們說過,位2. DIB的結(jié)構(gòu) 要想使用DIB,首先應(yīng)該先了解DIB的結(jié)構(gòu)。在內(nèi)存中,一個完整的DIB由兩部分組成:一個BITMAPINFO結(jié)構(gòu)和一個存儲像素陣列的數(shù)組。返回2. DIB的結(jié)構(gòu) 要想使用DIB,首先應(yīng)該先了解D3. 自己編寫一個DIB類 對DIB的操作比較復(fù)雜,我們現(xiàn)在編寫一個名為CDib的較簡單的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. 自己編寫一個DIB類 對DIB的操作9.3 位圖的使用 Windows用位圖(Bitmap)來顯示和保存圖像,從單色到24位真彩色圖像都可以儲存到位圖中。 位圖實(shí)際上是一個像素值陣列。根據(jù)顏色精度的不同,每一個像素可以用1、4、8或24
11、個位來表示。黑白位圖可以用一位代表一個像素,因?yàn)?位已經(jīng)能標(biāo)識兩種顏色了;16色位圖用4位表示一個像素,256色的位圖每一個字節(jié)存儲一個像素,而真彩色位圖中每個像素用3個字節(jié)來表示,紅、綠、藍(lán)3種顏色分量分別占用一個字節(jié)。位圖分為設(shè)備相關(guān)位圖(DDB)和與設(shè)備無關(guān)的位圖(DIB),二者有不同的用途。 9.3.1 設(shè)備相關(guān)位圖 9.3.2 設(shè)備無關(guān)位圖9.3 位圖的使用 Windows用位圖(B9.3.1 設(shè)備相關(guān)位圖 DDB(Device-Dependent Bitmap)依賴于具體設(shè)備,這主要體現(xiàn)在以下兩個方面:DDB的顏色模式必須與輸出設(shè)備相一致。例如,如果當(dāng)前的顯示設(shè)備是256色模式,那
12、么DDB必然也是256色的,即一個像素用一個字節(jié)表示。在256色以下的位圖中儲存的像素值是系統(tǒng)調(diào)色板的索引,其顏色依賴于系統(tǒng)調(diào)色板。由于DDB高度依賴輸出設(shè)備,所以DDB只能存在于內(nèi)存中,它要么在視頻內(nèi)存中,要么在系統(tǒng)內(nèi)存中。而且,DDB不能用來長期存儲色彩豐富的位圖,對于那些顏色比較豐富的位圖,只有使用節(jié)將要介紹的DIB才能長期保存。返回9.3.1 設(shè)備相關(guān)位圖 DDB(Devic9.3.2 設(shè)備無關(guān)位圖1. 什么是設(shè)備無關(guān)位圖2. DIB的結(jié)構(gòu)3. 自己編寫一個DIB類返回9.3.2 設(shè)備無關(guān)位圖1. 什么是設(shè)備無關(guān)位圖返回1. 什么是設(shè)備無關(guān)位圖 前面我們說過,位圖實(shí)際上是一個像素值陣列
13、。如果位圖文件中的每個顏色值都包含完整的RGB數(shù)值,那么,由于這個顏色值完全在位圖中得到定義,這個文件就是一個設(shè)備無關(guān)位圖。如果每個顏色值實(shí)際上都是對某個顏色表的字節(jié)索引,而且位圖同時包含了這個顏色表,那么這個文件仍然是設(shè)備無關(guān)的。像這樣的顏色索引常用于壓縮位圖的大小,一個8位索引只占用32位RGB值的1/4。設(shè)備無關(guān)位圖(Device Independent Bitmaps,簡稱DIB)由對顏色表的索引組成,這個顏色表在系統(tǒng)的顯卡中被定義。返回1. 什么是設(shè)備無關(guān)位圖 前面我們說過,位圖2. DIB的結(jié)構(gòu) 要想使用DIB,首先應(yīng)該先了解DIB的結(jié)構(gòu)。在內(nèi)存中,一個完整的DIB由兩部分組成:一
14、個BITMAPINFO結(jié)構(gòu)和一個存儲像素陣列的數(shù)組。返回2. DIB的結(jié)構(gòu) 要想使用DIB,首先應(yīng)該先了解3. 自己編寫一個DIB類 對DIB的操作比較復(fù)雜,我們現(xiàn)在編寫一個名為CDib的較簡單的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. 自己編寫一個DIB類 對DIB的操作9.4 基于 .NET框架的GDI+編程 GDI+是GDI的擴(kuò)展,也是用于Microsoft Windows XP的圖形設(shè)備接口。同GDI一樣,GDI+也用來在屏幕或打印機(jī)上顯示信息,并可以由開發(fā)人員用來創(chuàng)建設(shè)備無關(guān)的應(yīng)用程序。而且,GDI+的功能比GDI更強(qiáng)大。GDI+包含在 .NET框架當(dāng)中,可以用來創(chuàng)建功能強(qiáng)大的圖形程序。GDI+程序是通過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更簡單靈活外,還加入了許多新功能,比如:色彩改進(jìn)。GDI+擁有了更多的顏色,并與其他的顏色,如Windows的顏色兼容。獨(dú)立路徑支持。漸變畫刷?;鶖?shù)樣條。矩陣對象和區(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+不需要傳遞句柄或設(shè)備環(huán)境給GDI函數(shù)。在GDI+中,我們使用Graphics對象并直接調(diào)用其方法實(shí)現(xiàn)繪圖功能。GDI+使用面向?qū)ο蟮哪J剑?/p>
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公共交通安全提升方案
- 患者安全文化建設(shè)及管理制度
- 2024-2030年中國螨除盡行業(yè)市場發(fā)展規(guī)模及投資可行性分析報(bào)告
- 2024-2030年中國蠔油醬行業(yè)生產(chǎn)銷售模式及投資前景展望報(bào)告
- 2024-2030年中國營養(yǎng)保健品行業(yè)銷售模式及投資潛力分析報(bào)告
- 2024-2030年中國膽酸行業(yè)市場運(yùn)營模式及未來發(fā)展動向預(yù)測報(bào)告
- 環(huán)保設(shè)備維修技術(shù)管理制度
- 2024-2030年中國硫鐵礦石產(chǎn)業(yè)發(fā)展規(guī)模及投資可行性研究報(bào)告版
- 2024-2030年中國礦山機(jī)械行業(yè)市場發(fā)展研究與提升競爭力策略分析報(bào)告
- 2024-2030年中國石化物流行業(yè)前景預(yù)測發(fā)展規(guī)劃建議報(bào)告
- 胎盤殘留護(hù)理查房課件
- 校醫(yī)務(wù)室托管投標(biāo)方案
- (初級)游泳救生員理論考試題庫 (新版)
- 天津市河北區(qū)2023-2024學(xué)年八年級上學(xué)期期中地理試題
- 急性肺栓塞多學(xué)科團(tuán)隊(duì)救治中國專家共識(2022版)解讀
- 第-17章-情景分析和壓力測試
- 中醫(yī)執(zhí)業(yè)醫(yī)師實(shí)踐技能考試第二站(中醫(yī)基本操作)
- 《預(yù)防為主生命至上》119消防安全日主題班會課件
- GA/T 2071-2023法庭科學(xué)生物檢材中四氫唑啉等5種咪唑啉類藥物檢驗(yàn)液相色譜-質(zhì)譜法
- 胺碘酮在急診合理應(yīng)用
- 系統(tǒng)諧振及過電壓
評論
0/150
提交評論