畢業(yè)論文--mfc圖像變換系統(tǒng)的設計與實現_第1頁
已閱讀1頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  畢業(yè)設計(論文)</b></p><p>  學院(系): 軟件學院 </p><p>  專 業(yè): 軟件工程 </p><p>  學 生: </p><p>  指導教師:

2、 </p><p>  完成日期 201 年 月</p><p>  MFC圖像變換系統(tǒng)的設計與實現</p><p>  Design and Implementation of The Image Transform Software on MFC System</p><p>  MFC圖像變換軟件的設計

3、與實現</p><p><b>  軟件工程 </b></p><p>  隨著科學技術的不斷發(fā)展,計算機的更新速度不斷提高,人們的思想文化素質的提高,對圖像的要求也越來越高。本軟件實現圖像的圖像底片化、圖片灰度化、水平翻轉、垂直翻轉、負像等。</p><p>  圖像的變換是很常見的處理方式,通過對圖像的顯示方式或者圖像數據進行處理來實現不同

4、的圖像特效。本系統(tǒng)主要是面向BMP格式的24位圖像,本程序利用MFC編程技術,首先建立一個基于單文檔的應用程序,添加子菜單按鈕,分別實現各個特效功能。程序運行后,首先打開一個24位的BMP格式圖像,選擇實現不同的功能按鈕。</p><p>  BMP圖像 MFC Visual C++ 水平翻轉 垂直翻轉 灰度化 放大 縮小 底片化</p><p>  Design and

5、 Implementation of The Image Transform Software on MFC System</p><p>  The major of software engineering Li Yuanyuan</p><p>  Abstract: With the development of science and technology, update sp

6、eed computer continues to improve, people's ideological and cultural qualities, the image are increasingly high requirements. The software implementation of the image, the picture negatives of gray, flip horizontal f

7、lip vertical, negative, etc.</p><p>  Image transform approach is very common, through or image data processing to achieve image effects to different display of the image. The system is mainly to 24 bit imag

8、e based on BMP format, the program uses the MFC programming technology, first build an application based on a single document, Ka Ko the menu button, implementation of each specific function. After the program is running

9、, first open a BMP format image 24, choice of different functional buttons.</p><p>  Key words: BMP Image MFC Visual C++ Flip Horizontal Flip vertical Gray Amplification Negative</p><p

10、><b>  目 錄</b></p><p><b>  1 緒論1</b></p><p>  1.1 研究的背景1</p><p>  1.2國內外現狀1</p><p>  1.3研究的意義1</p><p>  1.4 論文結構2</p>

11、<p><b>  2 關鍵技術3</b></p><p>  2.1 Visual C++3</p><p>  2.1.1 Visual C++簡述3</p><p>  2.1.2 MFC的簡介3</p><p>  2.1.3 將Visual C++應用于數字圖像的幾何變換4</p&

12、gt;<p>  2.2 BMP圖形和BMP文件結構4</p><p>  2.2.1 BMP文件結構4</p><p>  2.2.2 BMP圖像的讀寫7</p><p>  2.3圖像變化的基本形式8</p><p>  2.3.1 圖像的平移8</p><p>  2.3.2 圖像的旋轉

13、9</p><p>  2.3.3 圖像的縮放9</p><p><b>  3 需求分析11</b></p><p>  3.1系統(tǒng)設計目標11</p><p>  3.2需求分析結果11</p><p>  3.3可行性分析12</p><p>  3.3.1

14、經濟可行性12</p><p>  3.3.2操作可行性12</p><p><b>  4 概要設計13</b></p><p>  4.1 功能模塊概述13</p><p>  4.2圖像顯示模塊14</p><p>  4.3圖像翻轉模塊14</p><p&g

15、t;  4.4圖像瀏覽模塊14</p><p>  4.5圖像特效處理模塊15</p><p>  5 詳細設計與系統(tǒng)實現16</p><p>  5.1圖像顯示模塊的設計16</p><p>  5.2圖像翻轉模塊17</p><p>  5.2.1水平翻轉17</p><p> 

16、 5.2.2垂直翻轉19</p><p>  5.3圖像瀏覽模塊21</p><p>  5.3.1圖像放大21</p><p>  5.3.2圖像縮小22</p><p>  5.4圖像特效處理22</p><p>  5.4.1圖像灰度化處理23</p><p>  5.4.2圖

17、像負像24</p><p>  6系統(tǒng)運行與總結27</p><p>  6.1圖像打開27</p><p>  6.2水平翻轉27</p><p>  6.3垂直翻轉28</p><p>  6.4圖像放大28</p><p>  6.5圖像縮小29</p><

18、;p>  6.6圖像灰度29</p><p>  6.7圖像負像30</p><p><b>  7結束語31</b></p><p><b>  參考文獻32</b></p><p><b>  致謝33</b></p><p><

19、;b>  1 緒論</b></p><p><b>  1.1 研究的背景</b></p><p>  圖像時現代信息社會中最基本的信息。數字圖像處理的研究對象是圖像處理技術,這是計算機技術的重要分支和發(fā)展方向。數字圖像處理時信息科學、工程學、醫(yī)學、生理學、甚至社會科學等許多學科的重要基礎,同時也是一種具有巨大的經濟和社會效益的使用技術,廣泛應用于軍

20、事、氣象、交通、探礦、水利、農業(yè)甚至娛樂等領域。隨著信息高速公路和數字地球等概念的提出和發(fā)展,數字圖像處理技術已得到更加充分的發(fā)展,并在現代信息社會中占據了非常重要的低位。</p><p>  隨著圖像處理技術的廣泛應用,學習和掌握這門科學顯得格外重要,圖像處理已經成為信息技術相關領域的核心課程。</p><p><b>  1.2國內外現狀</b></p>

21、;<p>  隨著科學技術的不斷發(fā)展,計算機的更新速度不斷提高,人們的思想文化素質的提高,對圖像的要求也越來越高。因此把原始圖像與計算機結合起來,從而創(chuàng)作出許多更加完美的圖像,滿足人們的需求。計算機圖像處理,是指利用計算機對圖像進行一系列加工,以便獲得人所們需要的效果。圖像是人類獲取和交換信息的主要來源,人類感知外界信息,80%以上是通過視覺得到的。因此,圖像處理的應用領域必然涉及到人類生活和工作的方方面面。圖像處理或圖像

22、分析方法的應用越來越廣泛,其主要理論基礎是形態(tài)數學,立體學,集合論等。</p><p>  圖像處理雖然也可以用光學方法或模擬技術來實現,但目前主要是利用計算機來實現,稱為數字圖像處理。因此,圖像處理一般是指數字圖像處理。常見的圖像處理有圖像數字化、圖像編碼、圖像增強、圖像復原、圖像分割與圖像分析等。經過處理后的圖像,一定能夠更好的被用于工業(yè)或者個人目的。為此開發(fā)這個數字圖像處理軟件,能夠處理一些圖像,并對圖像處

23、理技術此方面進行深入的研究。</p><p><b>  1.3研究的意義</b></p><p>  圖像處理學是一門綜合性邊緣學科。從研究范圍來看,它與計算機圖形學、模式識別、計算機視覺等既有聯系又有區(qū)別。</p><p>  圖形學原本指用圖形、圖表、繪圖等形式表達數據信息的科學。而計算機圖形學研究的是如何利用計算機技術來產生這些形式。和

24、圖像分析對比,兩者的處理對象和輸出結果正好相反。計算機圖形學試圖從非圖像形式的數據描述來生成圖像。另一方面,模式識別與圖像分析則比較相似,只是前者試圖把圖像抽象成符號描述的類別,它們有相同的輸入,而不同的輸出結果之間可較方便的進行轉換。至于計算機視覺主要強調用計算機去實現人的視覺功能,其中涉及圖像處理的許多技術,但目前的研究內容主要與圖像理解相結合。</p><p>  由此看來,以上學科相互聯系,相互交叉,它們

25、之間并沒有絕對的界限。雖各有側重但又相互補充。另外以上各學科都得到了人工智能、神經網絡、遺傳算法、模糊邏輯等新理論、新工具、新技術的支持,所以它們又都在近年得到了長足發(fā)展。</p><p>  在計算機出現之前,模擬圖像處理占主導地位。隨著計算機的發(fā)展,數字圖像處理發(fā)展速度越來越快。與人類對視覺機能著迷的歷史相比,它是一門相對年輕的學科。盡管目前一般采用順序處理的計算機,對大數據量的圖像處理速度不如光學方法快,但

26、是其處理的精度高,實現多種功能的、高度復雜的運算求解非常靈活方便。在其短短的歷史中,它卻成功的應用于幾乎所有與成像有關的領域,并正發(fā)揮相當重要的作用。 </p><p><b>  1.4 論文結構</b></p><p>  本文共分為6章,各章主要內容介紹如下:</p><p>  第一章首先簡單介紹課題研究的背景,國內外的發(fā)展狀況、本系統(tǒng)

27、研究的主要意義以及本論文的組織結構。</p><p>  第二章主要介紹系統(tǒng)開發(fā)的平臺,以及主要關鍵技術如:Visual C++、BMP圖形和BMP文件結構、圖像變化的基本形式等。</p><p>  第三章主要介紹本系統(tǒng)的系統(tǒng)設計目標、需求分析結果、可行性分析。</p><p>  第四章主要介紹課題的功能模塊設計以及詳細設計過程。先做出整體功能模塊圖,再對各功能

28、模塊進行概述,最后介紹個模塊的流程圖。</p><p>  第五章主要介紹系統(tǒng)主要編碼與實現過程。</p><p>  第六章主要介紹系統(tǒng)運行與總結。</p><p><b>  2 關鍵技術</b></p><p>  2.1 Visual C++</p><p>  2.1.1 Visual

29、C++簡述</p><p>  Visual C++(簡稱VC)是微軟公司提供的基于C/C++的應用程序集成開發(fā)工具。VC擁有豐富的功能和大量的擴展庫,使用它能有效的創(chuàng)建高性能的Windows應用程序和Web應用程序。VC的優(yōu)越性主要表現在以下幾個方面:</p><p><b>  開發(fā)分布式應用。</b></p><p>  開發(fā)的應用程序運

30、行效率高、具有健壯性。</p><p>  能縮短軟件升級周期。</p><p>  能夠生成多線程應用,而多線程應用對于增加并發(fā)響應有實際意義。</p><p>  VC除了提供高效的C/C++編譯器外,還提供了大量的可重用類和組件,包括著名的微軟基礎類庫(MFC)和活動模板類庫(ATL),因此它是軟件開發(fā)人員不可多得的開發(fā)工具。</p><p

31、>  Visual C++6.0是功能最為強大的可視化開發(fā)工具之一,它不僅支持傳統(tǒng)的軟件開發(fā)方法,更重要的是它能支持面向對象、可視化的開發(fā)風格。因此Visual C++6.0又稱作是一個集成開發(fā)工具,它提供了軟件代碼自動生成和可視化的資源編輯功能。</p><p>  Visual C++ 具有多種優(yōu)點:它提供了面向對象的應用程序框架MFC(Microsoft Foundation Class),簡化了程

32、序員的編程工作,提高了模塊的可重用性;提供了基于CASE技術的可視化軟件的自動生成和維護工具AppWizard、Class Wizard、Visual Studio、Wizard Bar等,實現了直觀、可視的程序設計風格,方便地編輯和管理各種類,維護程序的源代碼;封裝了Windows的API函數、USER、KERNEL、GDI函數,簡化了編程時創(chuàng)建、維護窗口的許多復雜的工作。</p><p>  2.1.2 MF

33、C的簡介</p><p>  MFC的英文全稱是Microsoft Foundation Class Library,MFC中的各種類結合起來構成了一個應用程序框架,它的目的就是讓程序員在此基礎上來建立Windows下的應用程序,這是一種相對SDK來說更為簡單的方法。因為總體上,MFC框架定義了應用程序的輪廓,并提供了用戶接口的標準實現方法,程序員所要做的就是通過預定義的接口把具體應用程序特有的東西填入這個輪廓。

34、</p><p>  Microsoft Visual C++提供了相應的工具來完成這個工作:AppWizard可以用來生成初步的框架文件(代碼和資源等);資源編輯器用于幫助直觀地設計用戶接口;Class Wizard用來協助添加代碼到框架文件;最后,編譯,則通過類庫實現了應用程序特定的邏輯。</p><p>  2.1.3 將Visual C++應用于數字圖像的幾何變換</p>

35、;<p>  VC豐富的功能和大量的擴展庫,類的重用特性以及它對函數庫、DLL庫的支持能使程序更好的模塊化,并且通過向導程序大大簡化了庫資源的使用和應用程序的開發(fā),正由于VC具有明顯的優(yōu)勢,因而我選擇了它來作為數字圖像幾何變換的開發(fā)工具。</p><p>  在本程序的開發(fā)過程中,VC的核心知識、消息映射機制、對話框控件編程等都得到了生動的體現和靈活的應用。</p><p>

36、  2.2 BMP圖形和BMP文件結構</p><p>  2.2.1 BMP文件結構</p><p>  BMP圖像文件被分成4個部分:位圖文件頭(Bitmap File Header)、位圖信息頭(Bitmap Info Header)、顏色表(Color Map)和位圖數據(即圖像數據,Data Bits或Data Body)。</p><p>  第1部分為

37、位圖文件頭BITMAPFILEHEADER,是一個結構體類型,該結構的長度是固定的,為14個字節(jié)。其定義如下:</p><p>  BITMAPFILEHEADER結構的各個域詳細說明如下:</p><p>  bfType:位圖文件類型,必須是0x424D,即字符串“BM”,也就是說,所有的“*.bmp”文件的頭兩個字節(jié)都是“BM”。</p><p>  bfSi

38、ze:位圖文件大小,包括這14個字節(jié)。</p><p>  bfReserved1, bfReserved2:Windows保留字,暫不用。</p><p>  bfOffBits:從文件頭到實際的位圖數據的偏移字節(jié)數,圖2-1中前3個部分的長度之和。</p><p>  第2部分為位圖信息頭BITMAPINFOHEADER,也是一個結構體類型的數據結構,該結構的長

39、度也是固定的,為40個字節(jié)(WORD為無符號16位整數,DWORD為無符號32位整數,LONG為32位整數)。其定義如下:</p><p>  BITMAPINFOHEADER結構的各個域的詳細說明如下:</p><p>  biSize:本結構的長度,為40個字節(jié)。</p><p>  biWidth:位圖的寬度,以像素為單位。</p><p&

40、gt;  biHeight:位圖的高度,以像素為單位。</p><p>  biPlanes:目標設備的級別,必須是1。</p><p>  biBitCount:每個像素所占的位數(bit),其值必須為1(黑白圖像)、4(16色圖)、8(256色)、24(真彩色圖),新的BMP格式支持32位色。</p><p>  biCompresssion:位圖壓縮類型,有效

41、的值為BI_RGB(未經壓縮)、BI_RLE8、BI_RLE4、BI_BITFILEDS(均為Windows定義常量)。這里只討論未經壓縮的情況,即biCompression=BI_RGB。</p><p>  biSizeImage:實際的位圖數據占用的字節(jié)數,該值的大小在第4部分位圖數據中有具體解釋。</p><p>  biXPelsPerMeter:指定目標設備的水平分辨率,單位是

42、像素/米。</p><p>  biYPelsPerMeter:指定目標設備的垂直分辨率,單位是像素/米。</p><p>  biClrUsed:位圖實際用到的顏色數,如果該值為零,則用到的顏色數為2的biBitCount次冪。</p><p>  biClrImportant:位圖顯示過程中重要的顏色數,如果該值為零,則認為所有的顏色都是重要的。</p&g

43、t;<p>  第3部分為顏色表。顏色表實際上是一個RGBQUAD結構的數組,數組的長度由biClrUsed指定(如果該值為零,則由biBitCount指定,即2的biBitCount次冪個元素)。RGBQUAD結構是一個結構體類型,占4個字節(jié),其定義如下:</p><p>  RGBQUAD結構的各個域的詳細說明如下:</p><p>  rgbBlue:該顏色的藍色分量;

44、</p><p>  rgbGreen:該顏色的綠色分量;</p><p>  rgbRed:該顏色的紅色分量;</p><p>  rgbReserved:保留字節(jié),暫不用。</p><p>  第4部分是位圖數據,即圖像數據,其緊跟在位圖文件頭、位圖信息頭和顏色表(如果有顏色表的話)之后,記錄了圖像的每一個像素值。對于有顏色表的位圖,位圖

45、數據就是該像素顏色在調色板中的索引值;對于真彩色圖,位圖數據就是實際的R、G、B值(三個分量的存儲順序是B、G、R)。下面就2色、16色、256色位圖和真彩色位圖分別介紹。</p><p>  對于2色位圖,用1位就可以表示該像素的顏色(一般0表示黑,1表示白),所以一個字節(jié)可以表示8個像素。</p><p>  對于16色位圖,用4位可以表示一個像素的顏色,所以1個字節(jié)可以表示2個像素。

46、</p><p>  對于256色位圖,1個字節(jié)剛好可以表示1個像素。</p><p>  對于真彩色圖,3個字節(jié)才能表示1個像素。</p><p>  2.2.2 BMP圖像的讀寫</p><p>  2.2.2.1 BMP圖像的讀:</p><p>  (1)首先定義BMP文件頭和信息頭變量</p>

47、<p>  BITMAPFILEHEADER bf; //BMP文件頭結構體</p><p>  BITMAPINFOHEADER bi; //BMP信息頭結構體</p><p>  (2)創(chuàng)建文件輸入流 fp</p><p>  fp=fopen(fileName,"rb"); //fileName為BMP圖像文件名</p&

48、gt;<p>  (3)讀取信息頭、文件頭</p><p>  fread(&bf,sizeof(BITMAPFILEHEADER),1,fp); </p><p>  fread(&bi,sizeof(BITMAPINFOHEADER),1,fp);</p><p>  經過這兩條程序把BMP圖像的信息頭、文件頭賦給bf和bi變量,可

49、以根據bf和bi得到圖像的各種屬性。</p><p>  (4) 讀取BMP調色板</p><p>  fread(ipRGB2,sizeof(RGBQUAD),256,fp); </p><p>  (5)讀取BMP位圖數據</p><p>  定義一個二維數組Imgdata來存取BMP位圖數據</p><p> 

50、 unsigned char * * Imgdata; </p><p>  Imgdata=new unsigned char*[bi.biHeight]; //聲明一個指針數組</p><p>  for ( i=0;i<bi.biHeight;i++) </p><p>  Imgdata[i]=new unsigned char[(bi.b

51、iWidth*3+3)/4*4]; //每個數組元素也是一個指針數組 </p><p>  for ( i=0;i<bi.biHeight;i++ ) </p><p>  for(j=0;j<(bi.biWidth*3+3)/4*4;j++) </p><p>  fread(&Imgdata[i][j],1,1,fp);//每次

52、只讀取一個字節(jié),存入數組 </p><p>  2.2.2.2 BMP圖像的寫:</p><p>  (1)創(chuàng)建一個輸出流fp</p><p>  fp=fopen("mybmp.bmp","wb"); </p><p>  (2) 寫B(tài)MP圖像的信息頭、文件頭</p><

53、p>  fwrite(&bf2,sizeof(BITMAPFILEHEADER),1,fp); </p><p>  fwrite(&bi2,sizeof(BITMAPINFOHEADER),1,fp);</p><p>  (3) 寫B(tài)MP調色板</p><p>  fwrite(ipRGB2,sizeof(RGBQUAD),256,fp)

54、; </p><p>  (4) 寫B(tài)MP圖像的位圖數據部分</p><p>  for (i=(bi.biHeight)-1 ;i>=0;i--) </p><p>  for (j=0 ;j<(bi.biWidth*3+3)/4*4;j++) </p><p>  fwrite(&Imgdata[i

55、][j],1,1,fp); </p><p>  2.3圖像變化的基本形式</p><p>  圖像的基本變換形式,通常包括圖像的平移、圖像的鏡像變換、圖像的轉置、圖像的縮放和圖像的旋轉等。</p><p>  2.3.1 圖像的平移</p><p>  圖像平移就是將圖像中所有的點都按照指定的平移量水平、垂直移動。設(x0,y0)為原圖

56、像上的一點,圖像水平平移量為tx,垂直平移量為ty,則平移后點(x0,y0)坐標將變?yōu)椋▁1,y1)。</p><p>  顯然(x0,y0)和(x1,y1)的關系如下:</p><p><b>  用矩陣表示如下:</b></p><p>  對該矩陣求逆,可以得到逆變換:</p><p><b>  即&l

57、t;/b></p><p>  這樣,平移后的圖像上的每一點都可以在原圖像中找到對應的點。例如,對于新圖中的(0,0)像素,代入上面的方程組,可以求出對應原圖中的像素(-tx,-ty)。如果tx或ty大于0,則(- tx,- ty)不在原圖中。對于不在原圖中的點,可以直接將它的像素值統(tǒng)一設置為0或則255(對于灰度圖就是黑色或白色)。同樣,若有點不在原圖中,也就說明原圖中有點被移出顯示區(qū)域。如果不想丟失被移

58、出的部分圖像,可以將新生成的圖像寬度擴大|tx |,高度擴大| ty |。</p><p>  2.3.2 圖像的旋轉</p><p>  一般圖像的旋轉是以圖像的中心為原點,旋轉一定的角度。旋轉后,圖像的大小一般會改變。和圖像平移一樣,既可以把轉出顯示區(qū)域的圖像截去,也可以擴大圖像范圍以顯示所有的圖像。</p><p>  可以推導一下旋轉運算的變換公式。如下圖所

59、示,點(x0,y0)經過旋轉θ度后坐標變成(x1,y1)。</p><p><b>  在旋轉前:</b></p><p><b>  旋轉后:</b></p><p><b>  寫成矩陣表達式為:</b></p><p>  2.3.3 圖像的縮放</p>&

60、lt;p>  圖像的縮放操作將會改變圖像的大小,產生的圖像中的像素可能在原圖中找不到相應的像素點,這樣就必須進行近似處理。一般的方法是直接賦值為和它最相近的像素值,也可以通過一些插值算法來計算。</p><p>  假設圖像x軸方向縮放比率為fx,y軸方向縮放比率為fy,那么原圖中點(x0,y0)對應與新圖中的點(x1,y1)的轉換矩陣為:</p><p><b>  其逆

61、運算如下:</b></p><p><b>  即</b></p><p>  例如,當fx=fy=0.5時,圖像被縮放到一半大小,此時縮小后圖像中的(0,0)像素對應于原圖中的(0,0)像素;(0,1)像素對應于原圖中的(0,2)像素;(1,0)像素對應于原圖中的(2,0)像素,以此類推。在原圖基礎上,每行隔一個像素取一點,每隔一行進行操作。其實是將原圖

62、每行中的像素重復取值一遍,然后每行重復一次。</p><p><b>  3 需求分析</b></p><p><b>  3.1系統(tǒng)設計目標</b></p><p>  需求分析簡單地說就是分析用戶的需求。需求分析是設計系統(tǒng)的起點,需求分析的結果是否準確地反映了用戶的實際要求,將直接影響到后面各個階段的設計,并影響到設計

63、結果是否合理和實用。</p><p>  需求分析的任務是通過詳細調查現實世界要處理的對象(組織、部門、企業(yè)等),充分了解原系統(tǒng)(手工系統(tǒng)或計算機系統(tǒng))工作概況,明確用戶的各種需求,然后在此基礎上確定新系統(tǒng)的功能。</p><p>  調查的重點是“數據”和“處理”,通過調查、收集與分析,獲得用戶對數據的要求如下:</p><p>  (1)圖像的打開、關閉及保存:

64、打開并顯示圖像,并在處理過圖像后關閉或保存圖像的修改。</p><p> ?。?)處理要求。指用戶要完成什么處理功能,對處理的響應時間有什么要求,處理方式是批處理還是其他處理方式,能夠完成圖像一般的編輯處理。</p><p> ?。?)處理效果與效率。圖像處理中一個很重要的問題就是如何表示有關的知識并以恰當的方式引入圖像處理。由于圖像處理任務的復雜性,目前要找出一個通用的方法適應各種情況是

65、幾乎不可能的。另一方面,在建立普適的圖像處理方法時,往往會忽略某類圖像具有的特定屬性。相反,針對某類特定問題,則可能找到有效的方法。為此,有研究者提出基于對象圖像處理的概念:限定圖像處理的對象為一類特殊的圖像BMP,考察對象的共有屬性(稱為先驗),并將其結合到圖像處理的任務中以提供更多的信息,從而提升圖像處理的性能、提高處理效果。由于圖像的處理是通過對一個個像素點進行處理,要想提高處理速度就需要尋找一個快速的處理方法。 </p&g

66、t;<p>  本系統(tǒng)是Windows應用程序,可以進行圖像的導入和導出,處理后的圖片進行保存,圖像的特效處理以及打印輸出圖片。</p><p><b>  3.2需求分析結果</b></p><p>  本系統(tǒng)的主要功能有:</p><p>  圖像文件的打開和保存,實現了對24位BMP格式圖像的操作。</p>&

67、lt;p>  圖像的復制,實現將位圖像復制到其他的工具中。</p><p>  圖像的放大,實現圖像按照原比例放大顯示,呈現放大效果。</p><p>  圖像的縮小,實現圖像按照原比例縮小顯示,呈現縮小效果。</p><p>  圖像的水平翻轉,實現對圖像數據的左右水平方向的相互轉換。</p><p>  圖像的垂直翻轉,實現對圖像數

68、據的垂直上學方向的相互轉換。</p><p>  圖像的負像處理,實現對圖像的底片化效果顯示。</p><p>  圖像的灰度化處理,實現對彩色圖像的黑白化處理</p><p><b>  3.3可行性分析</b></p><p>  3.3.1經濟可行性</p><p>  即考慮到成本問題,人

69、力管理消耗大量的時間和物資而該系統(tǒng)只需極少部分人的管理且提高效益,這樣就需要在管理中提供一個簡單易操作可行性高的系統(tǒng),也就是本項目所要開發(fā)的管理系統(tǒng)。并且開發(fā)一個小型的管理系統(tǒng)的成本也不高,是完全可以承受的。從這一方面來看,經濟上是可行的。 </p><p>  3.3.2操作可行性</p><p&g

70、t;  該軟件主要是用Visual C++6.0作為系統(tǒng)的開發(fā)工具,軟件開發(fā)高速發(fā)展的今天,技術發(fā)達,用來實現網絡軟件開發(fā)的工具很多,我們可以利用這些工具來進行研究。在windows操作系統(tǒng)下利用MFC實現界面化操作,建立基于單文檔的應用程序。在添加子菜單完成各項功能。MFC開發(fā)環(huán)境成熟,有龐大的庫函數,有一系列的的規(guī)范,只需學習后恰當的調用,再需簡單掌握MFC相關庫函數就可獲得圖像位圖陣列。從操作技術上是可行的。</p>

71、<p><b>  4 概要設計</b></p><p>  4.1 功能模塊概述</p><p>  圖像簡單特效及加密處理系統(tǒng)是一個典型的圖像處理軟件,它由圖像顯示、圖像翻轉、圖像翻轉、圖像瀏覽、圖像特效等模塊組成。</p><p><b>  圖像顯示模塊</b></p><p>

72、  該模塊主要是可以打開一個位圖文件即BMP格式的圖像,并能將BMP格式的圖像進行復制到剪貼板上,載將位圖復制在其他工具中的模塊。</p><p><b>  圖像翻轉模式</b></p><p>  該模塊主要是將位圖圖像進行旋轉包括將水平方向翻轉,垂直方向翻轉及順時針90°旋轉的模塊。</p><p><b>  圖像瀏

73、覽模塊</b></p><p>  該模塊主要是可以對位圖進行縮放顯示包括對圖像的按照多大的比例放大和縮小或按照原來大小顯示位圖。</p><p><b>  圖像特效模塊</b></p><p>  該模塊主要是對位圖進行一些特效功能處理包括圖像負像、圖片灰度化二個部分。負像就是將圖像轉換成底片形式,圖像灰度化就是將彩色轉變?yōu)榛叶?/p>

74、圖像時圖像失去色彩。</p><p><b>  幫助模塊</b></p><p>  該模塊主要包括軟件的版本、開發(fā)單位等信息。</p><p>  本系統(tǒng)的功能模塊圖設計如下4.1所示</p><p>  圖4.1 功能模塊圖</p><p><b>  4.2圖像顯示模塊</

75、b></p><p><b>  圖像復制</b></p><p>  打開一張24位的BMP格式圖像,就能顯示一個BMP格式的圖像,并運行復制功能后,本圖像可以復制在其他的工具中。</p><p>  如打開一個BMP格式位圖后,在編輯中,點擊“復制”,再打開一個別的工具如文檔,鼠標右擊后選擇“粘貼”,那么這個BMP格式的圖像就顯示在文

76、檔中。</p><p><b>  4.3圖像翻轉模塊</b></p><p><b>  (1)水平翻轉</b></p><p>  打開一張24位的BMP格式的圖像,運行水平翻轉功能,點擊垂直翻轉子菜單,程序開始處理圖像,處理后的圖像左右兩邊的像素轉換過來顯示。</p><p><b>

77、; ?。?)垂直翻轉</b></p><p>  打開一張24位的BMP格式的圖像,運行圖像垂直翻轉功能,點擊垂直翻轉子菜單,程序開始處理圖像,處理好的圖像上下兩邊的像素轉換過來顯示。</p><p><b>  4.4圖像瀏覽模塊</b></p><p><b>  (1)圖像放大</b></p>

78、<p>  打開一張24位的BMP格式的圖像,運行圖像放大功能,點擊圖像放大子菜單,程序開始處理圖像,處理后的圖像按照原來的比例擴大來顯示。</p><p><b> ?。?)圖像縮小</b></p><p>  打開一張24位的BMP格式的圖像,運行圖像縮小功能,點擊圖像縮小子菜單,程序開始處理圖像,處理后的圖像按照原來的比例縮小來顯示。</p&

79、gt;<p>  4.5圖像特效處理模塊</p><p> ?。?)圖像底片化處理</p><p>  打開一張24位的BMP格式的圖像,運行圖像底片化處理功能,程序就開始反相圖像,把圖片變成像底片一樣的效果。</p><p> ?。?)圖像灰度化處理</p><p>  彩色圖像被灰度化位黑白圖像。</p>&l

80、t;p>  在RGB模型中,如果R=G=B時,則彩色表示一種灰度顏色,其中R=G=B的值叫灰度值,因此,灰度圖像每個像素只需一個字節(jié)存放灰度值(又稱強度值、亮度值),灰度范圍為0-255。一般有以下四種方法對彩色圖像進行灰度化: </p><p>  將彩色圖像中的三分量的亮度作為三個灰度圖像的灰度值,可根據應用需要選取一種灰度圖像。 </p><p>  f1(i,j)=R(i,j

81、) f2(i,j)=G(i,j) f3(i,j)=B(i,j) </p><p>  其中fk(i,j)(k=1,2,3)為轉換后的灰度圖像在(i,j)處的灰度值。</p><p>  5 詳細設計與系統(tǒng)實現</p><p>  在每個功能模塊中都用到了函數,void Invalidate( BOOL bErase = TRUE ),</p><

82、p>  該函數的作用是使整個窗口客戶區(qū)無效。窗口的客戶區(qū)無效意味著需要重繪,例如,如果一個被其它窗口遮住的窗口變成了前臺窗口,那么原來被遮住的部分就是無效的,需要重繪。這時Windows會在應用程序的消息隊列中放置WM_PAINT消息。MFC為 窗口類提供了WM_PAINT的消息處理函數OnPaint,OnPaint負責重繪窗口。視圖類有一些例外,在視圖類的OnPaint函數中調用了 OnDraw函數,實際的重繪工作由OnDraw

83、來完成。參數bErase為TRUE時,重繪區(qū)域內的背景將被擦除,否則,背景將保持不變。</p><p>  5.1圖像顯示模塊的設計</p><p>  圖像顯示模塊是能夠讀取位圖文件以及圖像的復制功能。</p><p><b>  圖像復制</b></p><p>  圖像復制就是圖像可以復制在其他的工具中。本功能是將

84、位圖數據轉化為DIB格式數據在復制在剪貼板上。流程見圖5.1</p><p>  5-1復制功能流程圖</p><p><b>  關鍵代碼:</b></p><p>  BOOL CDIB::Copy()</p><p>  {if (m_lpBits == 0) </p><p>  ret

85、urn FALSE;</p><p>  if (!OpenClipboard(NULL)) </p><p>  return FALSE;</p><p>  EmptyClipboard();</p><p>  HGLOBAL hMem;</p><p>  BYTE *lpDib;</p>&l

86、t;p>  int nLen = sizeof(BITMAPINFOHEADER)</p><p>  + BYTE_PER_LINE(m_nWidth, m_nBitCount)*m_nHeight;</p><p>  hMem = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE, nLen);</p><p>  lpDi

87、b = (BYTE *)GlobalLock(hMem);</p><p>  SaveToDib(lpDib);</p><p>  GlobalUnlock(hMem);</p><p>  SetClipboardData(CF_DIB, hMem);</p><p>  CloseClipboard();</p><

88、;p>  return TRUE;</p><p><b>  }</b></p><p><b>  5.2圖像翻轉模塊</b></p><p><b>  5.2.1水平翻轉</b></p><p>  水平翻轉將圖像水平方向的像素點沿著中間線進行翻轉,處理過程為:獲

89、得當前設備指針,指向當前設備, 定義三個無符號的的指針,為翻轉圖像申請一段內存空間,大小為圖像內存大小。內層循環(huán)將每一行的像素點進行翻轉,左側的像素移到右側,右側的像素點移到左側外層循環(huán)將所有行的像素進行翻轉將左側的像素點移到右側,講右側的像素點移到左側。invalidate()函數</p><p>  進行窗體的重繪。實現過程見圖5.2</p><p>  5-2圖像水平翻轉流程圖<

90、;/p><p><b>  關鍵代碼:</b></p><p>  BOOL CDIB::VFlip()</p><p><b>  {</b></p><p>  if (!m_lpBits) </p><p>  return FALSE;</p><p

91、>  int y, nByteWidth;</p><p>  BYTE *p1, *p2, *pm;</p><p>  nByteWidth = BYTE_PER_LINE(m_nWidth, m_nBitCount);</p><p>  pm = new BYTE[nByteWidth];</p><p>  for (y=0;

92、 y<m_nHeight/2; y++)</p><p><b>  {</b></p><p>  p1 = m_lpBits+y*nByteWidth;</p><p>  p2 = m_lpBits+(m_nHeight-y-1)*nByteWidth;</p><p>  memcpy(pm, p1, nB

93、yteWidth);</p><p>  memcpy(p1, p2, nByteWidth);</p><p>  memcpy(p2, pm, nByteWidth);</p><p><b>  }</b></p><p>  delete[] pm;</p><p>  return TR

94、UE;</p><p><b>  }</b></p><p><b>  5.2.2垂直翻轉</b></p><p>  垂直翻轉實現圖像垂直方向的像素對稱翻轉,處理過程為:獲得當前設備指針,指向當前設備, 定義三個無符號的的指針,為翻轉圖像申請一段內存空間,大小為圖像內存大小。內層循環(huán)將每一行的像素點進行翻轉,左側的像

95、素移到右側,右側的像素點移到左側外層循環(huán)將所有行的像素進行翻轉將左側的像素點移到右側,講右側的像素點移到左側。具體過程見圖5.3</p><p>  5-3圖像垂直翻轉流程圖</p><p><b>  關鍵代碼:</b></p><p>  BOOL CDIB::Rotate()</p><p><b>  

96、{</b></p><p>  if (m_lpBits == NULL) </p><p>  return FALSE;</p><p>  BYTE *pbits, *p1, *p2, *pa, *pb, *pa1, *pb1;</p><p>  int w2, h2, bw2, bw1, x, y;</p>

97、<p>  w2 = m_nHeight;</p><p>  h2 = m_nWidth;</p><p>  bw1 = BYTE_PER_LINE(m_nWidth, m_nBitCount);</p><p>  bw2 = BYTE_PER_LINE(w2, m_nBitCount);</p><p>  pbits

98、 = new BYTE[bw2*h2];</p><p>  if (m_nBitCount==24)</p><p><b>  {</b></p><p>  for (y=0; y<m_nHeight; y++)</p><p>  for (x=0; x<m_nWidth; x++)</p>

99、;<p><b>  {</b></p><p>  p1 = m_lpBits+bw1*y+x*3;</p><p>  p2 = pbits+bw2*(h2-x-1)+y*3;</p><p>  p2[0] = p1[0];</p><p>  p2[1] = p1[1];</p>&l

100、t;p>  p2[2] = p1[2];</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  return TRUE;</p><p><b>

101、  }</b></p><p><b>  }</b></p><p>  delete[] m_lpBits;</p><p>  m_lpBits = pbits;</p><p>  m_nWidth = w2;</p><p>  m_nHeight = h2;</p&g

102、t;<p>  return TRUE;</p><p><b>  }</b></p><p><b>  5.3圖像瀏覽模塊</b></p><p><b>  5.3.1圖像放大</b></p><p>  圖像放大是圖像按照比例擴大,是改變位圖空間的大小。

103、獲得整個位圖的空間尺寸,在不改變位圖的大小,只是將位圖按照原來的大小僅改變相框的大小,而不改變相片的大小。具體流程如5. 4</p><p>  5-4圖像放大的流程圖</p><p><b>  關鍵代碼:</b></p><p><b>  {</b></p><p>  m_dRoom = m

104、_dRoom*1.2;</p><p>  SetModifiedFlag();</p><p>  UpdateAllViews(NULL);</p><p><b>  }</b></p><p><b>  5.3.2圖像縮小</b></p><p>  圖像縮小是圖像

105、按照比例縮小,是改變位圖空間的大小。獲得整個位圖的空間尺寸,在不改變位圖的大小,只是將位圖按照原來的大小僅改變相框的大小,而不改變相片的大小。具體流程如5. 5</p><p>  5-5圖像縮小的流程圖</p><p><b>  關鍵代碼:</b></p><p><b>  {</b></p><

106、p>  // TODO: Add your command handler code here</p><p>  m_dRoom = 1;</p><p>  SetModifiedFlag();</p><p>  UpdateAllViews(NULL);</p><p><b>  }</b></p&

107、gt;<p><b>  5.4圖像特效處理</b></p><p>  5.4.1圖像灰度化處理</p><p>  圖像灰度化將彩色圖像灰度化位黑白色的圖像,處理過程為:獲取指向BITMAPINFO結構的指針(Win3.0)定義三個指針lpsrc指向轉置圖像對應象素的lpdst指針指向轉置圖像的指針,lpnew暫時分配內存,獲取原圖像的像素點,利用灰

108、度化公式,相應的像素點進行處理,刪除原來的位圖,創(chuàng)建新的位圖,變成8色的位圖,創(chuàng)建新的調色板.具體過程見圖5.6</p><p>  5-6圖像灰度化流程圖</p><p><b>  關鍵代碼:</b></p><p>  BOOL CDIB::Grey()</p><p><b>  {</b>

109、</p><p>  if (!m_lpBits) </p><p>  return FALSE;</p><p>  int y, x, nByteWidth, palsize, grey;</p><p><b>  BYTE *p;</b></p><p>  nByteWidth = B

110、YTE_PER_LINE(m_nWidth, m_nBitCount);</p><p>  for (y=0; y<m_nHeight; y++)</p><p>  for (x=0; x<m_nWidth; x++)</p><p><b>  {</b></p><p>  p = m_lpBits+

111、nByteWidth*y+x*3;</p><p>  grey = (BYTE)(0.299*p[2]+0.587*p[1]+0.114*p[0]);</p><p>  p[0] = grey;</p><p>  p[1] = grey;</p><p>  p[2] = grey;</p><p><b&

112、gt;  }</b></p><p><b>  }</b></p><p><b>  5.4.2圖像負像</b></p><p>  圖像負像就是把圖像轉換為底片處理,圖像底片化是將圖像實現底片化效果,將原圖像像素點進行反色處理,處理過程為:ondraw()函數獲取圖像的高度寬度,每行按四字節(jié)對齊。定義一個

113、文檔列指針。一個無符號型的指針對準原圖像,對圖像進行反色。內層循環(huán)對每行的對每個像素點進行反色,外層循環(huán)逐行進行反色。詳細處理過程見圖5.7</p><p>  5-7圖像底片化處理</p><p><b>  關鍵代碼:</b></p><p>  BOOL CDIB::Negative()</p><p><b

114、>  {</b></p><p>  if (!m_lpBits) </p><p>  return FALSE;</p><p>  int y, x, nByteWidth, palsize;</p><p><b>  BYTE *p;</b></p><p><b

115、>  {</b></p><p>  nByteWidth = BYTE_PER_LINE(m_nWidth, m_nBitCount);</p><p>  for (y=0; y<m_nHeight; y++)</p><p>  for (x=0; x<m_nWidth; x++)</p><p><

116、b>  {</b></p><p>  p = m_lpBits+nByteWidth*y+x*3;</p><p>  p[0] = ~p[0];</p><p>  p[1] = ~p[1];</p><p>  p[2] = ~p[2];</p><p><b>  }</b&g

117、t;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  6系統(tǒng)運行與總結</b></p><p><b>  6.1圖像打開</b></p><p>  系統(tǒng)運行后,點擊文件

118、菜單下的打開選項,按照指示打開目標圖像,打開圖像后如圖6.1所示。</p><p><b>  6.2水平翻轉</b></p><p>  運行水平翻轉功能:打開目標圖像后,單擊水平翻轉子菜單,經處理過后的圖像如圖6.2</p><p><b>  6.3垂直翻轉</b></p><p>  運行垂

119、直翻轉功能:打開目標圖像,單擊垂直翻轉子菜單,經處理過后的圖像如圖6.3</p><p><b>  6.4圖像放大</b></p><p>  運行圖像放大功能:打開目標圖像,單擊圖像放大子菜單,經處理過后的圖像如圖6.4</p><p><b>  6.5圖像縮小</b></p><p>  運

120、行圖像縮小功能:打開目標圖像,單擊圖像縮小子菜單,經處理過后的圖像如圖6.5</p><p><b>  6.6圖像灰度</b></p><p>  運行圖像灰度功能:打開目標圖像,單擊圖像灰度子菜單,經處理過后的圖像如圖6.6</p><p><b>  6.7圖像負像</b></p><p> 

121、 運行圖像負像功能:打開目標圖像,單擊圖像負像子菜單,經處理過后的圖像如圖6.7</p><p><b>  7結束語</b></p><p>  通過這次系統(tǒng)開發(fā),我學習了MFC知識,并運用在了我的畢業(yè)設計中,我所學習到的MFC知識知識MFC庫中的一點,仍有很多不懂的地方,在今后的學習中有機會仍蔣繼續(xù)。</p><p>  圍繞對一個具體的系

122、統(tǒng)的開發(fā),把計算機的理論與實踐相結合,豐富了自己的編程經驗。在這兩個多月里,我學到了許多以前沒有學到的知識和技能,鍛煉了自己的獨立思考能力和實際操作能力,系統(tǒng)整理了大學四年所學的知識。并自學了MFC框架開發(fā)技術,VC++技術,圖像處理等眾多的知識,特別是學會了對軟件開發(fā)中整個流程的分析。從系統(tǒng)需求分析開始,系統(tǒng)的分析和設計、系統(tǒng)的實施、編寫代碼、調試和書寫文檔以及最后運行程序,這些練習都為我將來的學習和工作提供了良好的理論基礎和實踐能力

溫馨提示

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

評論

0/150

提交評論