畢業(yè)設計基于VC++的圖像處理系統(tǒng)_第1頁
畢業(yè)設計基于VC++的圖像處理系統(tǒng)_第2頁
畢業(yè)設計基于VC++的圖像處理系統(tǒng)_第3頁
畢業(yè)設計基于VC++的圖像處理系統(tǒng)_第4頁
畢業(yè)設計基于VC++的圖像處理系統(tǒng)_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、畢業(yè)設計(論文)基于VC+的圖像處理系統(tǒng)設計與實現(xiàn)VC + + based Image Processing System Design and Implementation班級計/商061 學生姓名學號 640505025指導教師職稱講師導師單位職業(yè)技術學院信息系論文提交日期徐州工業(yè)職業(yè)技術學院畢業(yè)設計(論文)任務書課題名稱基于VC+的圖像處理系統(tǒng)設計與實現(xiàn)課題性質工程設計班 級 計/商061學生姓名學 號640505025指導教師導師職稱 講師 一選題意義及背景:圖像處理技術一直是困擾Visual C+初學者的一個難題,在Visual C+中,沒有一個完善的控件能夠顯示和處理各種格式的圖像

2、,有時用戶需要了解各種圖像的文件格式,這極大的增加了初學者的學習難度?;诖?,設計了一個圖像處理軟件,本課題屬于小型的圖像處理軟件,主要用于實現(xiàn)圖像的顯示與批量轉換操作。通過分析系統(tǒng)的工作過程,將其用Visual C+程序實現(xiàn),將理論學習與實例相結合,來培養(yǎng)學生的綜合能力。二畢業(yè)設計(論文)主要內容:主要工作:負責程序各個功能的整合、調試及運行三計劃進度:階段工作程序和要求完成時間前期準備階段學習畢業(yè)設計管理規(guī)定并準備與測試有關的資料中期指導檢查階段1.需求分析階段及建立軟件及硬件環(huán)境條件。分析設計任務書的要求和用戶需求,進行可行性分析和需求分析,確定系統(tǒng)所需的模版,安裝建立設計所需軟硬件環(huán)境

3、;素材采集,處理2.在確定的模版上,對系統(tǒng)功能進行分工,進行相關程序設計,根據(jù)用戶的使用反饋結果修正自己的設計方案,在解決了大部分的bug后,可以將系統(tǒng)進行打包。3.進行軟件的性能測試,4.編寫測試腳本,并對測試結果進行分析 a.編寫測試腳本b.對測試結果進行分析后期答辯總結階段1.編寫畢業(yè)論文a.學習書寫畢業(yè)論文規(guī)范b.查找與所要寫的論文有關資料c.根據(jù)論文書寫規(guī)范編寫論文d.給指導老師審查并修改2.交畢業(yè)設計3.準備答辯四畢業(yè)設計(論文)結束應提交的材料:1、測試計劃2、測試腳本3、測試報告4、畢業(yè)論文指導教師 教研室主任 年 月 日年 月 日論文真實性承諾及指導教師聲明學生論文真實性承諾

4、本人鄭重聲明:所提交的作品是本人在指導教師的指導下,獨立進行研究工作所取得的成果,內容真實可靠,不存在抄襲、造假等學術不端行為。除文中已經(jīng)注明引用的內容外,本論文不含其他個人或集體已經(jīng)發(fā)表或撰寫過的研究成果。對本文的研究做出重要貢獻的個人和集體,均已在文中以明確方式標明。如被發(fā)現(xiàn)論文中存在抄襲、造假等學術不端行為,本人愿承擔本聲明的法律責任和一切后果。畢業(yè)生簽名:日 期:指導教師關于學生論文真實性審核的聲明本人鄭重聲明:已經(jīng)對學生論文所涉及的內容進行嚴格審核,確定其內容均由學生在本人指導下取得,對他人論文及成果的引用已經(jīng)明確注明,不存在抄襲等學術不端行為。指導教師簽名: 日 期:摘要本文對圖形

5、圖像處理系統(tǒng)的發(fā)展現(xiàn)狀和所采用的主要技術進行了詳細分析,確定了相應的結構和主要功能,以及實際開發(fā)中所采取的技術。系統(tǒng)在Windows XP平臺下實現(xiàn),本課題是采用Visual C+作為編程工具,采用面向對象的程序設計技術實現(xiàn)一個圖形繪制和圖像處理的應用軟件。主要工作分為三類,包括基本圖形繪制與編輯、簡單的圖像處理、圖像格式的轉換。圖形方面主要是設計圖形基類,以及繼承圖形基類的具體圖形類。通過對獨立功能的封裝,可以為今后需要的圖形圖像的應用奠定基礎。系統(tǒng)的優(yōu)點有:充分體現(xiàn)了面向對象的設計思想,充分運用了C+的特性。程序結構清晰,可讀性好,程序中做了充分的注釋。 最后,對系統(tǒng)進行測試表明,系統(tǒng)功能

6、達到了預期的要求,界面友好,操作簡便,運行也較穩(wěn)定,是一個完成基本功能的圖形圖像系統(tǒng)。 總體上,本文介紹了系統(tǒng)開發(fā)設計的全過程和設計過程中部分代碼,對系統(tǒng)中采用的關鍵技術也作了一些必要的說明,對圖像變換的基本原理,圖像處理的基本原理和各種圖像格式做了詳細的闡述。關鍵詞:圖像處理系統(tǒng),圖像顯示,圖片格式轉換。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 總體設計11.3.1 項目規(guī)劃11.3.2 系統(tǒng)功能架構圖21.4 系統(tǒng)設計31.4.1 設計目標31.4.2 開發(fā)及運行環(huán)境31.5 技術準備31.5.1 基本繪圖操作31.5.2 內存畫布的設計31.5.3 自定義全局函數(shù)41.5.4 自定義菜單51.5.5 自定義工具欄111.6主要功能模塊的設計121.6.1 系統(tǒng)架構設計12公共模塊設計141.6.3 主窗體設計14參考文獻:18致謝19第一章 圖像處理系統(tǒng)1.1 概述 圖像處理技術一直是困擾Visual C+初學

13、者的一個難題,在Visual C+中,沒有一個完善的控件能夠顯示和處理各種格式的圖像,有時用戶需要了解各種圖像的文件格式,這極大地增加了初學者的學習難度?;诖耍O計一個圖像處理軟件。1.2 系統(tǒng)分析需求分析n 通過調查,要求系統(tǒng)具有以下功能。n 顯示BMP、JPEG、GIF等各種格式的圖像。n 實現(xiàn)BMP與JPEG、GIF圖像的批量轉換。n 實現(xiàn)對位圖的旋轉、反色、灰度化、線性變換等各種操作。n 實現(xiàn)手寫數(shù)字的識別。 可行性分析為了降低程序開發(fā)的難度,使用微軟公司的GDI+。GDI+又稱為GDIPlus,是微軟公司.NET構架的一部分,它封裝了各種圖像的處理技術。通過使用GDI,用戶可以非常

14、方便地實現(xiàn)圖像的顯示與轉換。雖然GDI+屬于.NET框架的一部分,但是用戶可以在非.NET環(huán)境下使用GDI+,有關具體的使用方法,在以下部分進行介紹。 1.3 總體設計 項目規(guī)劃圖像處理系統(tǒng)是一個典型的圖像處理軟件,它由圖像顯示、圖像轉換、圖像處理、字符識別、其他和幫助等模塊組成。l 圖像顯示模塊該模塊主要包括顯示位圖、顯示JPEG、顯示GIF 3個部分。l 圖像轉換模式該模塊主要包括位圖轉換為JPEG、JPEG轉換為位圖、位圖轉換為GIF、GIF轉換為位圖4個部分。l 圖像處理模塊該模塊主要包括圖像旋轉、圖像銳化處理、圖像反色處理、灰度化處理、線性變換5個部分。l 字符識別模塊該模塊主要包括

15、手寫數(shù)字識別。l 其他模塊該模塊主要包括設置菜單的固定顏色和隨機顏色兩個部分。l 幫助模塊該模塊主要包括軟件的版本、開發(fā)單位等信息。 系統(tǒng)功能架構圖圖像處理系統(tǒng)圖像顯示模塊圖像轉換模塊圖像處理模塊字符識別模塊幫助固定顏色隨機顏色關于顯示J PEG顯示G I F顯示位圖位圖轉換JPEGJPEG轉換位圖位圖轉換GIFGIF轉換位圖圖像旋轉圖像銳化處理圖像反色處理灰度化處理線性變換手寫數(shù)字識別其他系統(tǒng)功能構架圖如圖1.1所示圖1.1 圖像處理系統(tǒng)功能架構圖1.4 系統(tǒng)設計 設計目標本系統(tǒng)屬于小型的圖像處理軟件,主要用于實現(xiàn)圖像的顯示與批量轉換操作。具體設計要求如下。l 實現(xiàn)各種圖像格式的顯示。l 系

16、統(tǒng)采用良好的人機對話模式,界面設計美觀、友好。l 支持圖像的單一轉換與批量轉換。l 實現(xiàn)位圖的各種常規(guī)操作。例如圖像旋轉、灰度化處理、線性變換等。l 系統(tǒng)運行穩(wěn)定、安全可靠。 開發(fā)及運行環(huán)境系統(tǒng)開發(fā)平臺:Visual C+ 6.0 。運行平臺:Windows XP/Windows 2000/Windows 2003 。分辨率:最佳效果 1024*1280像素。1.5 技術準備 基本繪圖操作繪圖操作通常是指在窗口的某個區(qū)域輸出位圖圖像。窗口通常關聯(lián)一個設備上下文CDC,所有的繪圖操作都是通過CDC來完成的。用戶可以通過調用窗口類的GetDC方法獲得一個CDC對象指針。CDC提供BitBlt、St

17、retchBlt等方法來輸出位圖,但是這些方法均需要借助另一個CDC對象來實現(xiàn)。如何設置源設備上下文,并調用BitBit方法輸出位圖。CDC*Pdc=GetDC( ); /獲取窗口設備的上下文CBitmap bk ; /定義位圖對象CDCmemdc; /定義設備上下文 memdc.CreateCompatibleDC(pDC); /創(chuàng)建一個兼容的設備上下文 bk.LoadBitmap(IDB_CHESSBOARD); /加載位圖對象memdc.SelectObject(&bk); /選中位圖pDC->BitBlt(0,600,600,&memdc,0,0,SRCCOPY)

18、;/調用BitBlt方法輸出位圖 內存畫布的設計在繪制圖像時,如果頻繁的進行多次繪圖操作,會出現(xiàn)閃爍的情況。為了防止閃爍的出現(xiàn),可以設計一個臨時的畫布,稱之為內存畫布,讓所有的繪圖操作均在內存畫布上進行,然后在內存畫布對象失去作用域時將其輸出到目標設備上下文中,這樣就阻止了閃爍情況的出現(xiàn),內存畫布的設計代碼如下:m_ pbmp->CreateCompatibleBitmap(Pdc,rect.Width(),rect,Height() );m_poldbmp=SelectObject(m_bmp); /選中位圖對象m_Pdc=PdC; /設置成員變量m_Rect=rect; /設置成員變

19、量/將目標區(qū)域繪制在內存畫布上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); /釋放設備上下文內存畫布CMemDC只包含一個構造函數(shù)和析構函數(shù),其中,在構造函數(shù)部分,將根據(jù)參數(shù)pDC創(chuàng)建一個兼容的設備上下文,并且將pDC的

20、內容繪制在內存畫布上;在析構函數(shù)中,會將內存畫布的內容輸出到目標設備的上下文中。 自定義全局函數(shù)在Visual C+中沒有提供直接的函數(shù)用于獲取文件的名稱(去除擴展名)和獲取文件的擴展名(去除文件名)。為此,定義了兩個全局函數(shù)來獲取文件的名稱和文件擴展名。函數(shù)定義如下:CString ExtractFileName(CString&str)/獲取文件名稱intpos=str.ReverseFind(.)/反向查找“.”的位置return str.Left(pos); /從左方開始截取字符串,并返回截取的字符串 CString GetFileExtended Name (CString&

21、amp;strFile) /獲取文件擴展名int pos=strFile.ReverseFind(.); /反向查找“.”的位置return strFile.Right(strFile.GetLength()-pos-1)菜單欄高度在為本系統(tǒng)設計自定義菜單時,由于主界面對話框的寬度可以調整,導致菜單欄的高度會發(fā)生變化,如圖1.2所示。圖1.2 菜單欄高度從1.2中可以發(fā)現(xiàn),當對話框的寬度變化時,菜單欄的高度也會發(fā)生變化,這在繪制菜單的背景顏色時候會帶來困難,需要從user32.dll動態(tài)鏈接庫中導出該函數(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)中自定義了一個菜單,實現(xiàn)菜單的特殊效果顯示,如圖1.3所示:圖1.3 自定義菜單在Visual C+中,實現(xiàn)自定義菜單是比較容易的,MFC類庫提供了CMenu類用于設計菜單,用戶只要從

23、該類派生一個子類,然后改寫MeasureItem方法,設置菜單項的高度和寬度;改寫DrawItem方法,根據(jù)菜單項的不同狀態(tài),繪制不同效果的菜單項就可以了。具體設計如下:(1) 從CMenu類派生一個子類CCustomMenu。(2) 定義一個菜單項結構CMenuItem,記錄菜單項的信息。代碼如下: /定義一個結構,記錄菜單項的詳細信息Struct CMenuItem CString m_Menutext; /菜單項的文本 UINTm_ImageIndex; /菜單項圖像索引Int m_MenuType ; / 菜單項的類型 -2:頂層菜單,-1:彈出式菜單,0:分隔條,其他:普通菜單(3)

24、 向CCustomMenu類中添加成員變量。(4) 在CCustomMenu類的構造函數(shù)中初始化成員變量。CCustomMenu:CCustomMenu()m_ItemCount = 0; /初始化菜單項數(shù)量m_Index = 0; /初始化整型變量m_MenuList = NULL; /初始化菜單列表m_BkColor = RGB(204,199,186); /初始化背景顏色m_SelTopColor = RGB(193, 210, 238);/初始化頂層菜單顏色 m_RandColor = FALSE; /是否采用隨機顏色(5) 在CCustomMenu類的析構函數(shù)中釋放成員變量占據(jù)的堆空

25、間。CCustomMenu:CCustomMenu()if (m_ItemCount > 0) /如果菜單項>0,則釋放菜單列表delete m_MenuList;(6) 向CCustomMenu類中添加GetAllItemCount方法,獲取菜單項的數(shù)量,當前流程圖如下: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); /獲取菜單項的數(shù)量if (m_ItemCount > 0) /判斷菜單項數(shù)量是否>0m_MenuList = new CMenuItemm_ItemCount; /創(chuàng)建菜單列表return TRUE;(8)向CCustomMenu類中添加SetMenuItemInfo方法,將每個菜單項關聯(lián)一個CMenuItem結構對象。(9

27、)向CCustomMenu類中添加GetTopMenuWidth方法,獲取頂層菜單的高度。流程圖如下:intCount=GetMenuItemCount()i<Count:GetMenuItemRect(AfxGetMainWnd()->m_hWnd,m_hMenu,i,rc);i+returnwidth; NYinti=0(10)向CCustomMenu類中添加GetClientMenuRgn方法,獲取菜單欄中的非菜單項區(qū)域。流程圖如下:/獲取菜單欄中非菜單項區(qū)域HRGN CCustomMenu:GetClientMenuRgn()MENUBARINFO MenuInfo; /定

28、義菜單項信息對象memset(&MenuInfo,0,sizeof(MENUBARINFO); /初始化菜單項信息MenuInfo.cbSize = sizeof(MENUBARINFO);/設置菜單項信息結構的大小GetMenuBarInfo(AfxGetMainWnd()->m_hWnd,OBJID_MENU,0,&MenuInfo);CRect rc = MenuInfo.rcBar; /獲取菜單欄的區(qū)域int MenuCount = GetMenuItemCount(); /獲取頂層菜單的數(shù)量CRect *pRC = new CRectMenuCount; /定義

29、一個區(qū)域指針,記錄菜單項區(qū)域HRGN *pRgn = new HRGNMenuCount;/定義一個選區(qū)指針,記錄菜單項選區(qū)CRect winRC; /定義一個區(qū)域對象AfxGetMainWnd()->GetWindowRect(winRC); /獲取主窗口區(qū)域HRGN retRgn = CreateRectRgn(0,0,0,0);HRGNMenuClientRgn = CreateRectRgn(0,0,0,0);for (int j=0; j<MenuCount; j+) /組合菜單項的區(qū)域/去除菜單欄中菜單項的區(qū)域,以獲取非菜單項區(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,,以獲取非菜單項區(qū)域j+Sid

31、e by sidej<MenuCountNYNYinti=0MENUBARINFOMenuInfo;(11)向CCustomMenu類中添加SetMenuItemText方法,繪制菜單項文本。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方法,繪制菜單項的背景顏色。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; /讀取漸變起點的顏色值r1 = GetRValue(SrcColor);g1 = GetGValue(SrcColor);b1 = GetBValue(SrcColor);int r2,g2,b2;/讀取漸變終點的顏色值r2 = GetRValue(DesColor);g2 = GetGValue(DesColor);b2 = GetBValue(DesColor);float r3,g3,b3;/菜單區(qū)域水平方向每個點RGB值應該變化的度(范圍)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ū)域水平方向每個點的顏色值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ù)菜單項的文本設置菜單項的寬度。lpStruct->itemWidth = size.cx+2

36、5; /設置菜單項的寬度(16)改寫菜單類的DrawItem虛方法,根據(jù)菜單項的不同狀態(tài),繪制不同效果的菜單。unsigned int m_state = lpStruct->itemState;/獲取菜單項的狀態(tài)CDC* pDC = CDC:FromHandle(lpStruct->hDC); /獲取菜單設備上下文CString str = (CMenuItem*)(lpStruct->itemData)->m_MenuText; /獲取菜單各項的文本int MenuID = (CMenuItem*)(lpStruct->itemData)->m_Menu

37、Type; /獲取菜單類型CRect Rect = lpStruct->rcItem; /獲取菜單項區(qū)域pDC->SetBkMode(TRANSPARENT); /設置透明的背景模式switch(MenuID) /判斷菜單類型 自定義工具欄在本系統(tǒng)中為了使程序主界面更加美觀,自定義了一個工具欄,效果如圖1.4所示。圖1.4 自定義工具欄自定義工具欄最簡單的方法是處理NM_CUSTOMDRAW消息,在其消息處理函數(shù)中根據(jù)工具欄按鈕的不同狀態(tài)繪制不同效果的工具欄按鈕。具體設計步驟如下。l 從CToolBar類派生一個子類,本例為CCustomBar。l 向CCustomBar類中添加變

38、量成員。l 在CCustomBar類的消息映射部分添加ON_NOTIFY_REFLECT映射宏,用于處理NM_CUSTOMRAW消息。l 向CCustomBar類中添加OnOwnerDraw方法,表示NM_CUSTOMDRAW消息的處理方法,用于繪制工具欄按鈕。l 向CCustomBar類中添加DrawButton方法,根據(jù)工具欄按鈕的不同狀態(tài),繪制不同效果的工具欄按鈕。1.6主要功能模塊的設計 系統(tǒng)架構設計為了使讀者能夠對系統(tǒng)文件有更清晰的認識并了解其使用方法,在此設計了文件架構圖,如圖1.5所示。CMainFrame(系統(tǒng)主界面)像 圖像顯示 圖像轉換 圖像處理 字符識別 幫助圖1.5 主

39、文件架構圖圖像顯示文件架構圖和圖像轉換文件架構如圖1.6和圖1.7所示。CShowImage顯示位圖CShowJPEG顯示JPEGCShowGIF顯示GIF圖像顯示圖1.6 圖像顯示文件架構圖CBmpToJpeg位圖轉換為JPEGCJpegToBmpJPEG轉換為位圖CBmpToGif位圖轉換為GIF圖像轉換CGifToBmpGIF轉換為位圖圖1.7 圖像轉換文件架構圖圖像處理文件架構圖和字符識別文件架構圖如圖1.8和1.9所示。幫助文件架構圖如圖1.10所示。CRotationImage圖像旋轉CBmpSharp圖像銳化處理CReverseColor圖像反色處理圖像處理CGrayHandle

40、灰度化處理CLineArity線性變換圖1.8圖像處理文件架構圖字符識別 CRecNumber 幫助 CAboutDlg 手寫數(shù)字識別 關于圖1.9 字符識別文件架構圖 圖1.10 幫助文件架構圖公共模塊設計在設計圖像效果顯示時,有些圖像可能比較大,在窗口中不能完全顯示出來。為了讓用戶能夠瀏覽圖像,可以單獨設計了一個滾動窗口,當控件設置在窗口中,用戶可以通過滾動條來瀏覽控件的各個部分。滾動窗口的設計步驟如下。(1)創(chuàng)建一個對話框,類名為“CImageContainer”,設置對話框的屬性。 (2)處理對話框的WM_HSCROLL消息,設置窗口的滾動方向和范圍。代碼如下:(3)處理對話框的VSC

41、ROLL消息,設置窗口的滾動方向和范圍。代碼如下:case SB_PAGELEFT: /在滾動塊的左方空白滾動區(qū)域單擊,增量為6case SB_PAGERIGHT: /在滾動塊的右方空白滾動區(qū)域單擊,增量為6 (4)處理對話框的WM_MOUSEWHEEL消息,響應鼠標的滾輪事件。代碼如下:GetScrollInfo(SB_VERT,&vinfo); /獲取滾動條信息int min,max,thumbwidth;min = vinfo.nMin;max = vinfo.nMax;thumbwidth = vinfo.nPage;int pos = GetScrollPos(SB_VERT

42、); /獲取垂直滾動條位置SetScrollPos(SB_VERT,pos-6); /設置垂直滾動條的位置ScrollWindow(0,6); /滾動窗口 主窗體設計1. 實現(xiàn)目標圖像處理系統(tǒng)主窗體主要由菜單、工具欄、客戶區(qū)域和狀態(tài)欄4部分組成,主要功能是對圖像處理系統(tǒng)的各個模塊進行調整。圖像處理系統(tǒng)主窗體的運行效果如圖1.11所示。1.11圖像處理系統(tǒng)主窗體的運行效果2. 設計步驟(1)創(chuàng)建一個單文檔/視圖結構的應用程序,工程名稱為“ImageHandle”。(2)在工作區(qū)的資源視圖窗口中修改菜單資源ID為“IDR_MAINMENU”,設置菜單項的效果如圖1.12所示。圖1.12 菜單資源設

43、計菜單資源文件代碼如下:IDR_MAINMENU MENU DISCARDABLEBEGIN POPUP“圖像顯示” BEGIN MENUITEM “顯示位圖”, ID_MENUSHOWBMP MENUITEM“顯示JPEG”, ID_MENUSHOWJPG MENUITEM “顯示GIF”, ID_MENUSHOWGIF ENDPOPUP“圖像轉換”BEGIN MENUITEM “位圖轉換為JPEG”, ID_MENUBMPTOJPEG MENUITEM “JPEG轉換為位圖”, ID_MENUJPEGTOBMP MENUITEM “位圖轉換為GIF”, ID_MENUBMPTOGIF ME

44、NUITEM “GIF轉換為位圖”, ID_MENUGIFTOBMP ENDPOPUP“圖像轉換” BEGIN MENUITEM “圖像旋轉”, ID_MENUROTATION MENUITEM “圖像銳化處理”, ID_MENUBMPSHARP MENUITEM “圖像反色處理”, ID_MENUREVERSECOLOR MENUITEM “灰度化處理”, ID_MENUGRAYHANDLE MENUITEM “線性變換”, ID_MENULINEARITYENDPOPUP“圖像轉換”, BEGIN MENUITEM “手寫數(shù)字識別”, 65535 ENDPOPUP“圖像轉換”, BEGIN

45、 MENUITEM“隨機顏色”, ID_RANDOMCOLOR MENUITEM“固定顏色”, ID_FIXCOLORENDPOPUP“圖像轉換”, BEGIN MENUITEM“關于”, ID_ABOUT ENDEND3. 代碼分析(1) 在應用程序類的InitInstance方法中修改單文檔模板構造函數(shù)的參數(shù),由于之前修改了菜單資源ID,因此構造函數(shù)的參數(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、建框架窗口時創(chuàng)建菜單、工具欄和狀態(tài)欄。代碼和流程圖如下:m_wndToolBar.SetButtonText(0,"顯示位圖");m_wndToolBar.SetButtonText(1,"顯示JPEG");m_wndToolBar.SetButtonText(2,"顯示GIF");m_wndToolBar.SetButtonText(4,"位圖轉換JPEG");m_wndToolBar.SetButtonText(5,"JPEG轉換位圖");m_wndToolBar.SetButtonText

48、(6,"位圖轉換GIF");m_wndToolBar.SetButtonText(7,"GIF轉換位圖");m_wndToolBar.SetButtonText(9,"圖像旋轉");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;/獲取位圖的寬度和高度總結時至今日,論文基本完成。從最初的茫然,到慢慢的進入狀態(tài),再到對思路逐漸的清晰,整個制作過程難以用語言來表達。歷經(jīng)了長時間的奮戰(zhàn),緊張而又充實的畢業(yè)設計終于落下了帷幕。回想這段日子的經(jīng)歷和感受,我感慨萬千,在這次畢業(yè)設計的過程中,我擁有了無數(shù)難忘的回憶和收獲。 畢業(yè)設計定下來的時候,我當時便立刻著手資料的收集工作中,當時面對浩瀚的書海真是有些茫然,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論