![畢業(yè)設(shè)計(jì)(論文)基于MFC的圖片瀏覽器的設(shè)計(jì)與實(shí)現(xiàn)_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-4/16/ffdcbbfc-8d73-4209-8ac2-6abbb2a392b0/ffdcbbfc-8d73-4209-8ac2-6abbb2a392b01.gif)
![畢業(yè)設(shè)計(jì)(論文)基于MFC的圖片瀏覽器的設(shè)計(jì)與實(shí)現(xiàn)_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-4/16/ffdcbbfc-8d73-4209-8ac2-6abbb2a392b0/ffdcbbfc-8d73-4209-8ac2-6abbb2a392b02.gif)
![畢業(yè)設(shè)計(jì)(論文)基于MFC的圖片瀏覽器的設(shè)計(jì)與實(shí)現(xiàn)_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-4/16/ffdcbbfc-8d73-4209-8ac2-6abbb2a392b0/ffdcbbfc-8d73-4209-8ac2-6abbb2a392b03.gif)
![畢業(yè)設(shè)計(jì)(論文)基于MFC的圖片瀏覽器的設(shè)計(jì)與實(shí)現(xiàn)_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-4/16/ffdcbbfc-8d73-4209-8ac2-6abbb2a392b0/ffdcbbfc-8d73-4209-8ac2-6abbb2a392b04.gif)
![畢業(yè)設(shè)計(jì)(論文)基于MFC的圖片瀏覽器的設(shè)計(jì)與實(shí)現(xiàn)_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-4/16/ffdcbbfc-8d73-4209-8ac2-6abbb2a392b0/ffdcbbfc-8d73-4209-8ac2-6abbb2a392b05.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第1章 緒 論圖像處理源自于二戰(zhàn)中的攝影偵察。當(dāng)時(shí),處理操作是通過光學(xué)方法來完成的,判讀工作則是由專門精于此道并能確定炸彈襲擊結(jié)果的人員來做。隨著20世紀(jì)60年代后期衛(wèi)星圖像的出現(xiàn),更多基于計(jì)算機(jī)的工作便開展起來。彩色合成的衛(wèi)星圖像,有時(shí)的確漂亮的讓人吃驚,它們已經(jīng)成為人類視覺文化和對我們這個(gè)行星進(jìn)行認(rèn)知的一個(gè)組成部分。1980年1月科學(xué)美國人發(fā)表了一幅被稱之為“plume 2”的著名圖像,它是1979年3月5日通過宇宙飛船旅行者1號在木星的衛(wèi)星上探測到的8次火山爆發(fā)中的第二次。這幅圖像在星際探險(xiǎn)圖像中是一個(gè)里程碑,人們第一次在宇宙中看到了正在爆發(fā)的火山。它也是圖像處理領(lǐng)域的一次偉大勝利。衛(wèi)星
2、圖像以及宇宙探測器所獲取的圖像直到近年來才大量應(yīng)用圖像處理技術(shù)。在這些技術(shù)中,對計(jì)算機(jī)圖像進(jìn)行數(shù)字化處理以得到想要獲得的效果,比如使圖像的某一部分或某一特性更加明顯。正如計(jì)算機(jī)圖形學(xué)一樣,直到近幾年,圖像處理仍然局限在一些實(shí)驗(yàn)室里使用,只有這些地方才能提供昂貴的圖像處理計(jì)算機(jī)來滿足處理大量高分辨率圖像的需要。隨著價(jià)格低廉的高性能計(jì)算機(jī)和諸如數(shù)碼相機(jī)及掃描儀這樣的圖像采集設(shè)備的出現(xiàn),我們已經(jīng)看到圖像處理技術(shù)在向公眾領(lǐng)域轉(zhuǎn)移。經(jīng)典的圖像處理技術(shù)很平常地被圖像設(shè)計(jì)人員用來處理圖片和生成圖像,比如修復(fù)圖片的缺陷、改變色彩、對比度等,或者通過圖像邊緣增強(qiáng)這樣的處理來改變整個(gè)圖片的外觀。目前圖像處理的主流
3、應(yīng)用是圖像的壓縮,即通過互聯(lián)網(wǎng)進(jìn)行傳遞或在可視電話和視頻會議中進(jìn)行動態(tài)視頻圖像的壓縮??梢曤娫捠钱?dāng)今結(jié)合計(jì)算機(jī)圖像和傳統(tǒng)圖像處理的技術(shù),以期產(chǎn)生很高壓縮比的交叉領(lǐng)域之一。所有這一切都是圖像的“數(shù)字表達(dá)”這一不可抗拒的發(fā)展趨勢的組成部分。事實(shí)上,20世紀(jì)最強(qiáng)大、應(yīng)用最廣泛的圖像形式電視圖像,也將不可避免的融入數(shù)字領(lǐng)域。數(shù)字圖像及其處理技術(shù)之所以發(fā)展的如此迅速并獲得廣泛的應(yīng)用,與其自身的優(yōu)點(diǎn)是息息相關(guān)的。1. 再現(xiàn)性好數(shù)字圖像處理與模擬圖像處理的根本不同在于,它不會因圖像的存儲、傳輸或復(fù)制等一系列變換操作而導(dǎo)致圖像質(zhì)量的退化。只要圖像在數(shù)字化時(shí)準(zhǔn)確地表現(xiàn)了原稿,則數(shù)字圖像處理過程始終能保持圖像的再
4、現(xiàn)。2. 處理精度高按目前的技術(shù),幾乎可將一幅模擬圖像數(shù)字化為任意大小的二維數(shù)組,這主要取決于圖像數(shù)字化設(shè)備的能力?,F(xiàn)代掃描儀可以把每個(gè)像素的灰度等級量化為16位甚至更高,這意味著圖像的數(shù)字化精度可以達(dá)到滿足任一應(yīng)用需求。對計(jì)算機(jī)而言,不論數(shù)組大小,也不論每個(gè)像素的位數(shù)多少,其處理程序幾乎是一樣的。換言之,從原理上講不論圖像的精度有多高,處理總是能實(shí)現(xiàn)的,只要在處理時(shí)改變程序中的數(shù)組參數(shù)就可以了?;叵胍幌聢D像的模擬處理,為了要把處理精度提高一個(gè)數(shù)量級,就要大幅度地改進(jìn)處理裝置,這在經(jīng)濟(jì)上是極不合算的。3. 適用面寬圖像可以來自于多種信息源,它們可以是可見光圖像,也可以是不可見的波譜圖像(例如x
5、射線圖像、射線圖像、超聲波圖像或紅外圖像等)。從圖像反映的客觀實(shí)體尺度看,可以小到電子顯微鏡圖像,大到航空照片、遙感圖像甚至天文望遠(yuǎn)鏡圖像。這些來自不同信息源的圖像只要被變換為數(shù)字編碼形式后,均是用二維數(shù)組表示的灰度圖像(彩色圖像也是由灰度圖像組合成的,例如rgb圖像由紅、綠、藍(lán)三個(gè)灰度圖像組合而成),因而均可用計(jì)算機(jī)來處理。即只要針對不同的圖像信息源,采取相應(yīng)的圖像信息采集措施,圖像的數(shù)字處理方法可適用于任何一種圖像。4. 靈活性高圖像處理大體上可分為圖像的像質(zhì)改善、圖像分析和圖像重建三大部分,每一部分均包含豐富的內(nèi)容。由于圖像的光學(xué)處理從原理上講只能進(jìn)行線性運(yùn)算,這極大地限制了光學(xué)圖像處理
6、能實(shí)現(xiàn)的目標(biāo)。而數(shù)字圖像處理不僅能完成線性運(yùn)算,而且能實(shí)現(xiàn)非線性處理,即凡是可以用數(shù)學(xué)公式或邏輯關(guān)系來表達(dá)的一切運(yùn)算均可用數(shù)字圖像處理實(shí)現(xiàn)。鑒于數(shù)字圖像自身的特點(diǎn),對其進(jìn)行處理也不是一步就能完成的過程??蓪⑺殖芍T多步驟,必須一個(gè)接一個(gè)地執(zhí)行這些步驟,直到提取出有用的數(shù)據(jù)。而這些步驟中,數(shù)據(jù)的存儲、表示又占有相當(dāng)重要的地位,可以說,這是圖像處理中最基本的技術(shù)。因此,掌握不同格式圖像的編碼解碼、讀寫、顯示等方法是必不可少的。為什么會需要如此眾多不同類型的圖像文件格式呢?簡單的回答就是因?yàn)橛刑嗖煌愋偷膱D像以及眾多不同需求的應(yīng)用。完整一些的回答還要考慮到市場份額、所有權(quán)以及在圖像工業(yè)中缺乏的必要
7、協(xié)調(diào)。但是,已經(jīng)有一些標(biāo)準(zhǔn)的文件格式被開發(fā)出來。許多其他圖像類型可以通過圖像轉(zhuǎn)換軟件很容易地轉(zhuǎn)換成這些文件格式,如本設(shè)計(jì)最終開發(fā)出的軟件就可以將圖像在bmp、pcx、tga、gif及jpeg之間互相轉(zhuǎn)換。與計(jì)算機(jī)圖像相關(guān)的一個(gè)領(lǐng)域就是計(jì)算機(jī)圖形學(xué)。計(jì)算機(jī)圖形學(xué)是計(jì)算機(jī)科學(xué)的一個(gè)特殊領(lǐng)域,它指的是通過計(jì)算機(jī)對可視數(shù)據(jù)進(jìn)行再現(xiàn),這包括為顯示或打印生成計(jì)算機(jī)圖像,以及為輸出到監(jiān)視器、打印機(jī)、照相機(jī)或其他能提供圖像的設(shè)備上生成和處理的任何圖像(真實(shí)的或人造的)。可以認(rèn)為計(jì)算機(jī)圖形學(xué)是計(jì)算機(jī)圖像技術(shù)的一部分,圖形設(shè)計(jì)師所使用的許多工具也正在被計(jì)算機(jī)圖像專業(yè)人士所采用。在計(jì)算機(jī)圖形學(xué)中,圖像數(shù)據(jù)的類型被分
8、為兩個(gè)主要種類:矢量和位圖。矢量圖像是指僅通過存儲關(guān)鍵點(diǎn)來表達(dá)線條、曲線和形體的方法。這些關(guān)鍵點(diǎn)足以對形體進(jìn)行定義,而將它變成圖像的過程稱之為渲染。當(dāng)圖像被渲染之后,它可以被認(rèn)為是位圖格式,其中每一個(gè)像素都具有與之相關(guān)的特定值。位圖圖像(也稱之為光柵圖像)可由圖像模型i(r, c)來表示,其中包含像素?cái)?shù)據(jù)以及某些文件格式存儲的相應(yīng)的亮度值。盡管有些文件被壓縮,但仍屬于位圖圖像的范疇,通常這些類型的圖像包含頭信息和原始圖像數(shù)據(jù)。文件頭必須包含的信息為:(1)行數(shù)(高);(2)列數(shù)(寬);(3)每像素位數(shù);(4)文件類型。此外,對于某些復(fù)雜的文件格式,文件頭還必須包含有關(guān)所使用的壓縮類型的信息,以
9、及創(chuàng)建圖像所需要的其他必要的參數(shù)。本設(shè)計(jì)所討論和處理的圖像均為位圖圖像。第2章 軟件開發(fā)平臺及編程模式在系統(tǒng)的設(shè)計(jì)與開發(fā)中,軟件開發(fā)平臺及編程模式是關(guān)鍵,下面介紹一下開發(fā)平臺的選擇、microsoft visual c+及編程模式。2.1 開發(fā)平臺的選擇在windows環(huán)境下,目前比較流行的可視化開發(fā)工具主要有:visual c+、visual basic、c+ builder、delphi、power builder及jbuilder等。而本軟件采用microsoft visual c+ 6.0作為開發(fā)工具,并使用mfc application framework作為本軟件的基本架構(gòu)。采用c
10、+來進(jìn)行圖像編程的主要原因是,與java和c#等現(xiàn)代編程語言相比,c+在程序運(yùn)行的效率、內(nèi)存使用的可控性和編程的靈活性上具有優(yōu)勢。圖像處理需要處理大量的圖像數(shù)據(jù),經(jīng)常使用復(fù)雜、費(fèi)時(shí)的算法,因此圖像處理程序的效率非常重要。c+代碼被編譯成匯編語言,可以直接在處理器上運(yùn)行,效率很高。而java被編譯成字節(jié)碼,c#被編譯成中間語言,都是不能在處理器上執(zhí)行的,必須經(jīng)過java虛擬機(jī)或.net通用語言運(yùn)行時(shí)的jit編譯之后才能執(zhí)行,因此效率較低。故從運(yùn)行效率的角度看,采用c+進(jìn)行圖像編程比較合適。對龐大的圖像數(shù)據(jù)進(jìn)行處理時(shí)需要使用大量的內(nèi)存,而計(jì)算機(jī)的物理內(nèi)存容量往往是有限的,因此需要有效地控制內(nèi)存的使
11、用。c+直接控制內(nèi)存的分配和釋放,這雖繁瑣,且加大了編程的負(fù)擔(dān),但卻能有效地控制內(nèi)存的使用。java和c#引進(jìn)了垃圾收集機(jī)制,將開發(fā)人員從內(nèi)存管理的繁雜任務(wù)中解放出來,不再需要直接控制內(nèi)存的分配和釋放。但是,無效內(nèi)存的收集和釋放只能周期性地進(jìn)行,難以達(dá)到有效地使用內(nèi)存。同樣的運(yùn)算,使用java和c#所需的內(nèi)存比使用c+所需的內(nèi)存要多,即內(nèi)存的使用率較低。所以,從內(nèi)存的使用效率來看,采用c+進(jìn)行圖像處理編程更合適。c+中大量使用指針,使得編程的靈活性很高,這雖然增加了程序出錯(cuò)的可能性,但是便于程序員施展編程技巧來提高程序的效率。java完全取消了指針,c#極大地限制了指針的使用,這都限制了程序員
12、施展技巧。因此,使用c+進(jìn)行圖像處理編程具有更大的靈活性。而在以c+為核心語言的可視化編程工具中,microsoft visual c+ 6.0以其自身許多優(yōu)異的特性而獲得了最為廣泛的應(yīng)用。鑒于以上原因,本設(shè)計(jì)使用microsoft visual c+ 6.0作為軟件的開發(fā)平臺。2.2 microsoft visual c+及編程模式簡介1. visual c+可視化編程visual c+的資源編輯器能以所見即所得(what you see is what you get)的形式直接編輯程序的用戶界面,為所有資源分配id標(biāo)識號。classwizard能把對話框模板與生成的類定義或與已有的類代碼
13、連接起來,為菜單項(xiàng)、控制等資源生成空的處理函數(shù)模板,創(chuàng)建消息映射條目,并將資源id與處理函數(shù)連接起來。通過使用appwizard,程序員的編程工作便簡化為用資源編輯器直觀的設(shè)計(jì)界面,完善對話框類代碼,在空的處理函數(shù)模板處填寫響應(yīng)用戶操作的代碼,這是一種比較完善的可視化編程方法。但產(chǎn)品名“visual c+”也容易誤導(dǎo)人,讓人認(rèn)為自己使用的是一個(gè)與microsoft visual basic類似的完全可視化的系統(tǒng)。然而,使用visual c+,開發(fā)人員必須真正地閱讀和編寫c+代碼。visual c+向?qū)Э梢怨?jié)省時(shí)間和提高精度,但是,程序員也必須理解向?qū)Мa(chǎn)生的代碼,并且,最重要的是,還必須理解mf
14、c庫的結(jié)構(gòu)和windows操作系統(tǒng)的內(nèi)部工作方式。2. mfc(microsoft foundation classes)應(yīng)用程序框架應(yīng)用程序框架的一種定義是:提供一般應(yīng)用程序需要的全部面向?qū)ο筌浖M件的集成集合。c+流行的一個(gè)原因是它可以用類庫擴(kuò)充。類庫是可在應(yīng)用程序中使用的有關(guān)c+類的集合。應(yīng)用程序框架是類庫的超集。一般的類庫只是一種孤立的類的集合,用來嵌入在任何程序中,但是,應(yīng)用程序框架卻定義了程序的結(jié)構(gòu)。自從mfc庫發(fā)布以來,mfc已經(jīng)成為主要的windows類庫。使用mfc類庫構(gòu)建應(yīng)用程序具有以下優(yōu)點(diǎn):l mfc庫是c+的microsoft windows api。l 應(yīng)用程序框架生
15、成的應(yīng)用程序使用了標(biāo)準(zhǔn)的結(jié)構(gòu),具有標(biāo)準(zhǔn)化的用戶接口,這對具有標(biāo)準(zhǔn)用戶界面的win32程序來說,可以極大的減輕程序員的負(fù)擔(dān),使程序員不必過多地考慮界面,可把主要精力放在程序設(shè)計(jì)上,以提高程序設(shè)計(jì)的效率。l 使用應(yīng)用程序框架的應(yīng)用程序不僅小,而且運(yùn)行速度快,具有很大的靈活性。mfc封裝了win32 sdk中的幾乎所有函數(shù),能實(shí)現(xiàn)win32系統(tǒng)的任何功能。l visual c+工具降低了編碼的復(fù)雜性。l mfc庫應(yīng)用程序框架有豐富的特性,如:windows api的c+接口、通用的(非windows所特有的)類、“共用根對象”類層次結(jié)構(gòu)、流線式多文檔界面(mdi)應(yīng)用程序支持等。l 強(qiáng)大的功能。除封
16、裝了大部分的win32 sdk函數(shù)外,mfc還提供了應(yīng)用程序本身的數(shù)據(jù)和操作及activex、ole、internet、winsock、dao(data access objects)、odbc(open database connectivity)等操作類。mfc框架的核心是文檔/視圖結(jié)構(gòu)(document-view architecture),這是一個(gè)很好用、但又往往較難以入門的功能。簡單的說,文檔/視圖結(jié)構(gòu)就是將數(shù)據(jù)和對數(shù)據(jù)的觀察或數(shù)據(jù)的表現(xiàn)(顯示)相分離。文檔僅處理數(shù)據(jù)的實(shí)際讀、寫操作,視圖則是顯示和處理數(shù)據(jù)的窗口,視圖可以操作文檔中的數(shù)據(jù)。3. win32編程編寫visual c+程
17、序?qū)嶋H上就是一個(gè)構(gòu)造類和把類實(shí)例化的過程。由于windows 95/98/me/nt/2000是pc平臺中應(yīng)用最廣泛的操作系統(tǒng),而microsoft力圖用一個(gè)叫做win32的標(biāo)準(zhǔn)32位應(yīng)用程序接口作為對這幾個(gè)操作系統(tǒng)的共同開發(fā)接口,所以經(jīng)常采用win32來代表microsoft的32位windows操作系統(tǒng),因此visual c+主要用于針對win32的應(yīng)用程序開發(fā)。win32具有搶先式多任務(wù)、多線程和線性尋址內(nèi)存管理等特征,win32編程的基本要求包括:l 應(yīng)用程序的執(zhí)行獨(dú)立于硬件設(shè)備。l 應(yīng)用程序具有圖形用戶界面。l 能在windows 95/98/me和windows nt/2000/x
18、p之間透明移植,并可移植到支持windows nt/2000的risc硬件平臺。l 高性能的搶先式多任務(wù)和多線程管理。l 高級的多媒體支持。l 通過ole 2技術(shù)實(shí)現(xiàn)多個(gè)應(yīng)用程序的對象定位。microsoft為進(jìn)行win32編程提供了一套名為win32 sdk的應(yīng)用程序編程接口,其中包括上千個(gè)win32系統(tǒng)函數(shù)。visual c+包括一套叫做mfc(microsoft foundation class library)的c+類庫,其中定義了進(jìn)行win32編程所需要的各種類。有的類封裝了大部分的win32 sdk中應(yīng)用程序的編程接口函數(shù);有的類封裝的則是應(yīng)用程序本身的數(shù)據(jù)和操作;還有的類封裝了a
19、ctivex、ole和internet編程特性以及winsock網(wǎng)絡(luò)特性和dao(data access objects)、odbc(open database connectivity)數(shù)據(jù)訪問功能。win23 sdk和mfc是實(shí)現(xiàn)win32編程的主要工具。visual c+的appwizard工具能自動生成應(yīng)用程序框架,該框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標(biāo)準(zhǔn)實(shí)現(xiàn)方法。運(yùn)用visual c+的資源編輯器(resource editor)能直觀地設(shè)計(jì)程序的用戶界面,而classwizard能把用戶界面和程序代碼連接起來。程序員要做的就是用mfc類實(shí)現(xiàn)框架中未完成的應(yīng)用程序的特定功能
20、部分。所以使用visual c+可以實(shí)現(xiàn)win32的可視化程序設(shè)計(jì)。4. 消息映射在使用visual c+進(jìn)行win32程序設(shè)計(jì)時(shí),消息映射是一個(gè)非常重要的概念。windows應(yīng)用程序是消息驅(qū)動的,應(yīng)用程序不能直接得到用戶所做的操作,如鼠標(biāo)按鍵、鍵盤輸入和窗口移動等。這些操作由操作系統(tǒng)管理,操作系統(tǒng)檢測到操作事件后,便向相關(guān)的應(yīng)用程序發(fā)送消息,應(yīng)用程序響應(yīng)這些消息來完成用戶的操作。(1)消息windows中的消息是操作系統(tǒng)與應(yīng)用程序之間、應(yīng)用程序與應(yīng)用程序之間、應(yīng)用程序各對象之間相互控制與傳遞信息的方式。消息的基本格式如下:message wparam lparammessage是消息名稱;w
21、param是與消息相關(guān)的word型參數(shù);lparam是與消息相關(guān)的long型參數(shù)。消息主要有以下3類。l windows系統(tǒng)消息:windows系統(tǒng)向窗口發(fā)送的消息,由窗口(window)或視圖(view)進(jìn)行響應(yīng)處理。這類消息包括除wm_command消息之外的名稱以wm_開始的其他消息。l 控制通知消息:控制或子窗口傳給父窗口的wm_command通知的消息。l 命令消息:在響應(yīng)用戶接口操作時(shí),將產(chǎn)生wm_command命令消息。其參數(shù)指定了用戶接口的標(biāo)識號,如菜單項(xiàng)和按鈕等id號。(2)消息映射過程在使用appwizard創(chuàng)建應(yīng)用程序時(shí),mfc應(yīng)用程序框架設(shè)置了相應(yīng)的消息處理函數(shù)來響應(yīng)消
22、息,以完成相應(yīng)的操作。消息處理函數(shù)是某些類(通常是窗口類)的成員函數(shù)和程序員在其中編寫響應(yīng)消息時(shí)應(yīng)進(jìn)行操作的代碼??蚣軐⑾⒑退鼈兊奶幚砗瘮?shù)連接起來就是消息映射。消息映射使應(yīng)用程序在接收到消息時(shí)調(diào)用對應(yīng)的消息處理函數(shù)來響應(yīng)和處理消息。classwizard在創(chuàng)建新類時(shí)將為其創(chuàng)建一個(gè)消息映射,并為每個(gè)類能響應(yīng)的消息和命令增加對應(yīng)的處理函數(shù)。在源代碼中,消息映射開始于begin_message_map宏,結(jié)束于end_message_map宏,中間由一系列預(yù)定義的被稱為“條目宏”的宏組成。其基本格式如下:begin_message_map (classname, parentclassname)/
23、afx_msg_map (classname)條目宏1條目宏2條目宏3/afx_msg_mapend_message_map ()其中classname為擁有消息映射的當(dāng)前類名,parentclassname為當(dāng)前類的父類名。條目宏定義了類所處理的消息與其對應(yīng)的函數(shù)。常用的條目宏類型如表2.1所示。表2.1 消息映射條目宏消息類型宏格式說明windows消息on_wm_xxxxwm_xxxx為windows消息名命令on_command(id,function)id為命令標(biāo)識號,function為處理函數(shù)名更新命令on_update_command_ui(id,function)id為命令標(biāo)識
24、號,function為處理函數(shù)名控制通知on_xxxx(id,function)id為控制標(biāo)識號,function為處理函數(shù)名用戶定義消息on_message(id,function)id為消息標(biāo)識號,function為處理函數(shù)名用戶注冊消息on_registered_message(id,function)id為消息標(biāo)識號,function為處理函數(shù)名windows消息的處理函數(shù)在cwnd類中進(jìn)行了預(yù)定義,類庫以消息名為基礎(chǔ)定義這些處理函數(shù)的名稱,且mfc要求所有消息處理函數(shù)聲明為afx_msg類型。例如,消息wm_paint的處理函數(shù)在cwnd類中的聲明如下:afx_msg void on
25、paint();通過classwizard在派生類中用同樣的原型定義處理函數(shù)并為該函數(shù)生成消息映射條目,然后由程序員編寫處理函數(shù)代碼,并在派生類中覆蓋了其父類的消息處理函數(shù)。在有些情況下,必須在派生類的消息處理函數(shù)中調(diào)用其父類的消息處理函數(shù),使windows和基類能對消息進(jìn)行處理。classwizard將在生成的處理函數(shù)中建議是否應(yīng)調(diào)用父類的消息處理函數(shù)及調(diào)用的次序。除此之外,用戶定義和注冊的消息、命令和控制通知都沒有默認(rèn)的處理函數(shù),需要在定義時(shí)聲明,一般根據(jù)其id名稱來為函數(shù)命名。第3章 圖像格式分析在前面曾提到,用數(shù)字來表示圖像有兩種不同的方式,即矢量圖和位圖(又稱為柵格、光柵圖像或像素圖
26、)。在具體的實(shí)現(xiàn)上,不同的廠家,在不同的系統(tǒng)上和不同的軟件中又采用不同的圖像表示方式,即以不同的圖像格式來表示數(shù)字圖像。因此,一個(gè)通用的圖像處理軟件應(yīng)該能支持多種不同的圖像格式,至少應(yīng)能支持常用的幾種圖像格式。本設(shè)計(jì)所實(shí)現(xiàn)的圖片瀏覽軟件支持以下幾種圖像格式:bmp、pcx、tga、jpeg、gif。這幾種圖像格式均為在圖像處理領(lǐng)域及實(shí)際應(yīng)用中廣泛使用的圖像格式。由于圖像質(zhì)量的提高是建立在圖像數(shù)據(jù)量增大的基礎(chǔ)上的,而圖像數(shù)據(jù)量的增大將不可避免地降低圖像處理的速度,并且給存儲和傳遞帶來困難。因此,如何有效地控制數(shù)字圖像的存儲量已成為數(shù)字圖像處理的一項(xiàng)重要課題。數(shù)據(jù)壓縮技術(shù)是控制數(shù)據(jù)量的基本技術(shù)。所
27、謂數(shù)據(jù)壓縮,就是用更少的數(shù)據(jù)位存儲相同容量的信息,目的是更高效地存儲信息。各種圖像格式都可以采用一種,甚至多種不同的數(shù)據(jù)壓縮算法來壓縮數(shù)據(jù)量,因此圖像格式和壓縮算法是密切相關(guān)的。而開發(fā)圖像處理軟件也應(yīng)首先了解圖像的編碼及解碼方法。3.1 圖像的編碼和解碼能夠?qū)?shù)據(jù)進(jìn)行壓縮并大大減少其數(shù)據(jù)量是因?yàn)閿?shù)據(jù)存在大量的數(shù)據(jù)冗余,即存在冗余的、可預(yù)測的和不必要的數(shù)據(jù)。數(shù)據(jù)量(d)與其所表達(dá)的信息量(i)一般并不相等,它們之間存在如下關(guān)系:i=d-dudu0其中,du代表數(shù)據(jù)的冗余量,如冗余量du=0,則不需要也不能對數(shù)據(jù)進(jìn)行有效壓縮。即,需要并能夠?qū)?shù)據(jù)進(jìn)行有效壓縮的條件是du0。而圖像數(shù)據(jù)中廣泛存在著數(shù)
28、據(jù)冗余。數(shù)據(jù)冗余一般有4種形式,即統(tǒng)計(jì)冗余、信息熵冗余、結(jié)構(gòu)冗余、知識冗余。利用冗余進(jìn)行圖像數(shù)據(jù)壓縮包括兩個(gè)相反的過程。l 數(shù)據(jù)編碼:即對原始圖像數(shù)據(jù)進(jìn)行編碼,以減小其數(shù)據(jù)量。l 數(shù)據(jù)解碼:即把編碼壓縮的圖像數(shù)據(jù)還原成原始的表示形式。由于數(shù)據(jù)編碼和數(shù)據(jù)解碼是互逆的過程,只要研究好數(shù)據(jù)編碼就能處理好數(shù)據(jù)解碼。根據(jù)冗余類型的不同,人們提出了不同的數(shù)據(jù)編碼方法,根據(jù)不同的出發(fā)點(diǎn)可把數(shù)據(jù)編碼方法進(jìn)行不同的分類。(1)以對編碼數(shù)據(jù)在解碼后能否完全一致的還原為原始數(shù)據(jù)為標(biāo)準(zhǔn),可將數(shù)據(jù)編碼方法劃分為如下兩類。l 無失真編碼(可逆編碼):編碼數(shù)據(jù)進(jìn)行解碼后的數(shù)據(jù)與編碼前的原始數(shù)據(jù)完全相同,沒有任何失真。l 有
29、失真編碼(不可逆編碼):編碼數(shù)據(jù)進(jìn)行解碼后的數(shù)據(jù)與編碼前的數(shù)據(jù)有一定的偏差或失真,但在視覺效果上基本相同。(2)根據(jù)數(shù)據(jù)編碼的實(shí)現(xiàn)原理可以把數(shù)據(jù)編碼劃分為預(yù)測編碼、變換編碼、信息熵編碼、亞抽樣與內(nèi)插編碼、矢量量化編碼、基于神經(jīng)網(wǎng)絡(luò)的編碼、分頻帶編碼、結(jié)構(gòu)編碼、基于知識的編碼和混合編碼等10類。其中,信息熵編碼中的哈夫曼編碼(huffman coding)、lzw(lempel ziv welch compression)編碼、游程長度編碼(run length coding)和算術(shù)編碼(arithmetic coding)都是常用的無失真圖像編碼方式。由于本設(shè)計(jì)并未涉及到上述所有的編碼算法,故
30、在此不再進(jìn)行一一說明,在后面的內(nèi)容中會對使用到的算法及其實(shí)現(xiàn)進(jìn)行詳細(xì)論述。3.2 bmp圖像bmp圖像,即通常所說的位圖(bitmap),是windows系統(tǒng)中最為常見的圖像格式。windows 3.0以前的版本只支持與設(shè)備相關(guān)位圖ddb(device dependent bitmap)。ddb是一種內(nèi)部位圖格式,它顯示的圖像依計(jì)算機(jī)顯示系統(tǒng)的設(shè)置不同而不同,因此一般不存儲為文件,與通常所說的bmp圖像不同。在windows.h中,結(jié)構(gòu)體bitmap定義了ddb位圖的類型、寬度、高度、顏色格式和像素位值等,代碼如下:typedef struct tagbitmap int bmtype;/位圖
31、類型,必須設(shè)為0 int bmwidth; /位圖寬度 int bmheight;/位圖高度 int bmwidthbytes;/位圖中每一掃描行中的字節(jié)數(shù) byte bmplanes;/顏色層數(shù) byte bmbitspixel;/每一像素所占的位數(shù) void far*bmbits; /存放像素值內(nèi)存塊的地址bitmap;ddb中不包括顏色信息,顯示時(shí)是以系統(tǒng)的調(diào)色板為基礎(chǔ)進(jìn)行像素的顏色映射的。windows只能保證系統(tǒng)調(diào)色板的前20種顏色穩(wěn)定不變,所以ddb只能保證正確顯示少于20色的位圖。windows sdk提供標(biāo)準(zhǔn)的ddb位圖操作函數(shù);mfc中定義了cbitmap類來說明ddb位圖,
32、其中封裝了與ddb位圖操作相關(guān)的數(shù)據(jù)結(jié)構(gòu)和函數(shù)。windows 3.1以上版本提供了對設(shè)備無關(guān)位圖dib(device independent bitmap)的支持。dib位圖可以在不同的機(jī)器或系統(tǒng)中顯示位圖所固有的圖像。相對于ddb而言,dib是一種外部位圖格式,經(jīng)常存儲為常見的以bmp為后綴的位圖文件(有時(shí)也以dib為后綴)。因此,通常所說的bmp圖像,即是dib位圖。bmp位圖文件包括4部分,即位圖文件頭結(jié)構(gòu)bitmapfileheader、位圖信息頭結(jié)構(gòu)bitmapinfoheader、位圖顏色表rgbquad和位圖像素?cái)?shù)據(jù),bmp位圖文件的結(jié)構(gòu)如圖3.1所示。位圖文件頭結(jié)構(gòu)bitma
33、pfileheader位圖信息頭結(jié)構(gòu)bitmapinfoheader位圖顏色表rgbquad位圖像素?cái)?shù)據(jù)圖3.1 bmp位圖文件的結(jié)構(gòu)下面介紹bmp文件頭、bmp位圖信息頭、顏色表這3個(gè)結(jié)構(gòu)體在windows.h中的定義。1. bmp文件頭bmp文件頭含有bmp文件的類型、文件的大小、位圖文件的保留字、位圖數(shù)據(jù)距文件頭的偏移量等信息。定義如下:typedef struct tagbitmapfileheader uint bftype;/位圖文件的類型,必須為bm dword bfsize;/位圖文件的大小,以字節(jié)為單位 uint bfreserved1;/位圖文件保留字,必須為0 uint
34、bfreserved2;/位圖文件保留字,必須為0 dword bfoffbits;/位圖數(shù)據(jù)距文件頭的偏移量,以字節(jié)為單位 bitmapfileheader;2. bmp位圖信息頭bmp位圖信息頭用于說明位圖的尺寸等信息,定義如下:typedef struct tagbimapinfoheader dword bisize; /本結(jié)構(gòu)所占用字節(jié)數(shù) long biwidth; /位圖的寬度,以像素為單位 long biheight; /位圖的高度,以像素為單位 word biplanes; /目標(biāo)設(shè)備的級別,必須為1 word bibitcount; /每個(gè)像素所需的位數(shù),必須是1(雙色)、
35、/4(16色)、8(256色)或24(真彩色)之一 dword bicompression; /位圖壓縮類型,必須是 0(不壓縮)、 /1(bi_rle8壓縮類型)或2(bi_rle壓縮類型)之一 dword bisizeimage; /位圖的大小,以字節(jié)為單位 long bixpelspermeter; /位圖水平分辨率,每米像素?cái)?shù) long biypelspermeter; /位圖垂直分辨率,每米像素?cái)?shù) dword biclrused; /位圖實(shí)際使用的顏色表中的顏色數(shù) dword biclrimportant; /位圖顯示過程中重要的顏色數(shù) bitmapinfoheader;3. 顏色表
36、顏色表用于說明位圖中的顏色,它有若干個(gè)表項(xiàng),每一個(gè)表項(xiàng)是一個(gè)rgbquad類型的結(jié)構(gòu),且定義一種顏色,定義如下:typedef struct tagrgbquad byte rgbblue;/藍(lán)色的亮度(值范圍為0255) byte rgbgreen;/綠色的亮度(值范圍為0255) byte rgbred;/紅色的亮度(值范圍為0255) byte rgbreserved;/保留,必須為0 rgbquad;位圖信息頭和顏色表組成位圖信息,bitmapinfo結(jié)構(gòu)定義如下:typedef struct tagbitmapinfo bitmapinfoheader bmiheader; rgbq
37、uad bmicolorsi; bitmapinfo;顏色表中rgbquad結(jié)構(gòu)數(shù)據(jù)的個(gè)數(shù)由bibitcount來確定,當(dāng)bibitcount=1、4、8時(shí),分別有2、16、256個(gè)表項(xiàng);當(dāng)bibitcount=24時(shí),沒有顏色表項(xiàng)。位圖數(shù)據(jù)記錄了位圖的每一個(gè)像素值,記錄順序是在掃描行內(nèi)從左到右、掃描行之間從下到上。位圖的一個(gè)像素值所占的字節(jié)數(shù)如下:l 當(dāng)bibitcount=1時(shí),8個(gè)像素占1個(gè)字節(jié)。l 當(dāng)bibitcount=4時(shí),2個(gè)像素占1個(gè)字節(jié)。l 當(dāng)bibitcount=8時(shí),1個(gè)像素占1個(gè)字節(jié)。l 當(dāng)bibitcount=24時(shí),1個(gè)像素占3個(gè)字節(jié)。windows規(guī)定一個(gè)掃描行所
38、占的字節(jié)數(shù)必須是4的倍數(shù)(即以long為單位),不足的以0填充,一個(gè)掃描行所占的字節(jié)數(shù)計(jì)算方法如下:datasizeperline=(biwidthbibitcount+31)/8這是本設(shè)計(jì)中的一個(gè)關(guān)鍵點(diǎn),無論對圖像進(jìn)行何種變換,都要進(jìn)行掃描行的4字節(jié)對齊。除了上述的windows bmp以外,還有一種與其結(jié)構(gòu)相似,但不完全相同的另一種bmp圖像,即os/2采用的bmp。其與windows bmp的主要區(qū)別是位圖信息結(jié)構(gòu)(信息頭結(jié)構(gòu)和顏色表結(jié)構(gòu))不同。而它們的圖像位數(shù)據(jù)的存儲方式是完全一樣的。本設(shè)計(jì)只討論windows系統(tǒng)下的bmp圖像,故對os/2使用的bmp不進(jìn)行詳細(xì)分析。3.3 pcx圖
39、像pcx是zsoft公司研制的一種常用圖像格式,也是在pc機(jī)上使用時(shí)間最久的一種位圖格式。pcx的最新版本支持24位色彩(256色的調(diào)色板或全24位rgb),圖像的大小可達(dá)64k64k個(gè)像素。pcx采用游程長度編碼來壓縮數(shù)據(jù),但是有些情況下壓縮效率不高,尤其是對于掃描圖像或視頻圖像。pcx存在許多的版本,其文件頭中的一個(gè)代碼標(biāo)識了文件所支持的zsoft產(chǎn)品版本,不同版本的圖像特點(diǎn)如表3.1所示。表3.1 不同pcx版本的圖像特點(diǎn)版本號圖像特點(diǎn)0基本的單色(2色)或4色圖像1基本的單色(2色)或4色圖像,另加16位色圖像2基本的單色(2色)或4色圖像,另加24位調(diào)色板的256色以及全24位rgb
40、色圖像3基本的單色(2色)或4色圖像,4基本的單色(2色)或4色圖像5基本的單色(2色)或4色、256色圖像以及多平面真彩色圖像1. 文件結(jié)構(gòu)及文件頭pcx圖像由3個(gè)部分組成,即文件頭、位圖數(shù)據(jù)和一個(gè)多達(dá)256種色彩的調(diào)色板。pcx文件的文件頭為固定的128字節(jié)。其中包含版本號、被打印或掃描圖像的分辨率(單位為每英寸點(diǎn)數(shù))、大?。▎挝粸橄袼?cái)?shù))、每掃描行字節(jié)數(shù)、每像素位數(shù)和彩色平面數(shù)等信息。文件還可能包括一個(gè)調(diào)色板以及表明該調(diào)色板是灰度還是彩色的一個(gè)代碼。文件的核心部分是位圖數(shù)據(jù)。位圖數(shù)據(jù)以類似于packbits壓縮法的游程長度壓縮形式記錄,像素值通常是單字節(jié)的索引值,指向調(diào)色板中的位置。如果
41、版本號為5,則文件末尾處還有一個(gè)單一的位平面和一個(gè)rgb值的256色調(diào)色板,3種原色各占1個(gè)字節(jié)。pcx格式圖像的文件頭結(jié)構(gòu)如表3.2所示。表3.2 pcx文件頭結(jié)構(gòu)起始字節(jié)字節(jié)數(shù)內(nèi)容解釋01zsoft標(biāo)志10(0x0a),zsoft pcx文件的標(biāo)志11版本號0:pc paintbrush 2.51:pc paintbrush 2.8,帶調(diào)色板21編碼1:pcx游程長度編碼31位/像素每個(gè)平面的位/像素值,可能值為1、2,、4或848圖像大小圖像邊界極限為xmin、ymin、xmax、ymax,以像素為單位122水平分辨率打印時(shí),x方向的每英寸點(diǎn)數(shù)142垂直分辨率打印時(shí),y方向的每英寸點(diǎn)數(shù)1
42、648文件頭調(diào)色板16色的“ega/vga”頭調(diào)色板641保留字節(jié)zsoft保留,為0651平面彩色/灰度平面數(shù)。pcx圖像可以是單彩色,也可以具有多個(gè)彩色平面662每行字節(jié)數(shù)每個(gè)色彩平面的每行字節(jié)數(shù),即存儲未壓縮圖像的一個(gè)掃描行所需的字節(jié)數(shù),總是偶數(shù)682調(diào)色板解釋1:彩色或黑白2:灰度702視頻屏幕大小x視頻輸出的水平像素?cái)?shù)-1722視頻屏幕大小y視頻輸出的垂直像素?cái)?shù)-17454全空直到文件結(jié)束02. 對pcx進(jìn)行解碼的關(guān)鍵因?yàn)樵谝粋€(gè)pcx文件中可以用到幾種不同的記錄方法,因此其中必須包含所用方法的標(biāo)志。在對pcx進(jìn)行解釋時(shí),單靠讀取版本號是不夠的,最可靠的標(biāo)志是每像素的位數(shù)(文件頭的第3
43、個(gè)字節(jié))和色彩平面數(shù)(文件頭的第65個(gè)字節(jié)),這兩個(gè)標(biāo)志與圖像色彩數(shù)的對應(yīng)關(guān)系如表3.3所示。表3.3 pcx數(shù)據(jù)的解釋每像素的位數(shù)色彩平面數(shù)解釋11單色124色138色1416色214色2416色4116色81256色8316.7兆色平面數(shù)說明是否使用了調(diào)色板。多于一個(gè)平面則沒有調(diào)色板。如果使用了調(diào)色板,則可以由版本號和每像素位數(shù)決定pcx圖像所使用的調(diào)色板類型。3. pcx圖像數(shù)據(jù)的存儲如果沒有使用調(diào)色板,則數(shù)據(jù)是實(shí)際的像素值;否則是調(diào)色板表項(xiàng)的索引值。當(dāng)是實(shí)際的像素值時(shí),它們按色彩平面和掃描行存儲。其存儲格式為:第0行 rrrrrrggggggbbbbbb第1行 rrrrrrgggggg
44、bbbbbb第n行 rrrrrrggggggbbbbbb如果有兩個(gè)平面,那么色彩是任選的;如果有3個(gè)平面,其顏色為rgb;如果有4個(gè)平面,則顏色信息包含rgb和光強(qiáng)。光強(qiáng)位只是給像素一種名義上的較高亮度。當(dāng)使用調(diào)色板時(shí),數(shù)據(jù)指調(diào)色板的索引值,它們構(gòu)成一個(gè)完整的圖像平面,即不會被分解為單獨(dú)的色彩平面。數(shù)據(jù)將按如下的簡單方式排列(i是調(diào)色板中的索引值):第0行 iiiiiiiiiiiii第1行 iiiiiiiiiiiii第n行 iiiiiiiiiiiiii的長度取決于每像素的位數(shù),如每像素位數(shù)為4,則i就是半個(gè)字節(jié)長。pcx的編碼是以最大64個(gè)重復(fù)單元為一組進(jìn)行壓縮的,不論要記錄的是何種類型的數(shù)據(jù)
45、,都使用同樣的游程長度壓縮算法。在掃描行中有編碼間隔標(biāo)志,但是,在一個(gè)掃描行中的色彩平面之間沒有間隔標(biāo)志。同樣,也沒有分隔符來標(biāo)識一個(gè)掃描行結(jié)束。4. pcx圖像的調(diào)色板任何pcx文件,如果像素位數(shù)超過1但又只有一個(gè)色彩平面,則都需要使用調(diào)色板。pcx圖像由3種不同的調(diào)色板實(shí)現(xiàn)。版本代碼為5的文件最容易確認(rèn)。如果有一個(gè)色彩平面,則它們會在文件結(jié)尾處使用256色的“vga”調(diào)色板。其他的基于調(diào)色板的文件均使用頭調(diào)色板,而頭調(diào)色板又有兩種可能的實(shí)現(xiàn),即ega和cga。三種不同的調(diào)色板介紹如下。(1)位于文件末尾的256色“vga”調(diào)色板256色的調(diào)色板從文件末尾(eof)前768個(gè)字節(jié)開始,而且以
46、十進(jìn)制碼12(十六進(jìn)制0c)開始(7682561字節(jié)3,每個(gè)r、g和b都是1個(gè)字節(jié))。因此,值為n的像素指向調(diào)色板中的“eof-7683n”處;后面3個(gè)字節(jié)分別為該像素紅、綠、藍(lán)的值。(2)16色的“ega/vga”頭調(diào)色板頭調(diào)色板位于第16第63字節(jié),共48個(gè)字節(jié),數(shù)據(jù)按3元組組織,具有16組3字節(jié)數(shù)據(jù),每個(gè)字節(jié)分別對應(yīng)r、g和b。對于為ega建立的文件,每種原色只可以有4級,所以每個(gè)字節(jié)提供的256個(gè)值的范圍被分成4個(gè)區(qū)域。每個(gè)區(qū)域與相應(yīng)的級相對應(yīng):063對應(yīng)第0級、64127對應(yīng)第1級、128192對應(yīng)第2級、193254對應(yīng)第3級。(3)“cga”調(diào)色板這種調(diào)色板現(xiàn)已過時(shí),在pcx的版
47、本5及更高的版本中不再使用。這中方法只需要字節(jié)16和字節(jié)19的最高位數(shù)據(jù)。另外,版本5或更高版本的pcx文件能夠支持24位真彩色的pcx文件,其色彩平面為3個(gè)位平面。3.4 tga圖像tga格式是truevision公司設(shè)計(jì)并負(fù)責(zé)解釋的圖像格式。tga也包含了多種變體,tga文件的第三個(gè)字節(jié)用來區(qū)別不是tga的文件。該字節(jié)的值(二進(jìn)制整數(shù))及對應(yīng)的文件類型如下。l 0:文件中沒有圖像數(shù)據(jù)。l 1:未壓縮的,顏色表圖像。l 2:未壓縮的,rgb圖像。l 3:未壓縮的,黑白圖像。l 9:游程長度(runlength)編碼的顏色表圖像。l 10:游程長度(runlength)編碼的rgb圖像。l 1
48、1:壓縮的,黑白圖像。l 32:使用huffman、delta和runlength編碼的顏色表圖像。l 33:使用huffman、delta和runlength編碼的顏色映射圖像,四叉樹類型處理1. 數(shù)據(jù)類型1:未壓縮的顏色表(color-mapped)圖像tga未壓縮顏色表圖像格式的說明如表3.4所示。表3.4 tga未壓縮顏色表圖像格式說明偏移(字節(jié))長度(字節(jié))描述01圖像信息字段(見本子表的后面)的字符數(shù)。本字段是1字節(jié)無符號整型,指出了圖像格式區(qū)別字段長度,其取值范圍是0到255,當(dāng)它為0時(shí)表示沒有圖像的信息字段11顏色表的類型。該字段為表示對應(yīng)格式1的圖像而包含一個(gè)二進(jìn)制121圖像
49、類型碼。該字段總為1,這也是此類型為格式1的原因35顏色表規(guī)格,顏色表首址32顏色表首元表項(xiàng)的整型(低位-高位)索引52顏色表的長度。顏色表的表項(xiàng)總數(shù),整型(低位-高位)71顏色表表項(xiàng)的位(bit)數(shù)。16代表16位tga、24代表24位tga、32代表32位tga810圖像規(guī)格82圖像x坐標(biāo)的起始位置。圖像左下角x坐標(biāo)的整型(低位-高位)值102圖像y坐標(biāo)的起始位置。圖像左下角y坐標(biāo)的整型(低位-高位)值122圖像寬度。以像素為單位,圖像寬度的整型(低位-高位)值142圖像高度。以像素為單位,圖像高度的整型(低位-高位)值161圖像每像素存儲占用位(bit)數(shù)171圖像描述符字節(jié)bits 3
50、0:每像素的屬性位(bit)數(shù)bit 4:保留,必須為0bit 5:屏幕起始位置標(biāo)志0:原點(diǎn)在左下角1:原點(diǎn)在左上角truevision圖像必須為0bits 76:交叉數(shù)據(jù)存儲標(biāo)志00:無交叉01:兩路奇/偶交叉10:四路交叉11:保留18可變圖像信息字段。包含一個(gè)自由格式的,長度是圖像記錄塊偏移0處的字節(jié)中的值。它常常被忽略(即偏移0處值為0),其最大可以含有255個(gè)字符。如果需要存儲更多信息,可以放在圖像數(shù)據(jù)之后(續(xù)表)偏移(字節(jié))長度(字節(jié))描述可變可變顏色表數(shù)據(jù)。起始位置由前一個(gè)字段的大小決定;其長度由單項(xiàng)數(shù)據(jù)大小和數(shù)據(jù)項(xiàng)數(shù)目決定(在前面相應(yīng)的說明字段中給出),每項(xiàng)是2字節(jié)、3字節(jié)或4
51、字節(jié),字節(jié)中沒有使用的位(bit)被認(rèn)為是屬性位(1)4字節(jié)表項(xiàng)中,字節(jié)1表示blue,字節(jié)2表示green,字節(jié)3表示red,字節(jié)4表示屬性(2)3字節(jié)表項(xiàng)中各字節(jié)依次對應(yīng)blue、green、red(3)2字節(jié)表項(xiàng)中,兩個(gè)字節(jié)分解成如下形式:arrrrrgg gggbbbbb,但是,由于低位在前,高位在后的存儲順序,從文件中讀出表項(xiàng)時(shí),將先讀入gggbbbbb而后讀入arrrrrgg,a表示屬性位可變可變圖像數(shù)據(jù)字段。該字段給出了(高度)(寬度)個(gè)顏色表項(xiàng)索引,每個(gè)索引以整數(shù)個(gè)字節(jié)的形式存儲(典型的例子如1或2個(gè)字節(jié))所有的數(shù)據(jù)都沒有符號,對于2字節(jié)表項(xiàng)而言,低位字節(jié)是先存儲的2. 數(shù)據(jù)類
52、型2:未壓縮的無顏色表rgb圖像tga未壓縮的無顏色表rgb圖像格式的說明如表3.5所示。表3.5 tga未壓縮的無顏色表rgb圖像格式說明偏移(字節(jié))長度(字節(jié))描述01圖像信息字段(見本子表的后面)的字符數(shù)。本字段是1字節(jié)無符號整型,指出了圖像格式區(qū)別字段的長度,其取值范圍是0到255,當(dāng)它為0時(shí)表示沒有圖像的信息字段11顏色表類型。該字段的內(nèi)容或者為0或者為1;0表示沒有顏色表,1表示顏色表存在。由于本格式是無顏色表的,因此此項(xiàng)通常被忽略21圖像類型碼。該字段總為2,這也是此類型為格式2的原因35顏色表規(guī)格。如果顏色表類型字段為0則被忽略;否則描述如下32顏色表首址。顏色表首元入口的整型
53、(低位-高位)索引52顏色表的長度。顏色表的表項(xiàng)總數(shù),整型(低位-高位)71顏色表表項(xiàng)的位(bit)數(shù)。16代表16位tga、24代表24位tga、32代表32位tga810圖像規(guī)格82圖像x坐標(biāo)起始位置。圖像左下角x坐標(biāo)的整型(低位-高位)值102圖像y坐標(biāo)起始位置。圖像左下角y坐標(biāo)的整型(低位-高位)值122圖像寬度。以像素為單位,圖像寬度的整型(低位-高位)值142圖像高度。以像素為單位,圖像高度的整型(低位-高位)值161圖像每像素存儲占用位(bit)數(shù)。它的值為16、24或32等,決定了該圖像是tga 16、tga24、tga 32等(續(xù)表)偏移(字節(jié))長度(字節(jié))描述171圖像描述
54、符字節(jié)bits 30:每像素對應(yīng)的屬性位的位數(shù);對于tga 16,該值為0或1;對于tga 24,該值為0;對于tga 32,該值為8bit 4:保留,必須為0bit 5:屏幕起始位置標(biāo)志0:原點(diǎn)在左下角1:原點(diǎn)在左上角truevision圖像必須為0bits 76:交叉數(shù)據(jù)存儲標(biāo)志00:無交叉01:兩路奇/偶交叉10:四路交叉11:保留18可變圖像信息字段。包含一個(gè)自由格式的,長度是圖像記錄塊偏移0處的字節(jié)中的值。它常常被忽略(即偏移0處值為0),注意其最大可以含有255個(gè)字符。如果需要存儲更多信息,可以放在圖像數(shù)據(jù)之后可變可變顏色表數(shù)據(jù)。如果顏色表類型為0,則該域不存在,否則越過該域直接讀
55、取,圖像顏色表規(guī)格中描述了每項(xiàng)的字節(jié)數(shù),為2、3、4之一可變可變圖像數(shù)據(jù)域。這里存儲了(寬度)(高度)個(gè)像素,每個(gè)像素中的rgb色值;該色值包含整數(shù)個(gè)字節(jié)(1)3字節(jié)表項(xiàng)中各字節(jié)依次對應(yīng)blue、green、red。(2)2字節(jié)表項(xiàng)中,兩個(gè)字節(jié)分解成如下形式:arrrrrgg gggbbbbb,但是,由于低位在前,高位在后的存儲順序,從文件中讀出表項(xiàng)時(shí),將先讀入gggbbbbb而后讀入arrrrrgg;a表示屬性位(3)4字節(jié)表項(xiàng)包含了分別代表blue、green、red及屬性的四個(gè)字節(jié)。(由于硬件上的原因)有的時(shí)候tga 24類型的圖像也像tga 32類型的圖像那樣存儲3. 數(shù)據(jù)類型9:帶顏色表的游程長度(runlength)編碼圖像帶顏色表的游程長度編碼tga圖
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 住宅精裝修意外免責(zé)合同
- 校園店鋪出租合同范本
- 供水管道安裝合同范本
- 規(guī)劃方案設(shè)計(jì)合同范本
- 起重機(jī)租賃服務(wù)合同范本
- 品牌推廣合作服務(wù)合同范本
- 陵園墓地居間服務(wù)合同投標(biāo)
- 家具拆卸運(yùn)輸合同模板
- 礦權(quán)交易政策研究協(xié)議
- 項(xiàng)目啟動與推進(jìn)策劃方案
- 護(hù)理部用藥安全質(zhì)量評價(jià)標(biāo)準(zhǔn)
- 最新小學(xué)二年級口算及豎式計(jì)算練習(xí)題
- 校園信息化設(shè)備管理檢查表
- 新版抗拔樁裂縫及強(qiáng)度驗(yàn)算計(jì)算表格(自動版)
- API SPEC 5DP-2020鉆桿規(guī)范
- 創(chuàng)新思維課件(完整版)
- DB34∕T 4161-2022 全過程工程咨詢服務(wù)管理規(guī)程
- 注塑成型工藝參數(shù)知識講解
- 安全生產(chǎn)專業(yè)化管理
- 初中生成長檔案模板
- GB_T 17468-2019 電力變壓器選用導(dǎo)則(高清正版)
評論
0/150
提交評論