




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、畢業(yè)設(shè)計(jì)(論文)基于VC+的圖像處理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)VC + + based Image Processing System Design and Implementation班級計(jì)/商061 學(xué)生姓名學(xué)號 640505025指導(dǎo)教師職稱講師導(dǎo)師單位職業(yè)技術(shù)學(xué)院信息系論文提交日期徐州工業(yè)職業(yè)技術(shù)學(xué)院畢業(yè)設(shè)計(jì)(論文)任務(wù)書課題名稱基于VC+的圖像處理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)課題性質(zhì)工程設(shè)計(jì)班 級 計(jì)/商061學(xué)生姓名學(xué) 號640505025指導(dǎo)教師導(dǎo)師職稱 講師 一選題意義及背景:圖像處理技術(shù)一直是困擾Visual C+初學(xué)者的一個(gè)難題,在Visual C+中,沒有一個(gè)完善的控件能夠顯示和處理各種格式的圖像
2、,有時(shí)用戶需要了解各種圖像的文件格式,這極大的增加了初學(xué)者的學(xué)習(xí)難度?;诖?,設(shè)計(jì)了一個(gè)圖像處理軟件,本課題屬于小型的圖像處理軟件,主要用于實(shí)現(xiàn)圖像的顯示與批量轉(zhuǎn)換操作。通過分析系統(tǒng)的工作過程,將其用Visual C+程序?qū)崿F(xiàn),將理論學(xué)習(xí)與實(shí)例相結(jié)合,來培養(yǎng)學(xué)生的綜合能力。二畢業(yè)設(shè)計(jì)(論文)主要內(nèi)容:主要工作:負(fù)責(zé)程序各個(gè)功能的整合、調(diào)試及運(yùn)行三計(jì)劃進(jìn)度:階段工作程序和要求完成時(shí)間前期準(zhǔn)備階段學(xué)習(xí)畢業(yè)設(shè)計(jì)管理規(guī)定并準(zhǔn)備與測試有關(guān)的資料中期指導(dǎo)檢查階段1.需求分析階段及建立軟件及硬件環(huán)境條件。分析設(shè)計(jì)任務(wù)書的要求和用戶需求,進(jìn)行可行性分析和需求分析,確定系統(tǒng)所需的模版,安裝建立設(shè)計(jì)所需軟硬件環(huán)境
3、;素材采集,處理2.在確定的模版上,對系統(tǒng)功能進(jìn)行分工,進(jìn)行相關(guān)程序設(shè)計(jì),根據(jù)用戶的使用反饋結(jié)果修正自己的設(shè)計(jì)方案,在解決了大部分的bug后,可以將系統(tǒng)進(jìn)行打包。3.進(jìn)行軟件的性能測試,4.編寫測試腳本,并對測試結(jié)果進(jìn)行分析 a.編寫測試腳本b.對測試結(jié)果進(jìn)行分析后期答辯總結(jié)階段1.編寫畢業(yè)論文a.學(xué)習(xí)書寫畢業(yè)論文規(guī)范b.查找與所要寫的論文有關(guān)資料c.根據(jù)論文書寫規(guī)范編寫論文d.給指導(dǎo)老師審查并修改2.交畢業(yè)設(shè)計(jì)3.準(zhǔn)備答辯四畢業(yè)設(shè)計(jì)(論文)結(jié)束應(yīng)提交的材料:1、測試計(jì)劃2、測試腳本3、測試報(bào)告4、畢業(yè)論文指導(dǎo)教師 教研室主任 年 月 日年 月 日論文真實(shí)性承諾及指導(dǎo)教師聲明學(xué)生論文真實(shí)性承諾
4、本人鄭重聲明:所提交的作品是本人在指導(dǎo)教師的指導(dǎo)下,獨(dú)立進(jìn)行研究工作所取得的成果,內(nèi)容真實(shí)可靠,不存在抄襲、造假等學(xué)術(shù)不端行為。除文中已經(jīng)注明引用的內(nèi)容外,本論文不含其他個(gè)人或集體已經(jīng)發(fā)表或撰寫過的研究成果。對本文的研究做出重要貢獻(xiàn)的個(gè)人和集體,均已在文中以明確方式標(biāo)明。如被發(fā)現(xiàn)論文中存在抄襲、造假等學(xué)術(shù)不端行為,本人愿承擔(dān)本聲明的法律責(zé)任和一切后果。畢業(yè)生簽名:日 期:指導(dǎo)教師關(guān)于學(xué)生論文真實(shí)性審核的聲明本人鄭重聲明:已經(jīng)對學(xué)生論文所涉及的內(nèi)容進(jìn)行嚴(yán)格審核,確定其內(nèi)容均由學(xué)生在本人指導(dǎo)下取得,對他人論文及成果的引用已經(jīng)明確注明,不存在抄襲等學(xué)術(shù)不端行為。指導(dǎo)教師簽名: 日 期:摘要本文對圖形
5、圖像處理系統(tǒng)的發(fā)展現(xiàn)狀和所采用的主要技術(shù)進(jìn)行了詳細(xì)分析,確定了相應(yīng)的結(jié)構(gòu)和主要功能,以及實(shí)際開發(fā)中所采取的技術(shù)。系統(tǒng)在Windows XP平臺(tái)下實(shí)現(xiàn),本課題是采用Visual C+作為編程工具,采用面向?qū)ο蟮某绦蛟O(shè)計(jì)技術(shù)實(shí)現(xiàn)一個(gè)圖形繪制和圖像處理的應(yīng)用軟件。主要工作分為三類,包括基本圖形繪制與編輯、簡單的圖像處理、圖像格式的轉(zhuǎn)換。圖形方面主要是設(shè)計(jì)圖形基類,以及繼承圖形基類的具體圖形類。通過對獨(dú)立功能的封裝,可以為今后需要的圖形圖像的應(yīng)用奠定基礎(chǔ)。系統(tǒng)的優(yōu)點(diǎn)有:充分體現(xiàn)了面向?qū)ο蟮脑O(shè)計(jì)思想,充分運(yùn)用了C+的特性。程序結(jié)構(gòu)清晰,可讀性好,程序中做了充分的注釋。 最后,對系統(tǒng)進(jìn)行測試表明,系統(tǒng)功能
6、達(dá)到了預(yù)期的要求,界面友好,操作簡便,運(yùn)行也較穩(wěn)定,是一個(gè)完成基本功能的圖形圖像系統(tǒng)。 總體上,本文介紹了系統(tǒng)開發(fā)設(shè)計(jì)的全過程和設(shè)計(jì)過程中部分代碼,對系統(tǒng)中采用的關(guān)鍵技術(shù)也作了一些必要的說明,對圖像變換的基本原理,圖像處理的基本原理和各種圖像格式做了詳細(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 technology,identify
7、 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 image processing
8、 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 function's enca
9、psulation, 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 transplantation. Fin
10、ally, 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 of designi
11、ng 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 transforms.目錄摘要IAb
12、stractII第一章圖像處理系統(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 開發(fā)及運(yùn)行環(huán)境31.5 技術(shù)準(zhǔn)備31.5.1 基本繪圖操作31.5.2 內(nèi)存畫布的設(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ì)12公共模塊設(shè)計(jì)141.6.3 主窗體設(shè)計(jì)14參考文獻(xiàn):18致謝19第一章 圖像處理系統(tǒng)1.1 概述 圖像處理技術(shù)一直是困擾Visual C+初學(xué)
13、者的一個(gè)難題,在Visual C+中,沒有一個(gè)完善的控件能夠顯示和處理各種格式的圖像,有時(shí)用戶需要了解各種圖像的文件格式,這極大地增加了初學(xué)者的學(xué)習(xí)難度?;诖?,設(shè)計(jì)一個(gè)圖像處理軟件。1.2 系統(tǒng)分析需求分析n 通過調(diào)查,要求系統(tǒng)具有以下功能。n 顯示BMP、JPEG、GIF等各種格式的圖像。n 實(shí)現(xiàn)BMP與JPEG、GIF圖像的批量轉(zhuǎn)換。n 實(shí)現(xiàn)對位圖的旋轉(zhuǎn)、反色、灰度化、線性變換等各種操作。n 實(shí)現(xiàn)手寫數(shù)字的識(shí)別。 可行性分析為了降低程序開發(fā)的難度,使用微軟公司的GDI+。GDI+又稱為GDIPlus,是微軟公司.NET構(gòu)架的一部分,它封裝了各種圖像的處理技術(shù)。通過使用GDI,用戶可以非常
14、方便地實(shí)現(xiàn)圖像的顯示與轉(zhuǎn)換。雖然GDI+屬于.NET框架的一部分,但是用戶可以在非.NET環(huán)境下使用GDI+,有關(guān)具體的使用方法,在以下部分進(jìn)行介紹。 1.3 總體設(shè)計(jì) 項(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)、圖像銳化處理、圖像反色處理、灰度化處理、線性變換5個(gè)部分。l 字符識(shí)別模塊該模塊主要包括
15、手寫數(shù)字識(shí)別。l 其他模塊該模塊主要包括設(shè)置菜單的固定顏色和隨機(jī)顏色兩個(gè)部分。l 幫助模塊該模塊主要包括軟件的版本、開發(fā)單位等信息。 系統(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)圖像銳化處理圖像反色處理灰度化處理線性變換手寫數(shù)字識(shí)別其他系統(tǒng)功能構(gòu)架圖如圖1.1所示圖1.1 圖像處理系統(tǒng)功能架構(gòu)圖1.4 系統(tǒng)設(shè)計(jì) 設(shè)計(jì)目標(biāo)本系統(tǒng)屬于小型的圖像處理軟件,主要用于實(shí)現(xiàn)圖像的顯示與批量轉(zhuǎn)換操作。具體設(shè)計(jì)要求如下。l 實(shí)現(xiàn)各種圖像格式的顯示。l 系
16、統(tǒng)采用良好的人機(jī)對話模式,界面設(shè)計(jì)美觀、友好。l 支持圖像的單一轉(zhuǎn)換與批量轉(zhuǎn)換。l 實(shí)現(xiàn)位圖的各種常規(guī)操作。例如圖像旋轉(zhuǎn)、灰度化處理、線性變換等。l 系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。 開發(fā)及運(yùn)行環(huán)境系統(tǒng)開發(fā)平臺(tái):Visual C+ 6.0 。運(yùn)行平臺(tái):Windows XP/Windows 2000/Windows 2003 。分辨率:最佳效果 1024*1280像素。1.5 技術(shù)準(zhǔn)備 基本繪圖操作繪圖操作通常是指在窗口的某個(gè)區(qū)域輸出位圖圖像。窗口通常關(guān)聯(lián)一個(gè)設(shè)備上下文CDC,所有的繪圖操作都是通過CDC來完成的。用戶可以通過調(diào)用窗口類的GetDC方法獲得一個(gè)CDC對象指針。CDC提供BitBlt、St
17、retchBlt等方法來輸出位圖,但是這些方法均需要借助另一個(gè)CDC對象來實(shí)現(xiàn)。如何設(shè)置源設(shè)備上下文,并調(diào)用BitBit方法輸出位圖。CDC*Pdc=GetDC( ); /獲取窗口設(shè)備的上下文CBitmap bk ; /定義位圖對象CDCmemdc; /定義設(shè)備上下文 memdc.CreateCompatibleDC(pDC); /創(chuàng)建一個(gè)兼容的設(shè)備上下文 bk.LoadBitmap(IDB_CHESSBOARD); /加載位圖對象memdc.SelectObject(&bk); /選中位圖pDC->BitBlt(0,600,600,&memdc,0,0,SRCCOPY)
18、;/調(diào)用BitBlt方法輸出位圖 內(nèi)存畫布的設(shè)計(jì)在繪制圖像時(shí),如果頻繁的進(jìn)行多次繪圖操作,會(huì)出現(xiàn)閃爍的情況。為了防止閃爍的出現(xiàn),可以設(shè)計(jì)一個(gè)臨時(shí)的畫布,稱之為內(nèi)存畫布,讓所有的繪圖操作均在內(nèi)存畫布上進(jìn)行,然后在內(nèi)存畫布對象失去作用域時(shí)將其輸出到目標(biāo)設(shè)備上下文中,這樣就阻止了閃爍情況的出現(xiàn),內(nèi)存畫布的設(shè)計(jì)代碼如下:m_ pbmp->CreateCompatibleBitmap(Pdc,rect.Width(),rect,Height() );m_poldbmp=SelectObject(m_bmp); /選中位圖對象m_Pdc=PdC; /設(shè)置成員變量m_Rect=rect; /設(shè)置成員變
19、量/將目標(biāo)區(qū)域繪制在內(nèi)存畫布上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); /選中之前選中的對象If(m_pbmp!=NULL) /判斷位圖對象是否為空delete m_pbmp; /釋放位圖對象DelectObject(this); /釋放設(shè)備上下文內(nèi)存畫布CMemDC只包含一個(gè)構(gòu)造函數(shù)和析構(gòu)函數(shù),其中,在構(gòu)造函數(shù)部分,將根據(jù)參數(shù)pDC創(chuàng)建一個(gè)兼容的設(shè)備上下文,并且將pDC的
20、內(nèi)容繪制在內(nèi)存畫布上;在析構(gòu)函數(shù)中,會(huì)將內(nèi)存畫布的內(nèi)容輸出到目標(biāo)設(shè)備的上下文中。 自定義全局函數(shù)在Visual C+中沒有提供直接的函數(shù)用于獲取文件的名稱(去除擴(kuò)展名)和獲取文件的擴(kuò)展名(去除文件名)。為此,定義了兩個(gè)全局函數(shù)來獲取文件的名稱和文件擴(kuò)展名。函數(shù)定義如下:CString ExtractFileName(CString&str)/獲取文件名稱intpos=str.ReverseFind(.)/反向查找“.”的位置return str.Left(pos); /從左方開始截取字符串,并返回截取的字符串 CString GetFileExtended Name (CString&
21、amp;strFile) /獲取文件擴(kuò)展名int pos=strFile.ReverseFind(.); /反向查找“.”的位置return strFile.Right(strFile.GetLength()-pos-1)菜單欄高度在為本系統(tǒng)設(shè)計(jì)自定義菜單時(shí),由于主界面對話框的寬度可以調(diào)整,導(dǎo)致菜單欄的高度會(huì)發(fā)生變化,如圖1.2所示。圖1.2 菜單欄高度從1.2中可以發(fā)現(xiàn),當(dāng)對話框的寬度變化時(shí),菜單欄的高度也會(huì)發(fā)生變化,這在繪制菜單的背景顏色時(shí)候會(huì)帶來困難,需要從user32.dll動(dòng)態(tài)鏈接庫中導(dǎo)出該函數(shù)。流程圖如下:hModule址void*pVoid=(void*)GetProcAddre
22、ss(hModule,"GetMenuBarInfo");pVoid數(shù)(FunGetMenuInfo)pVoid)(hwnd,idObject,:FreeLibrary(hModule);資源:FreeLibrary(hModule);資源NYNYHMODULEhModule=:LoadLibrary("user32.dll"); 自定義菜單為了使程序界面更加美觀,在本系統(tǒng)中自定義了一個(gè)菜單,實(shí)現(xiàn)菜單的特殊效果顯示,如圖1.3所示:圖1.3 自定義菜單在Visual C+中,實(shí)現(xiàn)自定義菜單是比較容易的,MFC類庫提供了CMenu類用于設(shè)計(jì)菜單,用戶只要從
23、該類派生一個(gè)子類,然后改寫MeasureItem方法,設(shè)置菜單項(xiàng)的高度和寬度;改寫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+i<countinti=0intcount=pMenu->GetMenuItemCount();FirstFindNNNYYY(7) 向CCustomMenu類中添加AttachMe
26、nu方法,附加菜單句柄到CCustomMenu類對象上BOOL CCustomMenu:AttatchMenu(HMENU hMenu)Attach(hMenu); /附加菜單句柄到菜單對象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)對象。(9
27、)向CCustomMenu類中添加GetTopMenuWidth方法,獲取頂層菜單的高度。流程圖如下:intCount=GetMenuItemCount()i<Count:GetMenuItemRect(AfxGetMainWnd()->m_hWnd,m_hMenu,i,rc);i+returnwidth; NYinti=0(10)向CCustomMenu類中添加GetClientMenuRgn方法,獲取菜單欄中的非菜單項(xiàng)區(qū)域。流程圖如下:/獲取菜單欄中非菜單項(xiàng)區(qū)域HRGN CCustomMenu:GetClientMenuRgn()MENUBARINFO MenuInfo; /定
28、義菜單項(xiàng)信息對象memset(&MenuInfo,0,sizeof(MENUBARINFO); /初始化菜單項(xiàng)信息MenuInfo.cbSize = sizeof(MENUBARINFO);/設(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; /定義
29、一個(gè)區(qū)域指針,記錄菜單項(xiàng)區(qū)域HRGN *pRgn = new HRGNMenuCount;/定義一個(gè)選區(qū)指針,記錄菜單項(xiàng)選區(qū)CRect winRC; /定義一個(gè)區(qū)域?qū)ο驛fxGetMainWnd()->GetWindowRect(winRC); /獲取主窗口區(qū)域HRGN retRgn = CreateRectRgn(0,0,0,0);HRGNMenuClientRgn = CreateRectRgn(0,0,0,0);for (int j=0; j<MenuCount; j+) /組合菜單項(xiàng)的區(qū)域/去除菜單欄中菜單項(xiàng)的區(qū)域,以獲取非菜單項(xiàng)區(qū)域CombineRgn(retRgn,Me
30、nuRgn,MenuClientRgn,RGN_DIFF);for ( j=0; j<MenuCount; j+)i<MenuCounti<MenuCountinWnd()->m_hWi+HRGNMenuRgn=CreateRectRgn(rc.left,rc.top,rc.right,rc.bottom);Rgn(rc.left,rc.top,rintj=0CombineRgn(MenuClientRgn,MenuClientRgn,pRgnj,RGN_OR);CombineRgn(MenuClientRgn,MenuClientRgn,,以獲取非菜單項(xiàng)區(qū)域j+Sid
31、e by sidej<MenuCountNYNYinti=0MENUBARINFOMenuInfo;(11)向CCustomMenu類中添加SetMenuItemText方法,繪制菜單項(xiàng)文本。void CCustomMenu:SetMenuItemText(CDC *pDC, LPSTR strMenuText, CRect Rect)Rect.DeflateRect(20,0);pDC->DrawText(strMenuText,Rect,DT_SINGLELINE|DT_VCENTER|DT_LEFT);(12)向CCustomMenu類中添加DrawTopMenuBk方法,繪
32、制頂層菜單的背景顏色。(13)向CCustomMenu類中添加DrawSepMenu方法,繪制菜單分隔條。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 (S
33、tate)pDC->Rectangle(Rect); Rect.DeflateRect(1,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 = (fl
34、oat)(r2-r1) / (float)(Rect.Height();g3 = (float)(g2-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; i<Rect.bottom; i+)r = r1+(int)r3*(i-Rect.top);g = g1+(int)g3*(i-Rect.top);b = b1+ (int)b3*(i-Rect.top);CPen pe
35、n (PS_SOLID,1,RGB(r,g,b);pOldPen = pDC->SelectObject(&pen);pDC->MoveTo(Rect.left,i);pDC->LineTo(Rect.right,i);pDC->SelectObject(pOldPen);elsepDC->FillSolidRect(Rect,RGB(0x000000F9, 0x000000F8, 0x000000F7);(15)改寫菜單類的MeasureItem虛方法,根據(jù)菜單項(xiàng)的文本設(shè)置菜單項(xiàng)的寬度。lpStruct->itemWidth = size.cx+2
36、5; /設(shè)置菜單項(xiàng)的寬度(16)改寫菜單類的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 MenuID = (CMenuItem*)(lpStruct->itemData)->m_Menu
37、Type; /獲取菜單類型CRect Rect = lpStruct->rcItem; /獲取菜單項(xiàng)區(qū)域pDC->SetBkMode(TRANSPARENT); /設(shè)置透明的背景模式switch(MenuID) /判斷菜單類型 自定義工具欄在本系統(tǒng)中為了使程序主界面更加美觀,自定義了一個(gè)工具欄,效果如圖1.4所示。圖1.4 自定義工具欄自定義工具欄最簡單的方法是處理NM_CUSTOMDRAW消息,在其消息處理函數(shù)中根據(jù)工具欄按鈕的不同狀態(tài)繪制不同效果的工具欄按鈕。具體設(shè)計(jì)步驟如下。l 從CToolBar類派生一個(gè)子類,本例為CCustomBar。l 向CCustomBar類中添加變
38、量成員。l 在CCustomBar類的消息映射部分添加ON_NOTIFY_REFLECT映射宏,用于處理NM_CUSTOMRAW消息。l 向CCustomBar類中添加OnOwnerDraw方法,表示NM_CUSTOMDRAW消息的處理方法,用于繪制工具欄按鈕。l 向CCustomBar類中添加DrawButton方法,根據(jù)工具欄按鈕的不同狀態(tài),繪制不同效果的工具欄按鈕。1.6主要功能模塊的設(shè)計(jì) 系統(tǒng)架構(gòu)設(shè)計(jì)為了使讀者能夠?qū)ο到y(tǒng)文件有更清晰的認(rèn)識(shí)并了解其使用方法,在此設(shè)計(jì)了文件架構(gòu)圖,如圖1.5所示。CMainFrame(系統(tǒng)主界面)像 圖像顯示 圖像轉(zhuǎn)換 圖像處理 字符識(shí)別 幫助圖1.5 主
39、文件架構(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圖像旋轉(zhuǎn)CBmpSharp圖像銳化處理CReverseColor圖像反色處理圖像處理CGrayHandle
40、灰度化處理CLineArity線性變換圖1.8圖像處理文件架構(gòu)圖字符識(shí)別 CRecNumber 幫助 CAboutDlg 手寫數(shù)字識(shí)別 關(guān)于圖1.9 字符識(shí)別文件架構(gòu)圖 圖1.10 幫助文件架構(gòu)圖公共模塊設(shè)計(jì)在設(shè)計(jì)圖像效果顯示時(shí),有些圖像可能比較大,在窗口中不能完全顯示出來。為了讓用戶能夠?yàn)g覽圖像,可以單獨(dú)設(shè)計(jì)了一個(gè)滾動(dòng)窗口,當(dāng)控件設(shè)置在窗口中,用戶可以通過滾動(dòng)條來瀏覽控件的各個(gè)部分。滾動(dòng)窗口的設(shè)計(jì)步驟如下。(1)創(chuàng)建一個(gè)對話框,類名為“CImageContainer”,設(shè)置對話框的屬性。 (2)處理對話框的WM_HSCROLL消息,設(shè)置窗口的滾動(dòng)方向和范圍。代碼如下:(3)處理對話框的VSC
41、ROLL消息,設(shè)置窗口的滾動(dòng)方向和范圍。代碼如下:case SB_PAGELEFT: /在滾動(dòng)塊的左方空白滾動(dòng)區(qū)域單擊,增量為6case SB_PAGERIGHT: /在滾動(dòng)塊的右方空白滾動(dòng)區(qū)域單擊,增量為6 (4)處理對話框的WM_MOUSEWHEEL消息,響應(yīng)鼠標(biāo)的滾輪事件。代碼如下:GetScrollInfo(SB_VERT,&vinfo); /獲取滾動(dòng)條信息int min,max,thumbwidth;min = vinfo.nMin;max = vinfo.nMax;thumbwidth = vinfo.nPage;int pos = GetScrollPos(SB_VERT
42、); /獲取垂直滾動(dòng)條位置SetScrollPos(SB_VERT,pos-6); /設(shè)置垂直滾動(dòng)條的位置ScrollWindow(0,6); /滾動(dòng)窗口 主窗體設(shè)計(jì)1. 實(shí)現(xiàn)目標(biāo)圖像處理系統(tǒng)主窗體主要由菜單、工具欄、客戶區(qū)域和狀態(tài)欄4部分組成,主要功能是對圖像處理系統(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ū)的資源視圖窗口中修改菜單資源ID為“IDR_MAINMENU”,設(shè)置菜單項(xiàng)的效果如圖1.12所示。圖1.12 菜單資源設(shè)
43、計(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)換為位圖”, ID_MENUJPEGTOBMP MENUITEM “位圖轉(zhuǎn)換為GIF”, ID_MENUBMPTOGIF ME
44、NUITEM “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)換”, BEGIN MENUITEM “手寫數(shù)字識(shí)別”, 65535 ENDPOPUP“圖像轉(zhuǎn)換”, BEGIN
45、 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=newCSingleDocTemplate(IDR_MAINMENU,RUNTIME_CLASS(CImage
46、HandleDOC),RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CImageHandleView);AddDocTemplate(pDocTemplate);(2)在主窗口(框架類)的頭文件中引用自定義菜單和工具欄類的頭文件。代碼如下:#include“CustomMenu.h”#include“CustomBar.h”(3)向框架類的頭文件中添加成員變量。代碼如下:CStausBar m_wndStatusBar;CCustimBar m_wndToolBar;CImageList m_ImageList;CCustomMenu m_Menu;(4)在創(chuàng)
47、建框架窗口時(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
48、(6,"位圖轉(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)|
49、!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/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
50、(pDoc);:SetWindowText(GetParent()->m_hWnd,"圖像處理軟件");CBitmap bmp;/定義位圖對象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),再到對思路逐漸的清晰,整個(gè)制作過程難以用語言來表達(dá)。歷經(jīng)了長時(shí)間的奮戰(zhàn),緊張而又充實(shí)的畢業(yè)設(shè)計(jì)終于落下了帷幕?;叵脒@段日子的經(jīng)歷和感受,我感慨萬千,在這次畢業(yè)設(shè)計(jì)的過程中,我擁有了無數(shù)難忘的回憶和收獲。 畢業(yè)設(shè)計(jì)定下來的時(shí)候,我當(dāng)時(shí)便立刻著手資料的收集工作中,當(dāng)時(shí)面對浩瀚的書海真是有些茫然,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 培訓(xùn)效果對員工團(tuán)隊(duì)協(xié)作能力的影響研究考核試卷
- 注塑模具合成材料應(yīng)用考核試卷
- 光纖照明與人眼視覺感知考核試卷
- 太陽能光伏發(fā)電系統(tǒng)效率提升途徑分析考核試卷
- 節(jié)能減排措施與成果考核試卷
- 廢棄物處理設(shè)施選址與環(huán)境影響評價(jià)研究考核試卷
- 冀教版七年級語文上冊《揀麥穗》導(dǎo)學(xué)案
- 計(jì)劃生育心得體會(huì)范文四篇
- 信訪穩(wěn)定工作匯報(bào)
- 基建安全管理工作交叉互查匯報(bào)材料
- Unit 2 Home Sweet Home 第4課時(shí)(Section B 1a-1e) 2025-2026學(xué)年人教版英語八年級下冊
- 社會(huì)工作職業(yè)培訓(xùn)課件
- 廣東省東莞市2022-2023學(xué)年七年級下冊生物期末試卷(含答案)
- 工程審計(jì)報(bào)告模板
- 660MW超超臨界火電機(jī)組深度調(diào)峰經(jīng)濟(jì)性評估與對策
- 2025年春江蘇開放大學(xué)數(shù)字媒體藝術(shù)概論060456第12345次形成作業(yè)+期末綜合大作業(yè)答案
- 2025至2030中國大健康行業(yè)市場發(fā)展現(xiàn)狀分析及發(fā)展趨勢與投資戰(zhàn)略規(guī)劃報(bào)告
- 2025至2030中國AMOLED顯示器行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報(bào)告
- 村文書考試題及答案岷縣
- CJ/T 43-2005水處理用濾料
評論
0/150
提交評論