




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 . 畢業(yè)設(shè)計(jì)(論文)基于VC+的圖像處理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)VC + + based Image Processing System Design and Implementation班級(jí) 計(jì)/商 061 學(xué)生學(xué)號(hào)指導(dǎo)教師職稱導(dǎo)師單位 工業(yè)職業(yè)技術(shù)學(xué)院信息系 論文提交日期21 / 28一選題意義與背景:圖像處理技術(shù)一直是困擾Visual C+初學(xué)者的一個(gè)難題,在Visual C+中,沒(méi)有一個(gè)完善的控件能夠顯示和處理各種格式的圖像,有時(shí)用戶需要了解各種圖像的文件格式,這極大的增加了初學(xué)者的學(xué)習(xí)難度?;诖耍O(shè)計(jì)了一個(gè)圖像處理軟件,本課題屬于小型的圖像處理軟件,主要用于實(shí)現(xiàn)圖像的顯示與批量轉(zhuǎn)換操作。通
2、過(guò)分析系統(tǒng)的工作過(guò)程,將其用Visual C+程序?qū)崿F(xiàn),將理論學(xué)習(xí)與實(shí)例相結(jié)合,來(lái)培養(yǎng)學(xué)生的綜合能力。二畢業(yè)設(shè)計(jì)(論文)主要容:主要工作:負(fù)責(zé)程序各個(gè)功能的整合、調(diào)試與運(yùn)行三計(jì)劃進(jìn)度:階段工作程序和要求完成時(shí)間前期準(zhǔn)備階段學(xué)習(xí)畢業(yè)設(shè)計(jì)管理規(guī)定并準(zhǔn)備與測(cè)試有關(guān)的資料09.10.19中期指導(dǎo)檢查階段1.需求分析階段與建立軟件與硬件環(huán)境條件。分析設(shè)計(jì)任務(wù)書(shū)的要求和用戶需求,進(jìn)行可行性分析和需求分析,確定系統(tǒng)所需的模版,安裝建立設(shè)計(jì)所需軟硬件環(huán)境;素材采集,處理09.10.20-09.10.302. 在確定的模版上,對(duì)系統(tǒng)功能進(jìn)行分工,進(jìn)行相關(guān)程序設(shè)計(jì),根據(jù)用戶的使用反饋結(jié)果修正自己的設(shè)計(jì)方案,在解決
3、了大部分的bug后,可以將系統(tǒng)進(jìn)行打包。09.11.02-09.11.043.進(jìn)行軟件的性能測(cè)試,09.11.04-09.11.064.編寫(xiě)測(cè)試腳本,并對(duì)測(cè)試結(jié)果進(jìn)行分析 a.編寫(xiě)測(cè)試腳本b.對(duì)測(cè)試結(jié)果進(jìn)行分析09.11.09-09.11.13后期答辯總結(jié)階段1.編寫(xiě)畢業(yè)論文a.學(xué)習(xí)書(shū)寫(xiě)畢業(yè)論文規(guī)b.查找與所要寫(xiě)的論文有關(guān)資料c.根據(jù)論文書(shū)寫(xiě)規(guī)編寫(xiě)論文d.給指導(dǎo)老師審查并修改09.11.16-09.11.262.交畢業(yè)設(shè)計(jì)09.11.273.準(zhǔn)備答辯09.11.27四畢業(yè)設(shè)計(jì)(論文)結(jié)束應(yīng)提交的材料:1、測(cè)試計(jì)劃2、測(cè)試腳本3、測(cè)試報(bào)告4、畢業(yè)論文指導(dǎo)教師 教研室主任 年 月 日年 月 日論文
4、真實(shí)性承諾與指導(dǎo)教師聲明學(xué)生論文真實(shí)性承諾本人重聲明:所提交的作品是本人在指導(dǎo)教師的指導(dǎo)下,獨(dú)立進(jìn)行研究工作所取得的成果,容真實(shí)可靠,不存在抄襲、造假等學(xué)術(shù)不端行為。除文中已經(jīng)注明引用的容外,本論文不含其他個(gè)人或集體已經(jīng)發(fā)表或撰寫(xiě)過(guò)的研究成果。對(duì)本文的研究做出重要貢獻(xiàn)的個(gè)人和集體,均已在文中以明確方式標(biāo)明。如被發(fā)現(xiàn)論文中存在抄襲、造假等學(xué)術(shù)不端行為,本人愿承擔(dān)本聲明的法律責(zé)任和一切后果。畢業(yè)生簽名:日 期:指導(dǎo)教師關(guān)于學(xué)生論文真實(shí)性審核的聲明本人重聲明:已經(jīng)對(duì)學(xué)生論文所涉與的容進(jìn)行嚴(yán)格審核,確定其容均由學(xué)生在本人指導(dǎo)下取得,對(duì)他人論文與成果的引用已經(jīng)明確注明,不存在抄襲等學(xué)術(shù)不端行為。指導(dǎo)教師
5、簽名: 日 期:摘 要本文對(duì)圖形圖像處理系統(tǒng)的發(fā)展現(xiàn)狀和所采用的主要技術(shù)進(jìn)行了詳細(xì)分析,確定了相應(yīng)的結(jié)構(gòu)和主要功能,以與實(shí)際開(kāi)發(fā)中所采取的技術(shù)。系統(tǒng)在Windows XP平臺(tái)下實(shí)現(xiàn),本課題是采用Visual C+作為編程工具,采用面向?qū)ο蟮某绦蛟O(shè)計(jì)技術(shù)實(shí)現(xiàn)一個(gè)圖形繪制和圖像處理的應(yīng)用軟件。主要工作分為三類,包括基本圖形繪制與編輯、簡(jiǎn)單的圖像處理、圖像格式的轉(zhuǎn)換。圖形方面主要是設(shè)計(jì)圖形基類,以與繼承圖形基類的具體圖形類。通過(guò)對(duì)獨(dú)立功能的封裝,可以為今后需要的圖形圖像的應(yīng)用奠定基礎(chǔ)。系統(tǒng)的優(yōu)點(diǎn)有:充分體現(xiàn)了面向?qū)ο蟮脑O(shè)計(jì)思想,充分運(yùn)用了C+的特性。程序結(jié)構(gòu)清晰,可讀性好,程序中做了充分的注釋。 最
6、后,對(duì)系統(tǒng)進(jìn)行測(cè)試表明,系統(tǒng)功能達(dá)到了預(yù)期的要求,界面友好,操作簡(jiǎn)便,運(yùn)行也較穩(wěn)定,是一個(gè)完成基本功能的圖形圖像系統(tǒng)。 總體上,本文介紹了系統(tǒng)開(kāi)發(fā)設(shè)計(jì)的全過(guò)程和設(shè)計(jì)過(guò)程中部分代碼,對(duì)系統(tǒng)中采用的關(guān)鍵技術(shù)也作了一些必要的說(shuō)明,對(duì)圖像變換的基本原理,圖像處理的基本原理和各種圖像格式做了詳細(xì)的闡述。關(guān)鍵詞:圖像處理系統(tǒng),圖像顯示,圖片格式轉(zhuǎn)換。AbstractThis article has carried on the detailed analysis about graph image processing system development and using of the key tec
7、hnology,identify the corresponding structure and central function, as well as the system adopts technology in the actual development. The system realizes under the Windows XP platform, the topic use Visual C+ as a programming tool, use object-oriented programming techniques to achieve a graphic and
8、image processing software. Major work is divided into three categories, basic drawing and editing graphics, simple image processing, and image format conversion. The graph aspect is designs the graph base class , as well as inherits the graph base classs specific graph class. Through independent fun
9、ctions encapsulation, for the futures needs of the graphic images lays the foundation. The system merit has: the object-oriented designs thought application of the c+ properties, Programs structure is clear, good readability, codes has the full annotation in the program. Easy expansion and transplan
10、tation. Finally, systems testing shows, systems functions achieve the expected demand, friendly interface, and the operation is simple, also a much stable operation, it has basic functions of the graphic image system. As a whole, this paper describes the system design process and part of the process
11、 of designing code, it made some necessary explanations about key technology in the system, it made the detailed description to image transform of the basic principle, the image processing basic principle and various image formats.Key word: The imagery processing system, image display, image transfo
12、rms.目 錄摘要IAbstractII第一章圖像處理系統(tǒng)11.1 概述11.2 系統(tǒng)分析11.2.1 需求分析11.2.2 可行性分析11.3 總體設(shè)計(jì)11.3.1 項(xiàng)目規(guī)劃11.3.2 系統(tǒng)功能架構(gòu)圖21.4 系統(tǒng)設(shè)計(jì)31.4.1 設(shè)計(jì)目標(biāo)31.4.2 開(kāi)發(fā)與運(yùn)行環(huán)境31.5 技術(shù)準(zhǔn)備31.5.1 基本繪圖操作31.5.2 存畫(huà)布的設(shè)計(jì)31.5.3 自定義全局函數(shù)41.5.4 自定義菜單51.5.5 自定義工具欄111.6主要功能模塊的設(shè)計(jì)121.6.1 系統(tǒng)架構(gòu)設(shè)計(jì)121.6.2公共模塊設(shè)計(jì)141.6.3 主窗體設(shè)計(jì)14參考文獻(xiàn):18致19第一章 圖像處理系統(tǒng)1.1 概述 圖像處理技術(shù)一
13、直是困擾Visual C+初學(xué)者的一個(gè)難題,在Visual C+中,沒(méi)有一個(gè)完善的控件能夠顯示和處理各種格式的圖像,有時(shí)用戶需要了解各種圖像的文件格式,這極增加了初學(xué)者的學(xué)習(xí)難度?;诖?,設(shè)計(jì)一個(gè)圖像處理軟件。1.2 系統(tǒng)分析1.2.1 需求分析n 通過(guò)調(diào)查,要求系統(tǒng)具有以下功能。n 顯示BMP、JPEG、GIF等各種格式的圖像。n 實(shí)現(xiàn)BMP與JPEG、GIF圖像的批量轉(zhuǎn)換。n 實(shí)現(xiàn)對(duì)位圖的旋轉(zhuǎn)、反色、灰度化、線性變換等各種操作。n 實(shí)現(xiàn)手寫(xiě)數(shù)字的識(shí)別。1.2.2 可行性分析為了降低程序開(kāi)發(fā)的難度,使用微軟公司的GDI+。GDI+又稱為GDIPlus,是微軟公司.NET構(gòu)架的一部分,它封裝了
14、各種圖像的處理技術(shù)。通過(guò)使用GDI,用戶可以非常方便地實(shí)現(xiàn)圖像的顯示與轉(zhuǎn)換。雖然GDI+屬于.NET框架的一部分,但是用戶可以在非.NET環(huán)境下使用GDI+,有關(guān)具體的使用方法,在以下部分進(jìn)行介紹。 1.3 總體設(shè)計(jì)1.3.1 項(xiàng)目規(guī)劃圖像處理系統(tǒng)是一個(gè)典型的圖像處理軟件,它由圖像顯示、圖像轉(zhuǎn)換、圖像處理、字符識(shí)別、其他和幫助等模塊組成。l 圖像顯示模塊該模塊主要包括顯示位圖、顯示JPEG、顯示GIF 3個(gè)部分。l 圖像轉(zhuǎn)換模式該模塊主要包括位圖轉(zhuǎn)換為JPEG、JPEG轉(zhuǎn)換為位圖、位圖轉(zhuǎn)換為GIF、GIF轉(zhuǎn)換為位圖4個(gè)部分。l 圖像處理模塊該模塊主要包括圖像旋轉(zhuǎn)、圖像銳化處理、圖像反色處理、灰
15、度化處理、線性變換5個(gè)部分。l 字符識(shí)別模塊該模塊主要包括手寫(xiě)數(shù)字識(shí)別。l 其他模塊該模塊主要包括設(shè)置菜單的固定顏色和隨機(jī)顏色兩個(gè)部分。l 幫助模塊該模塊主要包括軟件的版本、開(kāi)發(fā)單位等信息。1.3.2 系統(tǒng)功能架構(gòu)圖圖像處理系統(tǒng)圖像顯示模塊圖像轉(zhuǎn)換模塊圖像處理模塊字符識(shí)別模塊幫助固定顏色隨機(jī)顏色關(guān)于顯示J PEG顯示G I F顯示位圖位圖轉(zhuǎn)換JPEGJPEG轉(zhuǎn)換位圖位圖轉(zhuǎn)換GIFGIF轉(zhuǎn)換位圖圖像旋轉(zhuǎn)圖像銳化處理圖像反色處理灰度化處理線性變換手寫(xiě)數(shù)字識(shí)別其他系統(tǒng)功能構(gòu)架圖如圖1.1所示圖1.1 圖像處理系統(tǒng)功能架構(gòu)圖1.4 系統(tǒng)設(shè)計(jì)1.4.1 設(shè)計(jì)目標(biāo)本系統(tǒng)屬于小型的圖像處理軟件,主要用于實(shí)現(xiàn)
16、圖像的顯示與批量轉(zhuǎn)換操作。具體設(shè)計(jì)要求如下。l 實(shí)現(xiàn)各種圖像格式的顯示。l 系統(tǒng)采用良好的人機(jī)對(duì)話模式,界面設(shè)計(jì)美觀、友好。l 支持圖像的單一轉(zhuǎn)換與批量轉(zhuǎn)換。l 實(shí)現(xiàn)位圖的各種常規(guī)操作。例如圖像旋轉(zhuǎn)、灰度化處理、線性變換等。l 系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。1.4.2 開(kāi)發(fā)與運(yùn)行環(huán)境系統(tǒng)開(kāi)發(fā)平臺(tái):Visual C+ 6.0 。運(yùn)行平臺(tái):Windows XP/Windows 2000/Windows 2003 。分辨率:最佳效果 1024*1280像素。1.5 技術(shù)準(zhǔn)備1.5.1 基本繪圖操作繪圖操作通常是指在窗口的某個(gè)區(qū)域輸出位圖圖像。窗口通常關(guān)聯(lián)一個(gè)設(shè)備上下文CDC,所有的繪圖操作都是通過(guò)CDC來(lái)
17、完成的。用戶可以通過(guò)調(diào)用窗口類的GetDC方法獲得一個(gè)CDC對(duì)象指針。CDC提供BitBlt、StretchBlt等方法來(lái)輸出位圖,但是這些方法均需要借助另一個(gè)CDC對(duì)象來(lái)實(shí)現(xiàn)。如何設(shè)置源設(shè)備上下文,并調(diào)用BitBit方法輸出位圖。CDC*Pdc=GetDC( ); /獲取窗口設(shè)備的上下文CBitmap bk ; /定義位圖對(duì)象CDCmemdc; /定義設(shè)備上下文 memdc.CreateCompatibleDC(pDC); /創(chuàng)建一個(gè)兼容的設(shè)備上下文 bk.LoadBitmap(IDB_CHESSBOARD); /加載位圖對(duì)象memdc.SelectObject(&bk); /選中位圖pDC
18、-BitBlt(0,600,600,&memdc,0,0,SRCCOPY);/調(diào)用BitBlt方法輸出位圖1.5.2 存畫(huà)布的設(shè)計(jì)在繪制圖像時(shí),如果頻繁的進(jìn)行多次繪圖操作,會(huì)出現(xiàn)閃爍的情況。為了防止閃爍的出現(xiàn),可以設(shè)計(jì)一個(gè)臨時(shí)的畫(huà)布,稱之為存畫(huà)布,讓所有的繪圖操作均在存畫(huà)布上進(jìn)行,然后在存畫(huà)布對(duì)象失去作用域時(shí)將其輸出到目標(biāo)設(shè)備上下文中,這樣就阻止了閃爍情況的出現(xiàn),存畫(huà)布的設(shè)計(jì)代碼如下:m_ pbmp-CreateCompatibleBitmap(Pdc,rect.Width(),rect,Height() );m_poldbmp=SelectObject(m_bmp); /選中位圖對(duì)象m_Pd
19、c=PdC; /設(shè)置成員變量m_Rect=rect; /設(shè)置成員變量/將目標(biāo)區(qū)域繪制在存畫(huà)布上this-BitBlt(m_Rect.left,m_Rect.top,m_Rect.Width(),m_Rect.Height(),Pdc,m_Rect.left,m_Rect.top,SRCCOPPY); SelectObject(m_poldbmp); /選中之前選中的對(duì)象If(m_pbmp!=NULL) /判斷位圖對(duì)象是否為空delete m_pbmp; /釋放位圖對(duì)象DelectObject(this); /釋放設(shè)備上下文存畫(huà)布CMemDC只包含一個(gè)構(gòu)造函數(shù)和析構(gòu)函數(shù),其中,在構(gòu)造函數(shù)部分,將
20、根據(jù)參數(shù)pDC創(chuàng)建一個(gè)兼容的設(shè)備上下文,并且將pDC的容繪制在存畫(huà)布上;在析構(gòu)函數(shù)中,會(huì)將存畫(huà)布的容輸出到目標(biāo)設(shè)備的上下文中。1.5.3 自定義全局函數(shù)在Visual C+中沒(méi)有提供直接的函數(shù)用于獲取文件的名稱(去除擴(kuò)展名)和獲取文件的擴(kuò)展名(去除文件名)。為此,定義了兩個(gè)全局函數(shù)來(lái)獲取文件的名稱和文件擴(kuò)展名。函數(shù)定義如下:CString ExtractFileName(CString&str) /獲取文件名稱intpos=str.ReverseFind(.) /反向查找“.”的位置return str.Left(pos); /從左方開(kāi)始截取字符串,并返回截取的字符串 CString GetF
21、ileExtended Name (CString&strFile) /獲取文件擴(kuò)展名int pos=strFile.ReverseFind(.); /反向查找“.”的位置return strFile.Right(strFile.GetLength()-pos-1)菜單欄高度在為本系統(tǒng)設(shè)計(jì)自定義菜單時(shí),由于主界面對(duì)話框的寬度可以調(diào)整,導(dǎo)致菜單欄的高度會(huì)發(fā)生變化,如圖1.2所示。圖1.2 菜單欄高度從1.2中可以發(fā)現(xiàn),當(dāng)對(duì)話框的寬度變化時(shí),菜單欄的高度也會(huì)發(fā)生變化,這在繪制菜單的背景顏色時(shí)候會(huì)帶來(lái)困難,需要從user32.dll動(dòng)態(tài)庫(kù)中導(dǎo)出該函數(shù)。流程圖如下:hModule址void*pVoid
22、=(void*)GetProcAddress(hModule,GetMenuBarInfo);pVoid數(shù)(FunGetMenuInfo)pVoid)(hwnd,idObject,:FreeLibrary(hModule);資源:FreeLibrary(hModule);資源NYNYHMODULEhModule=:LoadLibrary(user32.dll);1.5.4 自定義菜單為了使程序界面更加美觀,在本系統(tǒng)中自定義了一個(gè)菜單,實(shí)現(xiàn)菜單的特殊效果顯示,如圖1.3所示:圖1.3 自定義菜單在Visual C+中,實(shí)現(xiàn)自定義菜單是比較容易的,MFC類庫(kù)提供了CMenu類用于設(shè)計(jì)菜單,用戶只要
23、從該類派生一個(gè)子類,然后改寫(xiě)MeasureItem方法,設(shè)置菜單項(xiàng)的高度和寬度;改寫(xiě)DrawItem方法,根據(jù)菜單項(xiàng)的不同狀態(tài),繪制不同效果的菜單項(xiàng)就可以了。具體設(shè)計(jì)如下:(1) 從CMenu類派生一個(gè)子類CCustomMenu。(2) 定義一個(gè)菜單項(xiàng)結(jié)構(gòu)CMenuItem,記錄菜單項(xiàng)的信息。代碼如下: /定義一個(gè)結(jié)構(gòu),記錄菜單項(xiàng)的詳細(xì)信息Struct CMenuItem CString m_Menutext; /菜單項(xiàng)的文本 UINTm_ImageIndex; /菜單項(xiàng)圖像索引Int m_MenuType ; / 菜單項(xiàng)的類型 -2:頂層菜單,-1:彈出式菜單,0:分隔條,其他:普通菜單(3
24、) 向CCustomMenu類中添加成員變量。(4) 在CCustomMenu類的構(gòu)造函數(shù)中初始化成員變量。CCustomMenu:CCustomMenu()m_ItemCount = 0; /初始化菜單項(xiàng)數(shù)量m_Index = 0; /初始化整型變量m_MenuList = NULL; /初始化菜單列表m_BkColor = RGB(204,199,186); /初始化背景顏色m_SelTopColor = RGB(193, 210, 238); /初始化頂層菜單顏色 m_RandColor = FALSE; /是否采用隨機(jī)顏色(5) 在CCustomMenu類的析構(gòu)函數(shù)中釋放成員變量占據(jù)的
25、堆空間。CCustomMenu:CCustomMenu()if (m_ItemCount 0) /如果菜單項(xiàng)0,則釋放菜單列表delete m_MenuList;(6) 向CCustomMenu類中添加GetAllItemCount方法,獲取菜單項(xiàng)的數(shù)量,當(dāng)前流程圖如下:pMenuCMenu*pMenu=CMenu:FromHandle(hMenu);intemcount=0Multii+iGetMenuItemCount();FirstFindNNNYYY(7) 向CCustomMenu類中添加AttachMenu方法,附加菜單句柄到CCustomMenu類對(duì)象上BOOL CCustomMe
26、nu:AttatchMenu(HMENU hMenu)Attach(hMenu); /附加菜單句柄到菜單對(duì)象GetAllItemCount(hMenu,m_ItemCount); /獲取菜單項(xiàng)的數(shù)量if (m_ItemCount 0) /判斷菜單項(xiàng)數(shù)量是否0m_MenuList = new CMenuItemm_ItemCount; /創(chuàng)建菜單列表return TRUE;(8)向CCustomMenu類中添加SetMenuItemInfo方法,將每個(gè)菜單項(xiàng)關(guān)聯(lián)一個(gè)CMenuItem結(jié)構(gòu)對(duì)象。(9)向CCustomMenu類中添加GetTopMenuWidth方法,獲取頂層菜單的高度。流程圖如下
27、:intCount=GetMenuItemCount()im_hWnd,m_hMenu,i,rc);i+returnwidth; NYinti=0(10)向CCustomMenu類中添加GetClientMenuRgn方法,獲取菜單欄中的非菜單項(xiàng)區(qū)域。流程圖如下:/獲取菜單欄中非菜單項(xiàng)區(qū)域HRGN CCustomMenu:GetClientMenuRgn()MENUBARINFO MenuInfo; /定義菜單項(xiàng)信息對(duì)象memset(&MenuInfo,0,sizeof(MENUBARINFO); /初始化菜單項(xiàng)信息MenuInfo.cbSize = sizeof(MENUBARINFO);/
28、設(shè)置菜單項(xiàng)信息結(jié)構(gòu)的大小GetMenuBarInfo(AfxGetMainWnd()-m_hWnd,OBJID_MENU,0,&MenuInfo);CRect rc = MenuInfo.rcBar; /獲取菜單欄的區(qū)域int MenuCount = GetMenuItemCount(); /獲取頂層菜單的數(shù)量CRect *pRC = new CRectMenuCount; /定義一個(gè)區(qū)域指針,記錄菜單項(xiàng)區(qū)域HRGN *pRgn = new HRGNMenuCount;/定義一個(gè)選區(qū)指針,記錄菜單項(xiàng)選區(qū)CRect winRC; /定義一個(gè)區(qū)域?qū)ο驛fxGetMainWnd()-GetWindo
29、wRect(winRC); /獲取主窗口區(qū)域HRGN retRgn = CreateRectRgn(0,0,0,0);HRGNMenuClientRgn = CreateRectRgn(0,0,0,0);for (int j=0; jMenuCount; j+) /組合菜單項(xiàng)的區(qū)域/去除菜單欄中菜單項(xiàng)的區(qū)域,以獲取非菜單項(xiàng)區(qū)域CombineRgn(retRgn,MenuRgn,MenuClientRgn,RGN_DIFF);for ( j=0; jMenuCount; j+)iMenuCountim_hWi+HRGNMenuRgn=CreateRectRgn(rc.left,rc.top,rc
30、.right,rc.bottom);Rgn(rc.left,rc.top,rintj=0CombineRgn(MenuClientRgn,MenuClientRgn,pRgnj,RGN_OR);CombineRgn(MenuClientRgn,MenuClientRgn,,以獲取非菜單項(xiàng)區(qū)域j+Side by sidejDrawText(strMenuText,Rect,DT_SINGLELINE|DT_VCENTER|DT_LEFT);(12)向CCustomMenu類中添加DrawTopMenuBk方法,繪制頂層菜單的背景顏色。(13)向CCustomMenu類中添加DrawSepMenu
31、方法,繪制菜單分隔條。void CCustomMenu:DrawSepMenu(CDC *pDC, CRect Rect)pDC-Draw3dRect(Rect,RGB(255,0,0),RGB(0,0,255); (14)向CCustomMenu類中添加DrawMenuBk方法,繪制菜單項(xiàng)的背景顏色。void CCustomMenu:DrawMenuBk(CDC *pDC, CRect Rect, COLORREF SrcColor, COLORREF DesColor, BOOLState)if (State)pDC-Rectangle(Rect); Rect.DeflateRect(1,
32、1);int r1,g1,b1; /讀取漸變起點(diǎn)的顏色值r1 = GetRValue(SrcColor);g1 = GetGValue(SrcColor);b1 = GetBValue(SrcColor);int r2,g2,b2;/讀取漸變終點(diǎn)的顏色值r2 = GetRValue(DesColor);g2 = GetGValue(DesColor);b2 = GetBValue(DesColor);float r3,g3,b3;/菜單區(qū)域水平方向每個(gè)點(diǎn)RGB值應(yīng)該變化的度(圍)r3 = (float)(r2-r1) / (float)(Rect.Height();g3 = (float)(g
33、2-g1)/(float)(Rect.Height();b3 = (float)(b2-b1)/(float)(Rect.Height();COLORREF r,g,b;/菜單區(qū)域水平方向每個(gè)點(diǎn)的顏色值CPen* pOldPen ;for (int i=Rect.top; iSelectObject(&pen);pDC-MoveTo(Rect.left,i);pDC-LineTo(Rect.right,i);pDC-SelectObject(pOldPen);elsepDC-FillSolidRect(Rect,RGB(0x000000F9, 0x000000F8, 0x000000F7);(
34、15)改寫(xiě)菜單類的MeasureItem虛方法,根據(jù)菜單項(xiàng)的文本設(shè)置菜單項(xiàng)的寬度。lpStruct-itemWidth = size.cx+25; /設(shè)置菜單項(xiàng)的寬度 (16)改寫(xiě)菜單類的DrawItem虛方法,根據(jù)菜單項(xiàng)的不同狀態(tài),繪制不同效果的菜單。unsigned int m_state = lpStruct-itemState;/獲取菜單項(xiàng)的狀態(tài)CDC* pDC = CDC:FromHandle(lpStruct-hDC); /獲取菜單設(shè)備上下文CString str = (CMenuItem*)(lpStruct-itemData)-m_MenuText; /獲取菜單各項(xiàng)的文本int
35、 MenuID = (CMenuItem*)(lpStruct-itemData)-m_MenuType; /獲取菜單類型CRect Rect = lpStruct-rcItem; /獲取菜單項(xiàng)區(qū)域pDC-SetBkMode(TRANSPARENT); /設(shè)置透明的背景模式switch(MenuID) /判斷菜單類型1.5.5 自定義工具欄在本系統(tǒng)中為了使程序主界面更加美觀,自定義了一個(gè)工具欄,效果如圖1.4所示。圖1.4 自定義工具欄自定義工具欄最簡(jiǎn)單的方法是處理NM_CUSTOMDRAW消息,在其消息處理函數(shù)中根據(jù)工具欄按鈕的不同狀態(tài)繪制不同效果的工具欄按鈕。具體設(shè)計(jì)步驟如下。l 從CTo
36、olBar類派生一個(gè)子類,本例為CCustomBar。l 向CCustomBar類中添加變量成員。l 在CCustomBar類的消息映射部分添加ON_NOTIFY_REFLECT映射宏,用于處理NM_CUSTOMRAW消息。l 向CCustomBar類中添加OnOwnerDraw方法,表示NM_CUSTOMDRAW消息的處理方法,用于繪制工具欄按鈕。l 向CCustomBar類中添加DrawButton方法,根據(jù)工具欄按鈕的不同狀態(tài),繪制不同效果的工具欄按鈕。1.6主要功能模塊的設(shè)計(jì)1.6.1 系統(tǒng)架構(gòu)設(shè)計(jì)為了使讀者能夠?qū)ο到y(tǒng)文件有更清晰的認(rèn)識(shí)并了解其使用方法,在此設(shè)計(jì)了文件架構(gòu)圖,如圖1.5
37、所示。CMainFrame(系統(tǒng)主界面)像 圖像顯示 圖像轉(zhuǎn)換 圖像處理 字符識(shí)別 幫助圖1.5 主文件架構(gòu)圖圖像顯示文件架構(gòu)圖和圖像轉(zhuǎn)換文件架構(gòu)如圖1.6和圖1.7所示。CShowImage顯示位圖CShowJPEG顯示JPEGCShowGIF顯示GIF圖像顯示圖1.6 圖像顯示文件架構(gòu)圖CBmpToJpeg位圖轉(zhuǎn)換為JPEGCJpegToBmpJPEG轉(zhuǎn)換為位圖CBmpToGif位圖轉(zhuǎn)換為GIF圖像轉(zhuǎn)換CGifToBmpGIF轉(zhuǎn)換為位圖圖1.7 圖像轉(zhuǎn)換文件架構(gòu)圖圖像處理文件架構(gòu)圖和字符識(shí)別文件架構(gòu)圖如圖1.8和1.9所示。幫助文件架構(gòu)圖如圖1.10所示。CRotationImage圖像旋
38、轉(zhuǎn)CBmpSharp圖像銳化處理CReverseColor圖像反色處理圖像處理CGrayHandle灰度化處理CLineArity線性變換圖1.8圖像處理文件架構(gòu)圖字符識(shí)別 CRecNumber 幫助 CAboutDlg 手寫(xiě)數(shù)字識(shí)別 關(guān)于圖1.9 字符識(shí)別文件架構(gòu)圖 圖1.10 幫助文件架構(gòu)圖1.6.2公共模塊設(shè)計(jì)在設(shè)計(jì)圖像效果顯示時(shí),有些圖像可能比較大,在窗口中不能完全顯示出來(lái)。為了讓用戶能夠?yàn)g覽圖像,可以單獨(dú)設(shè)計(jì)了一個(gè)滾動(dòng)窗口,當(dāng)控件設(shè)置在窗口中,用戶可以通過(guò)滾動(dòng)條來(lái)瀏覽控件的各個(gè)部分。滾動(dòng)窗口的設(shè)計(jì)步驟如下。(1)創(chuàng)建一個(gè)對(duì)話框,類名為“CImageContainer”,設(shè)置對(duì)話框的屬
39、性。 (2)處理對(duì)話框的WM_HSCROLL消息,設(shè)置窗口的滾動(dòng)方向和圍。代碼如下:(3)處理對(duì)話框的VSCROLL消息,設(shè)置窗口的滾動(dòng)方向和圍。代碼如下:case SB_PAGELEFT: /在滾動(dòng)塊的左方空白滾動(dòng)區(qū)域單擊,增量為6case SB_PAGERIGHT: /在滾動(dòng)塊的右方空白滾動(dòng)區(qū)域單擊,增量為6 (4)處理對(duì)話框的WM_MOUSEWHEEL消息,響應(yīng)鼠標(biāo)的滾輪事件。代碼如下:GetScrollInfo(SB_VERT,&vinfo); /獲取滾動(dòng)條信息int min,max,thumbwidth;min = vinfo.nMin;max = vinfo.nMax;thumbw
40、idth = vinfo.nPage;int pos = GetScrollPos(SB_VERT); /獲取垂直滾動(dòng)條位置SetScrollPos(SB_VERT,pos-6); /設(shè)置垂直滾動(dòng)條的位置ScrollWindow(0,6); /滾動(dòng)窗口1.6.3 主窗體設(shè)計(jì)1. 實(shí)現(xiàn)目標(biāo)圖像處理系統(tǒng)主窗體主要由菜單、工具欄、客戶區(qū)域和狀態(tài)欄4部分組成,主要功能是對(duì)圖像處理系統(tǒng)的各個(gè)模塊進(jìn)行調(diào)整。圖像處理系統(tǒng)主窗體的運(yùn)行效果如圖1.11所示。1.11圖像處理系統(tǒng)主窗體的運(yùn)行效果2. 設(shè)計(jì)步驟(1)創(chuàng)建一個(gè)單文檔/視圖結(jié)構(gòu)的應(yīng)用程序,工程名稱為“ImageHandle”。(2)在工作區(qū)的資源視圖窗
41、口中修改菜單資源ID為“IDR_MAINMENU”,設(shè)置菜單項(xiàng)的效果如圖1.12所示。圖1.12 菜單資源設(shè)計(jì)菜單資源文件代碼如下: IDR_MAINMENU MENU DISCARDABLEBEGIN POPUP“圖像顯示” BEGIN MENUITEM “顯示位圖”, ID_MENUSHOWBMP MENUITEM“顯示JPEG”, ID_MENUSHOWJPG MENUITEM “顯示GIF”, ID_MENUSHOWGIF ENDPOPUP“圖像轉(zhuǎn)換”BEGIN MENUITEM “位圖轉(zhuǎn)換為JPEG”, ID_MENUBMPTOJPEG MENUITEM “JPEG轉(zhuǎn)換為位圖”, I
42、D_MENUJPEGTOBMP MENUITEM “位圖轉(zhuǎn)換為GIF”, ID_MENUBMPTOGIF MENUITEM “GIF轉(zhuǎn)換為位圖”, ID_MENUGIFTOBMP ENDPOPUP“圖像轉(zhuǎn)換” BEGIN MENUITEM “圖像旋轉(zhuǎn)”, ID_MENUROTATION MENUITEM “圖像銳化處理”, ID_MENUBMPSHARP MENUITEM “圖像反色處理”, ID_MENUREVERSECOLOR MENUITEM “灰度化處理”, ID_MENUGRAYHANDLE MENUITEM “線性變換”, ID_MENULINEARITYENDPOPUP“圖像轉(zhuǎn)換
43、”, BEGIN MENUITEM “手寫(xiě)數(shù)字識(shí)別”, 65535 ENDPOPUP“圖像轉(zhuǎn)換”, BEGIN MENUITEM“隨機(jī)顏色”, ID_RANDOMCOLOR MENUITEM“固定顏色”, ID_FIXCOLORENDPOPUP“圖像轉(zhuǎn)換”, BEGIN MENUITEM“關(guān)于”, ID_ABOUT ENDEND3. 代碼分析(1) 在應(yīng)用程序類的InitInstance方法中修改單文檔模板構(gòu)造函數(shù)的參數(shù),由于之前修改了菜單資源ID,因此構(gòu)造函數(shù)的參數(shù)應(yīng)設(shè)置為新的菜單資源ID。代碼如下:CSingleDocTemplate* pDocTemplate;pDocTemplate=
44、newCSingleDocTemplate(IDR_MAINMENU,RUNTIME_CLASS(CImageHandleDOC),RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CImageHandleView);AddDocTemplate(pDocTemplate);(2)在主窗口(框架類)的頭文件中引用自定義菜單和工具欄類的頭文件。代碼如下:#include“CustomMenu.h”#include“CustomBar.h”(3)向框架類的頭文件中添加成員變量。代碼如下:CStausBar m_wndStatusBar;CCustimBar m_wnd
45、ToolBar;CImageList m_ImageList;CCustomMenu m_Menu;(4)在創(chuàng)建框架窗口時(shí)創(chuàng)建菜單、工具欄和狀態(tài)欄。代碼和流程圖如下: m_wndToolBar.SetButtonText(0,顯示位圖);m_wndToolBar.SetButtonText(1,顯示JPEG);m_wndToolBar.SetButtonText(2,顯示GIF);m_wndToolBar.SetButtonText(4,位圖轉(zhuǎn)換JPEG);m_wndToolBar.SetButtonText(5,JPEG轉(zhuǎn)換位圖);m_wndToolBar.SetButtonText(6,位
46、圖轉(zhuǎn)換GIF);m_wndToolBar.SetButtonText(7,GIF轉(zhuǎn)換位圖);m_wndToolBar.SetButtonText(9,圖像旋轉(zhuǎn));m_wndToolBar.SetButtonText(10,線性變換);YYNNlpCreateStruct-hMenu=LoadMenu(AfxGetResourceHandle(),MAKEINTRESOURCE(lpCreateStruct);return-1;!m_wndStatusBar.Create(this)|!m_wndStatusBar.SetIndicators(indicators,sizeof(indicato
47、rs)/sizeof(UINT)m_ImageList.Create(30,25,ILC_COLOR32|ILC_MASK,1,1);TRACE0(Failed to create status barn);CFrameWnd:OnCreate(lpCreateStruct)=-1Side By Side(5)在視圖類的OnDraw方法中繪制背景圖像。代碼如下:CImageHandleDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);:SetWindowText(GetParent()-m_hWnd,圖像處理軟件);CBitmap bmp;/定義位圖對(duì)象
48、bmp.LoadBitmap(IDB_MAINBMP); /加載位圖CDC memDC;memDC.CreateCompatibleDC(pDC);memDC.SelectObject(&bmp);BITMAP bmInfo;bmp.GetBitmap(&bmInfo);int width = bmInfo.bmWidth;int height = bmInfo.bmHeight;/獲取位圖的寬度和高度總結(jié)時(shí)至今日,論文基本完成。從最初的茫然,到慢慢的進(jìn)入狀態(tài),再到對(duì)思路逐漸的清晰,整個(gè)制作過(guò)程難以用語(yǔ)言來(lái)表達(dá)。歷經(jīng)了長(zhǎng)時(shí)間的奮戰(zhàn),緊而又充實(shí)的畢業(yè)設(shè)計(jì)終于落下了帷幕?;叵脒@段日子的經(jīng)歷和感受,我感慨萬(wàn)千,在這次畢業(yè)設(shè)計(jì)的過(guò)程中,我擁有了無(wú)數(shù)難忘的回憶和收獲。 畢業(yè)設(shè)計(jì)定下來(lái)的時(shí)候,我當(dāng)時(shí)便立刻著手資料的收集工作中,當(dāng)時(shí)面對(duì)浩瀚的書(shū)海真是有些茫然,不知如何下手。在老師細(xì)心的指導(dǎo)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 動(dòng)脈瘤術(shù)后的護(hù)理
- 公交員工教育培訓(xùn)
- 中學(xué)音樂(lè)教育體系構(gòu)建與實(shí)踐路徑
- 裝修電銷話術(shù)培訓(xùn)
- 中職教育發(fā)展探索與實(shí)踐
- 特殊口腔護(hù)理
- 2025年海洋生態(tài)保護(hù)與修復(fù)政策對(duì)海洋生態(tài)系統(tǒng)服務(wù)功能可持續(xù)性提升策略報(bào)告
- 休閑農(nóng)業(yè)與鄉(xiāng)村旅游融合發(fā)展規(guī)劃報(bào)告:鄉(xiāng)村旅游與旅游產(chǎn)業(yè)融合的商業(yè)模式創(chuàng)新001
- 繪畫(huà)火龍果課件
- 小學(xué)數(shù)學(xué)教師入職面試培訓(xùn)
- 新產(chǎn)品評(píng)審管理辦法
- (參考)菲達(dá)公司國(guó)內(nèi)電除塵器業(yè)績(jī)表
- 游泳池水質(zhì)檢測(cè)記錄表
- 大學(xué)生職業(yè)生涯規(guī)劃與就業(yè)指導(dǎo)教案第5講:興趣探索
- 門店電表記錄表
- 七年級(jí)勞技 花卉種植 花卉用途 PPT學(xué)習(xí)教案
- 隧道換拱專項(xiàng)施工方案
- 國(guó)際金融托馬斯普格爾復(fù)習(xí)資料整理
- 基于單片機(jī)的報(bào)警器與旋轉(zhuǎn)燈設(shè)計(jì)(共21頁(yè))
- 中國(guó)農(nóng)業(yè)銀行房地產(chǎn)押品價(jià)值評(píng)估操作模板
- JJG596-2012《電子式交流電能表檢定規(guī)程》
評(píng)論
0/150
提交評(píng)論