版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于MFC的圖片瀏覽器的設(shè)計(jì)與實(shí)現(xiàn),概述,1、選題的目的和意義 2、本文所做的主要工作3、軟件開發(fā)平臺(tái)及編程模式 4、圖像格式分析 5、軟件設(shè)計(jì)與實(shí)現(xiàn) 6、本設(shè)計(jì)關(guān)鍵技術(shù)及難點(diǎn) 7、軟件測(cè)試與改進(jìn)思想,選題的目的和意義,圖像是現(xiàn)代信息社會(huì)中最基本的信息,它使信息變得栩栩如生,更加符合人們的日常交流習(xí)慣,因此它成為人類獲取和交換信息的主要來源。如今數(shù)字圖像處理的應(yīng)用日益廣泛,逐步成為信息科學(xué)、工程學(xué)、醫(yī)學(xué)等許多學(xué)科的重要基礎(chǔ),
2、同時(shí)作為一種實(shí)用技術(shù)廣泛應(yīng)用于軍事、氣象、交通、探礦、水利、農(nóng)業(yè)甚至娛樂等領(lǐng)域。尤其是價(jià)格低廉的高性能計(jì)算機(jī)和諸如數(shù)碼相機(jī)及掃描儀這樣的圖像采集設(shè)備出現(xiàn)后,數(shù)字圖像處理技術(shù)被大量的應(yīng)用到影視、游戲等公眾及娛樂領(lǐng)域,與人類的生活密切相關(guān)。處理信息量巨大,要求處理速度極高,實(shí)時(shí)產(chǎn)生高質(zhì)量的圖形圖像是我們不斷的追求目標(biāo)。因此本選題具有較好好的實(shí)用價(jià)值和意義。,本文所做的主要工作,1、詳細(xì)分析了當(dāng)今流行的各種圖像格式的編碼與解碼方法。2、
3、利用Microsoft Visual C++ 6.0作為開發(fā)工具,使用MFC Application Framework作為軟件的基本架構(gòu),設(shè)計(jì)并開發(fā)了一個(gè)圖片瀏覽器。3、實(shí)現(xiàn)了對(duì)BMP、PCX、TGA、JPEG、GIF圖像格式的圖片進(jìn)行讀、寫、顯示等基本功能。4、利用圖像處理中一些變換算法,實(shí)現(xiàn)了圖像的放大、縮小、旋轉(zhuǎn)及百葉窗、馬賽克等顯示特效。5、實(shí)現(xiàn)了各種圖片格式的轉(zhuǎn)換功能。6、對(duì)所開發(fā)的軟件進(jìn)行了測(cè)試并提出了改進(jìn)
4、意見。,軟件開發(fā)平臺(tái)及編程模式,本軟件采用C++來進(jìn)行圖像編程的主要原因是:1、C++代碼被編譯成匯編語(yǔ)言,可以直接在處理器上運(yùn)行,效率很高。 2、C++直接控制內(nèi)存的分配和釋放,這雖繁瑣,加大了編程的負(fù)擔(dān),但卻能有效地控制內(nèi)存的使用。3、使用C++進(jìn)行圖像處理編程具有更大的靈活性。 而在以C++為核心語(yǔ)言的可視化編程工具中,Microsoft Visual C++ 6.0以其自身許多優(yōu)異的特性而獲得了最為廣泛的應(yīng)用
5、。鑒于以上原因,本設(shè)計(jì)使用Microsoft Visual C++ 6.0作為軟件的開發(fā)平臺(tái)。,圖像格式分析,用數(shù)字來表示圖像有不同的格式。因此一個(gè)通用的圖像處理軟件應(yīng)該能支持多種不同的圖像格式。本設(shè)計(jì)所實(shí)現(xiàn)的圖片瀏覽軟件支持以下幾種在圖像處理領(lǐng)域及實(shí)際應(yīng)用中使用的圖像格式:BMP、PCX、TGA、JPEG、GIF。由于圖像質(zhì)量的提高是建立在圖像數(shù)據(jù)的增大的基礎(chǔ)上的,而圖像數(shù)據(jù)量的增大將不可避免地減低圖像處理的速度,并且給存儲(chǔ)和傳遞帶
6、來困難。因此,如何有效地控制數(shù)字圖像的存儲(chǔ)量已成為數(shù)字圖像處理的一項(xiàng)重要課題。數(shù)據(jù)壓縮技術(shù)是控制數(shù)據(jù)量的基本技術(shù)。各種圖像格式都可以采用一種,甚至多種不同的數(shù)據(jù)壓縮算法來壓縮數(shù)據(jù)量,因此圖像格式和壓縮算法是密切相關(guān)的。而開發(fā)圖像處理軟件也應(yīng)首先了解圖像的編碼及解碼方法。,BMP圖像,BMP圖像即我們通常所說的“位圖”,是Windows系統(tǒng)中最為常見的圖像格式。經(jīng)常存儲(chǔ)為我們常見的BMP為后綴的位圖文件。BMP位圖文件包括4部分:1、位
7、圖文件頭結(jié)構(gòu) BITMAPFILEHEADER2、位圖信息頭結(jié)構(gòu) BITMAPINFOHEADER3、位圖顏色表 RGBQUAD4、位圖像素?cái)?shù)據(jù),PCX圖像,PCX是Zsoft公司研制的一種常用圖像格式,也是在PC機(jī)上使用時(shí)間最久的一種位圖格式。PCX的最新版本支持24位色彩(256色的調(diào)色板或全24位RGB),圖像的大小可達(dá)64k×64k個(gè)像素。PCX采用游程長(zhǎng)度編碼來
8、壓縮數(shù)據(jù),但是有些情況下壓縮效率不高,尤其是對(duì)于掃描圖像或視頻圖像。,TGA圖像,TGA包含了多種變體,TGA文件的第三字節(jié)用來區(qū)別不是的TGA文件。該字節(jié)的值(二進(jìn)制整數(shù))及對(duì)應(yīng)的文件類型如下:0—文件中沒有圖像數(shù)據(jù)1—未壓縮的,顏色表圖像2—未壓縮的,RGB圖像3—未壓縮的,黑白圖像9—游程長(zhǎng)度(Runlength)編碼的顏色表圖像10—游程長(zhǎng)度(Runlength)編碼的RGB圖像11—壓
9、縮的,黑白圖像32—使用Huffman,Delta和Runlength編碼的顏色表圖像33—使用Huffman,Delta和Runlength編碼的顏色映射圖像, 四叉樹類型處理,JPEG圖像,JPEG的全稱是Joint Photographic Experts Group,是由專家組制訂的用于連續(xù)色調(diào)(包括灰度和彩色)靜止圖像的壓縮編碼標(biāo)準(zhǔn)。JPEG標(biāo)準(zhǔn)的壓縮編碼算法是“多灰度靜止
10、圖像的數(shù)字壓縮編碼”。JPEG標(biāo)準(zhǔn)包括3部分,即編碼器、譯碼器和交換格式。編碼器將原始圖像的編碼壓縮成壓縮數(shù)據(jù),譯碼器將壓縮的圖像數(shù)據(jù)還原成原始圖像數(shù)據(jù)。圖像壓縮數(shù)據(jù)以一定的交換格式存儲(chǔ),格式中包括編碼過程中采用的碼表等。,GIF圖像,GIF全稱為Graphics Interchange Format,文件由CompuServe公司開發(fā)并持有該圖形文件格式的版權(quán)。GIF圖像是基于顏色表存儲(chǔ)的,即圖像中每一點(diǎn)的存儲(chǔ)數(shù)據(jù)是該點(diǎn)的顏色對(duì)應(yīng)于
11、顏色列表(即調(diào)色板)的索引值。GIF圖像最多只支持8位存儲(chǔ)位,即最多支持256色圖像。GIF文件內(nèi)部分成許多存儲(chǔ)塊,用來存儲(chǔ)多幅圖像或者是決定圖像表現(xiàn)行為的控制塊,可用于實(shí)現(xiàn)動(dòng)畫和交互式應(yīng)用。GIF文件使用LZW壓縮算法壓縮圖像。,軟件設(shè)計(jì)與實(shí)現(xiàn),需求分析 總體設(shè)計(jì) 軟件界面設(shè)計(jì) 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn),需求分析,功能需求 :1、可以打開BMP、PCX、TGA、JPEG及GIF圖像。2、打開的圖像,用戶均能另存為任意一種格式,以實(shí)現(xiàn)
12、圖像格式的轉(zhuǎn)換。3、實(shí)現(xiàn)圖片的放大、縮小,還原。4、可以對(duì)圖像進(jìn)行90度、180度旋轉(zhuǎn)。5、可以直接調(diào)用Windows畫圖程序打開圖片并進(jìn)行編輯。6、軟件提供“上一張”、“下一張”功能。7、可以進(jìn)行全屏幕瀏覽,并提供“幻燈片播放”的功能,自動(dòng)顯示當(dāng)前文件夾下的所有圖像。,,需求分析,8、按F11鍵可以切換全屏、非全屏瀏覽,同時(shí),在進(jìn)行全屏幕瀏覽時(shí)按ESC鍵也可以退出全屏狀態(tài)。9、在載入圖片時(shí),提供各種顯示效果,用戶也可以選擇
13、讓系統(tǒng)隨機(jī)選擇效果。10、在查看圖片時(shí),用戶也可以隨時(shí)顯示“水平百葉窗”、“垂直百葉窗”、“馬賽克”、“向上掃描”、“向下掃描”效果。11、在查看圖片時(shí),可以選擇從當(dāng)前目錄刪除該圖片,并將其放入系統(tǒng)回收站中。12、在窗口的用戶區(qū)右鍵單擊鼠標(biāo),則彈出快捷菜單,顯示常用操作命令。,,需求分析,性能需求1、硬件平臺(tái)要求: 由于本軟件為單機(jī)軟件,不需進(jìn)行大量的數(shù)據(jù)讀寫和數(shù)據(jù)交換,故對(duì)系統(tǒng)硬件配置的要求并不高,只要能夠平穩(wěn)運(yùn)行W
14、indows操作系統(tǒng)的硬件平臺(tái),都能夠使用本軟件。2、軟件環(huán)境要求: 本軟件運(yùn)行平臺(tái)為Microsoft Windows 98/Me/NT/2000/XP/2003。,,總體設(shè)計(jì),以MVC(Model-View-Controller)應(yīng)用程序結(jié)構(gòu)劃分的模塊如圖所示。,,Picture Viewer,Model,View,Controller,圖像解碼、編碼模塊,圖像顯示模塊,圖像變換模塊,PCX模塊,TGA模塊,BMP模塊
15、,JPEG模塊,GIF模塊,OnDraw (),狀態(tài)欄信息顯示,圖像縮放模塊,圖像旋轉(zhuǎn)模塊,全屏瀏覽模塊,顯示特效模塊,,軟件界面設(shè)計(jì),根據(jù)軟件的需求分析及圖片瀏覽軟件的特點(diǎn),本設(shè)計(jì)中軟件采用單文檔界面(SDI),包括標(biāo)準(zhǔn)菜單、工具欄和狀態(tài)欄。工具欄上為常用菜單命令按鈕,如“打開”、“保存”、“上一張”、“下一張”、“放大”、“縮小”、“旋轉(zhuǎn)”等。另外,在全屏顯示時(shí)提供浮動(dòng)工具欄,并且在用戶區(qū)右擊鼠標(biāo)可以彈出快捷菜單。,,軟件界面設(shè)計(jì),
16、軟件的整體界面,,軟件菜單及工具欄,軟件在全屏狀態(tài)下的浮動(dòng)工具條及右鍵菜單,詳細(xì)設(shè)計(jì)與實(shí)現(xiàn),軟件核心數(shù)據(jù)結(jié)構(gòu)LanImage類設(shè)計(jì) 分別設(shè)計(jì)了BMP、 PCX、 TGA、 JPEG、GIF解碼、編碼模塊 圖像顯示模塊 全屏瀏覽模塊 圖像縮放模塊 圖像旋轉(zhuǎn)模塊 圖像特效顯示,,詳細(xì)設(shè)計(jì)與實(shí)現(xiàn),軟件核心數(shù)據(jù)結(jié)構(gòu)LanImage類設(shè)計(jì),,圖像顯示模塊,全屏瀏覽模塊,圖像縮放模塊,圖像旋轉(zhuǎn)模塊 圖像特效顯示,詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)
17、,前面已分析過BMP 、 PCX、 TGA、 JPEG、GIF圖像的存儲(chǔ)格式,在本設(shè)計(jì)中,針對(duì)不同的格式設(shè)計(jì)了不同的解碼與編碼函數(shù)。格式名解碼函數(shù)編碼函數(shù)BMPReadBmp() SaveBmp() PCXReadPcx() SavePcx() TGAReadTga() SaveTga() 由于JPEG和GIF的編碼較為復(fù)雜,并且時(shí)間有限,故在本設(shè)計(jì)的實(shí)現(xiàn)過程中,JPEG和GIF的解碼、編碼
18、模塊調(diào)用了第三方的讀寫庫(kù)。,,關(guān)鍵技術(shù)及難點(diǎn),資源的分配和釋放 使用JPEG和GIF讀寫庫(kù)時(shí)緩沖區(qū)格式的轉(zhuǎn)換 實(shí)現(xiàn)旋轉(zhuǎn)時(shí)對(duì)內(nèi)存的位操作 直接對(duì)內(nèi)存中圖像數(shù)據(jù)進(jìn)行操作實(shí)現(xiàn)的特效 右鍵菜單的實(shí)現(xiàn) 瀏覽功能的實(shí)現(xiàn),,關(guān)鍵技術(shù)及難點(diǎn),資源的分配和釋放 由于C++中內(nèi)存資源的分配和釋放均由程序員控制,而本程序多處用到了在內(nèi)存中開辟緩沖區(qū),因此在本設(shè)計(jì)的實(shí)現(xiàn)過程中,對(duì)內(nèi)存的管理便尤為重要。 例如在打開一張新圖片時(shí),就
19、要對(duì)上一張圖片的緩沖區(qū)進(jìn)行釋放,否則會(huì)造成內(nèi)存泄漏。但是由于JPEG和GIF調(diào)用了第三方的讀寫庫(kù),其使用的內(nèi)存緩沖區(qū)格式與LanImage類中使用的不同,因此,在進(jìn)行緩沖區(qū)的釋放時(shí),首先要判斷上一張圖片是何種格式,即是否使用了第三方的讀寫庫(kù),如果使用了,則應(yīng)采取不同的資源釋放方式。本文是在LanImage類中加入BOOL型變量m_bReadWithLibSupport來判斷是否使用了JPEG和GIF讀寫庫(kù)的。,,關(guān)鍵技術(shù)及難點(diǎn),使用J
20、PEG和GIF讀寫庫(kù)時(shí)緩沖區(qū)格式的轉(zhuǎn)換 在使用JPEG和GIF讀寫庫(kù)時(shí),其解碼后的數(shù)據(jù)緩沖區(qū)格式是不同的,而圖像的顯示都是通過LanImage::Draw()函數(shù)實(shí)現(xiàn)的。Draw()函數(shù)只能讀取LanImage類中m_pImage指向的緩沖區(qū)。因此,在圖像打開時(shí)需要進(jìn)行緩沖區(qū)的轉(zhuǎn)換。另外,如果打開的是BMP、TGA、PCX格式的圖像,而用戶選擇保存為JPEG或GIF圖像,那么又要將m_pImage指向的
21、緩沖區(qū)轉(zhuǎn)換為JPEG和GIF讀寫庫(kù)所使用的緩沖區(qū)。,,關(guān)鍵技術(shù)及難點(diǎn),實(shí)現(xiàn)旋轉(zhuǎn)時(shí)對(duì)內(nèi)存的位操作 在對(duì)單色和4位色圖像進(jìn)行旋轉(zhuǎn)時(shí),需要進(jìn)行位操作。以單色位圖為例,一個(gè)字節(jié)包含8個(gè)像素,那么在旋轉(zhuǎn)90度時(shí),一個(gè)字節(jié)中的不同位,會(huì)變換到不同的掃描行,也就是說要將字節(jié)中的位一一取出,計(jì)算其位置,并重新放到新字節(jié)的合適的位中。,,關(guān)鍵技術(shù)及難點(diǎn),直接對(duì)內(nèi)存中圖像數(shù)據(jù)進(jìn)行操作實(shí)現(xiàn)的特效 本文在實(shí)現(xiàn)特效時(shí)采用了兩種
22、完全不同方法。 一種是利用改變Draw()函數(shù)參數(shù)實(shí)現(xiàn)的特效。 另一種即是先在內(nèi)存中對(duì)圖像數(shù)據(jù)變換生成特效過程中的每一幀圖像,然后調(diào)用Draw()函數(shù)直接將其顯示出來。 以馬賽克效果為例,如果使用Draw()函數(shù)實(shí)現(xiàn),由隨機(jī)函數(shù)確定顯示哪一塊后,則直接將該塊顯示出來。而使用內(nèi)存特效,在消隱的過程中,在此時(shí)應(yīng)該將原始圖像數(shù)據(jù)中的該塊對(duì)應(yīng)的數(shù)據(jù)置為白色,而以前已置為白色的數(shù)據(jù)塊仍保持白色不變;在恢復(fù)
23、過程中則正相反,是由原始圖像數(shù)據(jù)代替白色數(shù)據(jù)。,,關(guān)鍵技術(shù)及難點(diǎn),右鍵菜單的實(shí)現(xiàn) 利用MFC函數(shù)TrackPopupMenu()實(shí)現(xiàn)右鍵菜單。但是,右鍵菜單的實(shí)現(xiàn)關(guān)鍵是如何更新UI界面的問題。例如,對(duì)于“縮小”命令,當(dāng)連續(xù)進(jìn)行縮小,顯示比例減為負(fù)值時(shí),應(yīng)該禁用“縮小”命令,此時(shí),右鍵菜單中該命令項(xiàng)應(yīng)該變?yōu)榛疑?。?duì)于普通菜單和工具欄,可以接收UPDATE_COMMAND_UI消息,并在該消息的處理函數(shù)中改變命令項(xiàng)的狀態(tài)。而右
24、鍵菜單是無法接收該消息的,故必須使用其他的方法。本文采用CMenu類中的EnableMenuItem()函數(shù)來實(shí)現(xiàn)。,,關(guān)鍵技術(shù)及難點(diǎn),瀏覽功能的實(shí)現(xiàn) 在打開一幅圖片后,可以使用“上一張”、“下一張”命令或按“Page Up”、“Page Down”鍵瀏覽當(dāng)前目錄中可支持的圖像。 實(shí)現(xiàn)該功能應(yīng)注意的問題是,在打開一幅圖片并讀取當(dāng)前目錄中可支圖像列表后,如果用戶對(duì)該目錄中的圖片進(jìn)行了刪除或向該目錄中加入
25、了新的圖片,那么在使用“上一張”、“下一張”命令時(shí),應(yīng)該重新讀取文件表。,,軟件測(cè)試與改進(jìn)思想,1、5種圖像格式的解碼和顯示是否正常。 2、特效是否適合所有大小和顏色深度的圖像,圖像邊界處是否正確處理。 3、幾種格式的互相轉(zhuǎn)換,尤其是BMP、TGA、PCX和JPEG或GIF之間的轉(zhuǎn)換。 4、內(nèi)存分配和釋放是否正確,有無內(nèi)存泄漏。,軟件測(cè)試與改進(jìn)思想,本文以實(shí)現(xiàn)了需求分析中要求的全部功能,并且按照預(yù)期的目標(biāo)生成了
26、一個(gè)完整實(shí)用的圖像瀏覽軟件。但是由于時(shí)間有限,本軟件的不足也在所難免,主要有以下幾方面需要改進(jìn):(1)GIF圖像不支持動(dòng)畫。(2)在保存為PCX圖像時(shí)只能以8位即256色深度保存。(3)瀏覽當(dāng)前目錄中所有圖像的功能目前使用靜態(tài)數(shù)組保存文件名,這樣如果當(dāng)前目錄中支持的圖像文件數(shù)超過了數(shù)組上限,那么多出的圖片將不能使用“上一張”、“下一張”的功能來瀏覽。,,感謝各位老師!感謝源碼愛好者提供源程序交流下載:網(wǎng)址(http://www
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于jsp和hibernate電子商務(wù)網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)開題報(bào)告
- 基于jsp的電子商務(wù)網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)
- (開題報(bào)告)基于jsp的電子商務(wù)網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)
- 電子商務(wù)網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)
- 電子商務(wù)網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn)
- 書店電子商務(wù)網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn)
- 電子商務(wù)網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 電子商務(wù)課程設(shè)計(jì)報(bào)告---電子商務(wù)網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn)
- 基于ASP技術(shù)電子商務(wù)網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn).pdf
- 電子商務(wù)網(wǎng)站設(shè)計(jì)與分析
- 基于.net電子商務(wù)網(wǎng)站的研究與實(shí)現(xiàn)
- 基于jsp的電子商務(wù)購(gòu)物網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)
- 動(dòng)態(tài)電子商務(wù)網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 05 電子商務(wù)網(wǎng)站的實(shí)現(xiàn)
- 安全電子商務(wù)網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 外文翻譯---電子商務(wù)網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn)
- 圖書電子商務(wù)網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 電子商務(wù)網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)——畢業(yè)論文
- 基于.net平臺(tái)的電子商務(wù)網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)-論文
- 電子商務(wù)網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論