版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)任務(wù)書</b></p><p> 學(xué)生姓名: 專業(yè)班級(jí): </p><p> 指導(dǎo)教師: 工作單位: </p><p> 題 目:
2、 </p><p><b> 初始條件:</b></p><p> 要求完成的主要任務(wù): (包括課程設(shè)計(jì)工作量及其技術(shù)要求,以及說明書撰寫等具體要求)</p><p><b> 時(shí)間安排:</b></p><p> 指導(dǎo)教師簽名:
3、 年 月 日</p><p> 系主任(或責(zé)任教師)簽名: 年 月 日</p><p><b> 目錄</b></p><p> 摘要…………………………………………………………………………………………2</p><p> 引言………………………
4、……………………………………………………..3</p><p> 1.1基礎(chǔ)知識(shí)……………………………………………………………………….3</p><p> 1.2本數(shù)字圖像處理界面處理內(nèi)容介紹………………………………………….4</p><p> 1.2.1啟動(dòng)界面……………………………………………………………….4</p><p>
5、 1.2.2主界面………………………………………………………………….4</p><p> 第二章 系統(tǒng)分析……………………………………………………………………….4</p><p> 2.1設(shè)計(jì)要求……………………………………………………………………. 4</p><p> 2.2系統(tǒng)處理流程分析………………………………………………………...5<
6、/p><p> 第三章 系統(tǒng)設(shè)計(jì)……………………………………………………………………..5</p><p> 3.1系統(tǒng)的設(shè)計(jì)語(yǔ)言…………………………………………………………….5</p><p> 3.2系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)………………………………………………………….5</p><p> 3.2.1 系統(tǒng)總體結(jié)構(gòu)圖…………………………
7、………………………….5</p><p> 3.2.2 系統(tǒng)模塊設(shè)計(jì)……………………………………………………….6</p><p> 第四章 系統(tǒng)詳細(xì)設(shè)計(jì)………………………………………………………………….7</p><p> 4.1基類的設(shè)計(jì)………………………………………………………………..7</p><p> 4.2 各模塊的詳
8、細(xì)設(shè)計(jì)………………………………………………………..8</p><p> 4.2.1歡迎界面設(shè)計(jì)…………………………………………………………8</p><p> 4.2.2主界面設(shè)計(jì)…………………………………………………………..9</p><p> 第五章 結(jié)論與心得體會(huì)………………………………………………………………19</p><p&
9、gt; 第六章 參考文獻(xiàn)……………………………………………………………………….20</p><p> 第七章 關(guān)鍵代碼…………………………………………………………………………21</p><p> 基于VC++平臺(tái)簡(jiǎn)單數(shù)字圖像處理界面設(shè)計(jì)</p><p> 摘要:該數(shù)字圖像處理界面是基于Microsoft Visual C++ 6.0 MFC多文檔編程的圖
10、像處理界面,實(shí)現(xiàn).bmp格式圖像的瀏覽與編輯,導(dǎo)入和導(dǎo)出,圖像特效顯示,邊緣檢測(cè),旋轉(zhuǎn)和翻轉(zhuǎn)圖片,圖片增強(qiáng)優(yōu)化,以及打印輸出圖片。是一款功能較簡(jiǎn)潔的數(shù)字圖像管理界面,實(shí)現(xiàn)對(duì).bmp格式圖像的操作。該界面包含兩部分:啟動(dòng)界面和主界面。</p><p> BMP文件是Windows操作系統(tǒng)所推薦和支持的圖像文件格式,是一種將內(nèi)存或顯示器的圖像數(shù)據(jù)不經(jīng)過壓縮而直接按位存盤的文件格式,一般來說BMP文件分成4個(gè)部分:位
11、圖頭文件,位圖信息頭,顏色表,位圖數(shù)據(jù).同時(shí)BMP文件文件可以分為DIB格式和DDB格式,其中DIB格式是與設(shè)備無關(guān)的BMP文件,通用性很強(qiáng).Windows支持一些重要的DIB訪問函數(shù),但都沒有封裝到MFC中,這里我們封裝了一個(gè)DIB類,其包含DIB文圖處理所需要的基本成員變量和成員函數(shù),進(jìn)而以該類為基類派生其他類,實(shí)現(xiàn)程序的維護(hù)和移植,從而利用面向?qū)ο蟮姆绞綄?shí)現(xiàn)圖像的可視化編程。</p><p> 關(guān)鍵詞:
12、BMP文件 圖像處理 DIB位圖 界面 </p><p> Abstract:The digital image processing interface is based on Microsoft Visual C + + 6.0 MFC multi-document image processing programming interface, to achieve. Bmp for
13、mat for image browsing and editing, import and export, image effects showed that edge detection, rotate and flip images, pictures enhance the optimization, as well as print output picture. Is a function of the digital im
14、age than the simple management interface, to achieve. Bmp format images of the operation. The interface contains tw</p><p> Key words: BMP file Image processing DIB bitmap Interface</p><p&g
15、t;<b> 1 引言</b></p><p> 數(shù)字圖像處理(Digital Image Processing)又稱為計(jì)算機(jī)圖像處理,它是指將圖像信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)并利用計(jì)算機(jī)對(duì)其進(jìn)行處理的過程。數(shù)字圖像處理最早出現(xiàn)于20世紀(jì)50年代,當(dāng)時(shí)的電子計(jì)算機(jī)已經(jīng)發(fā)展到一定水平,人們開始利用計(jì)算機(jī)來處理圖形和圖像信息。隨著計(jì)算機(jī)的發(fā)展,數(shù)字圖像處理技術(shù)也不斷的進(jìn)步,實(shí)現(xiàn)了對(duì)圖像圖像增強(qiáng)、復(fù)原、
16、編碼、壓縮等,在空間和軍事高科技中扮演越來越重要的角色。</p><p> 隨著數(shù)字化與多媒體時(shí)代的來臨,數(shù)字圖像處理已經(jīng)成為必備的基礎(chǔ)知識(shí)。近幾十年來由于計(jì)算機(jī)技術(shù)的蓬勃發(fā)展,圖像處理技術(shù)也得到了空前的發(fā)展和應(yīng)用。目前,圖像處理技術(shù)已經(jīng)廣泛應(yīng)用于工業(yè)、軍事、醫(yī)學(xué)、交通、農(nóng)業(yè)、天氣預(yù)報(bào)、銀行、超市、重要部門的監(jiān)控報(bào)警系統(tǒng)、可視電話、網(wǎng)絡(luò)傳輸?shù)鹊阮I(lǐng)域,成為各個(gè)學(xué)科學(xué)習(xí)和研究對(duì)象。隨著圖像處理技術(shù)的廣泛應(yīng)用,學(xué)習(xí)和
17、掌握這門科學(xué)顯得格外重要,圖像處理已經(jīng)成為信息技術(shù)相關(guān)領(lǐng)域的核心課程。</p><p> 本課題主要實(shí)現(xiàn)圖像的一些簡(jiǎn)單特效顯示,圖像的旋轉(zhuǎn)和鏡像、圖像的增強(qiáng)處理,圖像灰度變換,圖像邊緣檢測(cè)等。</p><p><b> 1.1基礎(chǔ)知識(shí)</b></p><p> 組成數(shù)字圖像的基本單位是像素(Pixel),也就是說數(shù)字圖像是像素的集合。顯示
18、器在顯示圖像時(shí)采用電子槍從左到右掃描一行,為每個(gè)像素著色,然后從上倒下掃描整個(gè)屏幕的方式,由于人眼的視覺停留,可以顯示出完整的畫面.為了防止閃爍,每秒電子槍要重復(fù)掃描幾十次的掃描過程,人眼感受不到因屏幕刷新也產(chǎn)生的閃爍,這種顯示器稱為位映像設(shè)備。所謂位映像,是指一個(gè)二維的像素矩陣,矩陣的元素值就是像素的灰度值, 而位圖就是采用位映像方法顯示和存儲(chǔ)的圖像。</p><p> 彩色圖像和灰度圖像:灰度圖像是數(shù)字圖像
19、最基本形式,可以從黑白照片數(shù)字化得到或則通過對(duì)彩色圖像去色處理得到,灰度圖像只表示圖像的亮度信息而沒有顏色信息,灰度圖像的每個(gè)像素點(diǎn)上只包含一個(gè)量化的灰度級(jí)(0-255)來表示該點(diǎn)的亮度水平,計(jì)算機(jī)一般用1個(gè)字節(jié)(8個(gè)二進(jìn)制位)來存儲(chǔ)。彩色圖像的數(shù)據(jù)不僅包含亮度信息,還包含顏色信息,圖像中每一個(gè)像素由RGB(紅綠藍(lán))三個(gè)分量組成,計(jì)算機(jī)一般用3個(gè)字節(jié)(24位二進(jìn)制)來存儲(chǔ)像素的顏色信息。</p><p> 圖1
20、.1 BMP圖像文件結(jié)構(gòu)</p><p> 如圖1.1所示BMP文件由文件頭、位圖信息頭、顏色信息和圖形數(shù)據(jù)四部分組成。在編程時(shí)它們以結(jié)構(gòu)體類型在計(jì)算機(jī)中存儲(chǔ)。</p><p> 1、位圖文件頭:主要包含文件類型(必須是0x424D,即字符串“BM”),文件大小以及文件頭到實(shí)際的位圖數(shù)據(jù)的偏移字節(jié)數(shù); </p><p> 2、位圖信息頭:包含圖象的尺寸信息、
21、每個(gè)像素所占位數(shù)(bit)、圖像是否壓縮、圖像所用的顏色數(shù)等信息, 顏色信息包含圖像所用到的顏色表,顯示圖像時(shí)需用到這個(gè)顏色表來生成調(diào)色板;</p><p> 3、調(diào)色板(Palette:調(diào)色板實(shí)際上是一個(gè)數(shù)組存有RGB 信息的表; </p><p> 4、位圖數(shù)據(jù):對(duì)于用到調(diào)色板的位圖,圖像數(shù)據(jù)就是該象素顏在調(diào)色板中的索引值。對(duì)于24位真彩色圖,圖像數(shù)據(jù)就是實(shí)際的R、G、B三個(gè)分量的
22、值。</p><p> 1.2本數(shù)字圖像處理界面處理內(nèi)容介紹</p><p><b> 1.2.1啟動(dòng)界面</b></p><p> 為了追求該圖像處理的界面的美觀性,在設(shè)計(jì)主界面前,先設(shè)計(jì)一個(gè)歡迎界面,即以一個(gè)經(jīng)過photoshop處理過的圖像作為對(duì)話框,在運(yùn)行主界面程序前,先顯示該對(duì)話框。</p><p>&l
23、t;b> 1.2.2主界面</b></p><p> 該數(shù)字圖像處理界面是基于VC++6.0MFC多文檔編程的界面程序,實(shí)現(xiàn)數(shù)字圖像的簡(jiǎn)單查看與編輯操作。主界面主要內(nèi)容有:</p><p> 圖像文件瀏覽:實(shí)現(xiàn)對(duì).bmp格式圖像文件的瀏覽。</p><p> 圖像特效顯示:主要有自上而下掃描顯示,從左至右的滑動(dòng)顯示和漸進(jìn)顯示。</p&
24、gt;<p> 視圖-文檔的設(shè)置:實(shí)現(xiàn)了執(zhí)行操作后新舊圖像在不同視圖中顯示設(shè)置。</p><p> 圖像的灰度變換:包括圖像的二值化,彩色圖像轉(zhuǎn)換灰度圖像,灰度圖像轉(zhuǎn)換8位圖像。</p><p> 圖像的鏡像與旋轉(zhuǎn)變換:包括水平鏡像,垂直鏡像,順時(shí)針旋轉(zhuǎn)90度,逆時(shí)針旋轉(zhuǎn)90度,圖像旋轉(zhuǎn)180度。</p><p> 圖像的增強(qiáng)處理:主要是圖像銳
25、化處理。</p><p> 圖像的邊緣檢測(cè)和形態(tài)學(xué)處理:包括羅伯茨算子邊緣檢測(cè),圖像輪廓提取
26、 </p><p> 該界面主要實(shí)現(xiàn)了.bmp格式圖像的瀏覽、編輯、打印、特效設(shè)置、視圖設(shè)置、變換等幾大功能。</p><p><b> 2 系統(tǒng)
27、需求分析</b></p><p> 需求分析簡(jiǎn)單地說就是分析用戶的需求。需求分析是設(shè)計(jì)數(shù)據(jù)庫(kù)的起點(diǎn),需求分析的結(jié)果是否準(zhǔn)確地反映了用戶的實(shí)際要求,將直接影響到后面各個(gè)階段的設(shè)計(jì),并影響到設(shè)計(jì)結(jié)果是否合理和實(shí)用。</p><p><b> 2.1設(shè)計(jì)要求</b></p><p> 根據(jù)設(shè)計(jì)內(nèi)容,設(shè)計(jì)的主要要求有:(1)設(shè)計(jì)歡迎界
28、面并在程序中實(shí)現(xiàn)歡迎界面先于主界面顯示;(2)實(shí)現(xiàn)主界面的功能設(shè)計(jì): 圖像文件瀏覽(.bmp格式圖像的導(dǎo)入), 圖像特效顯示, 視圖-文檔的設(shè)置, 圖像的灰度變換, 圖像的鏡像與旋轉(zhuǎn)變換, 圖像的增強(qiáng)處理, 圖像的邊緣檢測(cè)和形態(tài)學(xué)處理。</p><p> 2.2系統(tǒng)處理流程分析</p><p> 通過對(duì)系統(tǒng)的組織結(jié)構(gòu)和功能進(jìn)行分析,畫出業(yè)務(wù)流程圖, 它非常易于閱讀和理解,可以幫助我們了
29、解該業(yè)務(wù)的具體處理過程,發(fā)現(xiàn)和處理系統(tǒng)的調(diào)查工作中的錯(cuò)誤和疏漏,修改和刪除原系統(tǒng)的不合理部分。</p><p> 通過對(duì)系統(tǒng)的需求分析,系統(tǒng)的基本功能已經(jīng)確定。整個(gè)系統(tǒng)各個(gè)模塊的業(yè)務(wù)流,如圖2.1所示:</p><p><b> 圖2.1業(yè)務(wù)流程圖</b></p><p><b> 3 系統(tǒng)設(shè)計(jì)</b></p&
30、gt;<p> 本階段的主要任務(wù)是設(shè)計(jì)程序的體系結(jié)構(gòu),確定程序組成模塊,以及各模塊之間的關(guān)系。</p><p> 3.1系統(tǒng)的設(shè)計(jì)語(yǔ)言</p><p> 數(shù)字圖像處理系統(tǒng)采用Microsoft Visual C++ 6.0 MFC作為開發(fā)平臺(tái)。</p><p> 3.2系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)</p><p> 3.2.1 系
31、統(tǒng)總體結(jié)構(gòu)圖</p><p> 數(shù)字圖像處理界面的總體結(jié)構(gòu)設(shè)計(jì)如圖3.1所示:</p><p> 圖 3.1 數(shù)字圖像處理界面總體結(jié)構(gòu)設(shè)計(jì)</p><p> 3.2.2 系統(tǒng)模塊設(shè)計(jì)</p><p> 模塊設(shè)計(jì)是對(duì)處理流程圖的注釋性書面文件,以幫助程序設(shè)計(jì)人員進(jìn)一步了解模塊的功能和設(shè)計(jì)要求數(shù)字圖像處理系統(tǒng)主要分為兩大模塊,即歡迎界面和
32、主界面,其中主界面又分為文件操作模塊,特效顯示模塊,圖像鏡像與旋轉(zhuǎn)模塊,圖像增強(qiáng)處理模塊,圖像邊緣檢測(cè)和形態(tài)學(xué)處理模塊。</p><p> 具體的模塊設(shè)計(jì)如下:</p><p> 1.歡迎界面:該模塊實(shí)現(xiàn)以一個(gè)經(jīng)過photoshop處理過的圖像作為對(duì)話框,在運(yùn)行主界面程序前,先顯示該對(duì)話框。</p><p><b> 2.主界面:</b>
33、</p><p> (1) 文件操作模塊: 該模塊主要實(shí)現(xiàn)圖像的文件操作,包括新建操作,打開操作.保存操作,另存為操作,關(guān)閉操作,打印操作等。</p><p> (2) 特效顯示模塊:該模塊實(shí)現(xiàn)了圖像在視圖中的顯示方式,包括自上而下掃描顯示,從左至右的滑動(dòng)顯示和漸進(jìn)顯示。</p><p> (3) 圖像鏡像與旋轉(zhuǎn)模塊:該模塊實(shí)現(xiàn)了圖像的鏡像變換和圖像旋轉(zhuǎn)顯示,
34、包括水平鏡像,垂直鏡像,順時(shí)針旋轉(zhuǎn)90度,逆時(shí)針旋轉(zhuǎn)90度,圖像旋轉(zhuǎn)180度。</p><p> (4) 圖像增強(qiáng)處理模塊:該模塊主要實(shí)現(xiàn)了圖像銳化效果。</p><p> (5) 圖像邊緣檢測(cè)模塊:該模塊實(shí)現(xiàn)了圖像邊緣輪廓檢測(cè), 包括羅伯茨算子邊緣檢測(cè),圖像輪廓提取。</p><p> (6)圖像灰度變換模塊:該模塊實(shí)現(xiàn)了彩色圖像變灰度格式,灰度圖像變彩色格
35、式和二值化操作。</p><p><b> 4 系統(tǒng)詳細(xì)設(shè)計(jì)</b></p><p><b> 4.1基類的設(shè)計(jì)</b></p><p> BMP文件是Windows操作系統(tǒng)所推薦和支持的圖像文件格式,是一種將內(nèi)存或顯示器的圖像數(shù)據(jù)不經(jīng)過壓縮而直接按位存盤的文件格式, 同時(shí)BMP文件可以分為DIB格式和DDB格式,其
36、中DIB格式是與設(shè)備無關(guān)的BMP文件,通用性很強(qiáng)。Windows支持一些重要的DIB訪問函數(shù),但都沒有封裝到MFC中,這里我們封裝了一個(gè)DIB類,其包含DIB位圖處理所需要的基本成員變量和成員函數(shù),進(jìn)而以該類為基類派生其他類,實(shí)現(xiàn)程序的維護(hù)和移植。在這里我們命名這個(gè)基類為ImgCenterDib,各種算法的實(shí)現(xiàn)都是以ImgCenterDib類為基類派生出來。根據(jù)前面預(yù)備知識(shí)和程序編寫的需要,這里定義ImgCenterDib類代碼如下:&
37、lt;/p><p> class ImgCenterDib</p><p> { public:</p><p> unsigned char * m_pImgData; //圖像數(shù)據(jù)指針</p><p> LPRGBQUAD m_lpColorTable; //圖像顏色表指針</p><p> int
38、m_nBitCount; //每像素占的位數(shù)</p><p><b> private:</b></p><p> LPBYTE m_lpDib; //指向DIB的指針</p><p> HPALETTE m_hPalette; //邏輯調(diào)色板句柄</p><p> int m_nColorTableLength
39、; //顏色表長(zhǎng)度(多少個(gè)表項(xiàng))</p><p> protected:</p><p> int m_imgWidth; //圖像的寬,像素為單位</p><p> int m_imgHeight; //圖像的高,像素為單位</p><p> LPBITMAPINFOHEADER m_lpBmpInfoHead; //圖像信息頭指針
40、</p><p><b> public:</b></p><p> ImgCenterDib();//不帶參數(shù)的構(gòu)造函數(shù)</p><p> ImgCenterDib(CSize size, int nBitCount, LPRGBQUAD lpColorTable, </p><p> unsigned cha
41、r *pImgData); //帶參數(shù)的構(gòu)造函數(shù)</p><p> ~ImgCenterDib();//析構(gòu)函數(shù)</p><p> CSize GetDimensions();//獲取DIB的尺寸(寬高)</p><p> BOOL Read(LPCTSTR lpszPathName); //DIB讀函數(shù)</p><p> BOOL
42、Write(LPCTSTR lpszPathName); //DIB寫函數(shù)</p><p> BOOL Draw(CDC* pDC, CPoint origin, CSize size); //顯示DIB</p><p> void ReplaceDib(CSize size, int nBitCount, LPRGBQUAD lpColorTable,</p><
43、;p> unsigned char *pImgData); //用新的數(shù)據(jù)替換DIB</p><p> int ComputeColorTabalLength(int nBitCount); //計(jì)算顏色表的長(zhǎng)度</p><p><b> private:</b></p><p> void MakePalette();//創(chuàng)建邏
44、輯調(diào)色板</p><p> void Empty();//清理空間 };</p><p> 同時(shí)將各個(gè)模塊函數(shù)封裝起來成為一個(gè)類,這些類都以ImgCenterDib類共有繼承,在主程序中調(diào)用,減少代碼的重復(fù)性,提高利用率。派生關(guān)系如圖4.1:</p><p> 圖4.1 基類與派生類結(jié)構(gòu)關(guān)系圖</p><p> 4.2 各模塊的
45、詳細(xì)設(shè)計(jì)</p><p> 4.2.1歡迎界面設(shè)計(jì)</p><p> 用photoshop軟件根據(jù)內(nèi)容的需要處理一張圖片,并保存為.bmp格式,然后在Microsoft Visual C++ 6.0中載入該圖片。</p><p> 設(shè)計(jì)思想:歡迎界面在程序運(yùn)行時(shí)是以圖形式顯現(xiàn)的,這里要封裝一個(gè)位圖的類Cbtmap(派生于位圖類CBitmap),獲取圖像的寬,高
46、,創(chuàng)建邏輯調(diào)色板等等;之后創(chuàng)建一個(gè)啟動(dòng)窗口類,名為Csplash(派生于窗口基類CWnd),這兩個(gè)類均封裝了一些函數(shù),它們之間通過參數(shù)傳遞和函數(shù)調(diào)用,在主程序代碼中聲明Splash類的對(duì)象,調(diào)用Csplash類中函數(shù)從而實(shí)現(xiàn)設(shè)計(jì)目標(biāo)。</p><p> 啟動(dòng)窗口類的主要代碼如下:</p><p> class Csplash : public CWnd{ public:
47、0; Csplash();//構(gòu)造函數(shù) public: void Create( UINT nBitmapID );//調(diào)用CreateEx創(chuàng)建窗口 public: virtual ~Csplash();//析構(gòu)函數(shù) protected: //{{AFX_MSG(CWzd
48、Splash) afx_msg void OnPaint(); //}}AFX_MSG DECLARE_MESSAGE_MAP() private: Cbtmap m_bitmap;//私有成員變量};</p><p> 位圖類的主要代碼如下:<
49、/p><p> class Cbtmap : public CBitmap{ public: DECLARE_DYNAMIC(Cbtmap) Cbtmap(); void LoadBitmapEx(UINT nID, BOOL bIconBkgrd ); CPalette *GetPalette(){ret
50、urn m_pPalette;}; public: virtual ~Cbtmap(); int m_Width; int m_Height; private: CPalette *m_pPalette; };</p><p> 在CPicture_sysView::C
51、Picture_sysView()函數(shù)中加入如下代碼:</p><p> Csplash wndSplash; //聲明Splash類的對(duì)象wndSplash.Create(IDB_WZDSPLASH); //調(diào)用Create()wndSplash.UpdateWindow();Sleep(2000);//定時(shí)2秒</p><p> 程序運(yùn)行截圖如下:(歡迎界面)</p&
52、gt;<p> 4.2.2主界面設(shè)計(jì)</p><p><b> ?。?)文件操作模塊</b></p><p> 文件操作模塊是整個(gè)系統(tǒng)中最基本的組成成分,該模塊主要實(shí)現(xiàn)圖像的文件操作,包括新建操作,打開操作.保存操作,另存為操作,關(guān)閉操作,打印操作。</p><p> 通過對(duì)用戶的需求分析得出文件操作模塊的功能結(jié)構(gòu)圖,文件操
53、作模塊的功能結(jié)構(gòu)圖如圖4.2所示: </p><p> 圖 4.2 文件操作模塊功能結(jié)構(gòu)圖</p><p> 在文件操作模塊,新建操作,關(guān)閉操作和圖像打印操作可以直接調(diào)用系統(tǒng)提供的不需要重載的函數(shù)很容易就實(shí)現(xiàn),其他操作都需要將文件下的.bmp格式的圖像數(shù)據(jù)讀進(jìn)計(jì)算機(jī)內(nèi)存中生成DIB, 存放在m_lpDib(指向DIB的指針)所指向的緩沖區(qū)。</p><p>
54、文件打開操作的偽代碼描述如下所示: 文件的另存為操作偽代碼如下:</p><p><b> 功能截圖如下:</b></p><p><b> 菜單欄:</b></p><p><b> 另存為操作:</b></p><p><b> ?。?)特效顯示模塊<
55、/b></p><p> 特效顯示模塊實(shí)現(xiàn)了圖像在視圖中的顯示方式,包括自上而下掃描顯示,從左至右的滑動(dòng)顯示和漸進(jìn)顯示。經(jīng)過分析圖像特效顯示功能,得出圖像處理的功能模塊圖如圖4.3所示:</p><p> 圖4.3特效顯示模塊功能結(jié)構(gòu)圖</p><p> 特效顯示類SpecialEffectShow是在基類ImgCenterDib基礎(chǔ)上派生出來的,特效顯
56、示類設(shè)計(jì)代碼如下:</p><p> class SpecialEffectShow : public ImgCenterDib </p><p> { public:</p><p> SpecialEffectShow(CSize size, int nBitCount, </p><p> LPRGBQUAD lpColo
57、rTable, unsigned char *pImgData); </p><p> //帶參數(shù)的構(gòu)造函數(shù) void Scan(CDC*pDC);//掃描特效顯示</p><p> void Slide(CDC*pDC);//滑動(dòng)特效顯示</p><p> void FadeIn(CDC * pDC);//漸進(jìn)特效顯示</p><
58、p> virtual ~SpecialEffectShow();</p><p> protected:</p><p> SpecialEffectShow();//防止從外部訪問無參數(shù)的構(gòu)造函數(shù)</p><p><b> };</b></p><p> 利用類向?qū)?,給相應(yīng)的控件定義消息處理函數(shù),如下表
59、</p><p> 表1 主要的消息處理函數(shù)表</p><p> 在picture_sysView.cpp重載消息處理函數(shù),這三個(gè)消息處理函數(shù)代碼基本相似,共同操作偽代碼如下:</p><p><b> 功能截圖如下:</b></p><p> 掃描顯示:
60、 滑動(dòng)顯示:</p><p><b> 漸進(jìn)顯示</b></p><p> ?。?)圖像灰度變換模塊</p><p> 圖像灰度變換模塊實(shí)現(xiàn)了彩色圖像變灰度格式,灰度圖像變彩色格式和二值化操作。經(jīng)過分析圖像灰度變換功能,得出圖像處理的功能模塊圖如圖4.4所示:</p><p> 圖4.4 灰度變換模塊功能結(jié)構(gòu)圖&l
61、t;/p><p> 灰度變換類GrayTrans是在基類ImgCenterDib基礎(chǔ)上派生出來的, 灰度變換類設(shè)計(jì)代碼如下:</p><p> class GrayTrans:public ImgCenterDib</p><p><b> {</b></p><p><b> public:</b&
62、gt;</p><p> int m_nBitCountOut; //輸出圖像每像素位數(shù)</p><p> unsigned char * m_pImgDataOut; //輸出圖像位圖數(shù)據(jù)指針</p><p> LPRGBQUAD m_lpColorTableOut; //輸出圖像顏色表</p><p><b> priv
63、ate:</b></p><p> int m_imgWidthOut; //圖像的寬,像素為單位</p><p> int m_imgHeightOut; //圖像的高 </p><p> int m_nColorTableLengthOut; //輸出圖像顏色表長(zhǎng)度</p><p><b> public:&
64、lt;/b></p><p> GrayTrans();//不帶參數(shù)的構(gòu)造函數(shù)</p><p> GrayTrans(CSize size, int nBitCount, LPRGBQUAD lpColorTable, </p><p> unsigned char *pImgData); //帶參數(shù)的構(gòu)造函數(shù)</p><p>
65、 ~GrayTrans();</p><p> CSize GetDimensions();//以像素為單位返回輸出圖像的寬和高</p><p> void ColorToGray();//彩色變灰度格式</p><p> void GrayToColor();//灰度變彩色格式</p><p> void Binary(int t
66、hreshold=128); //二值化</p><p><b> };</b></p><p> 利用類向?qū)Вo相應(yīng)的控件定義消息處理函數(shù),如下表</p><p> 表2 主要的消息處理函數(shù)表</p><p> 在picture_sysView.cpp重載消息處理函數(shù),這三個(gè)消息處理函數(shù)代碼基本相似,共同操作
67、偽代碼如下:</p><p><b> 功能截圖如下:</b></p><p> 彩色變灰度格式: </p><p><b> 灰度變彩色格式:</b></p><p><b> 二值化:</b></p><p&
68、gt; (4)圖像鏡像與旋轉(zhuǎn)模塊</p><p> 圖像鏡像與旋轉(zhuǎn)模塊實(shí)現(xiàn)了圖像的鏡像變換和圖像旋轉(zhuǎn)顯示,包括水平鏡像,垂直鏡像,順時(shí)針旋轉(zhuǎn)90度,逆時(shí)針旋轉(zhuǎn)90度,圖像旋轉(zhuǎn)180度。其功能模塊圖如圖4.5所示:</p><p><b> 圖</b></p><p> 4.5 圖像鏡像與旋轉(zhuǎn)模塊功能結(jié)構(gòu)圖</p><
69、;p> 鏡像與旋轉(zhuǎn)類GeometryTrans是在基類ImgCenterDib基礎(chǔ)上派生出來的。該類與灰度變換類GrayTrans有相同的成員變量,其成員函數(shù)除CSize GetDimensions()函數(shù)外變?yōu)?</p><p> GeometryTrans();</p><p> GeometryTrans(CSize size, int nBitCount, LPRGBQ
70、UAD lpColorTable, unsigned char *pImgData); //帶參數(shù)的構(gòu)造函數(shù)</p><p> ~GeometryTrans();</p><p> void Move(int offsetX, int offsetY); //平移</p><p> void MirrorHori();//水平鏡像</p><
71、;p> void MirrorVerti();//垂直鏡像</p><p> void Clockwise90();//順時(shí)針旋轉(zhuǎn)90度</p><p> void Anticlockwise90();//逆時(shí)針旋轉(zhuǎn)90度</p><p> void Rotate180();//旋轉(zhuǎn)180</p><p> 利用類向?qū)?,給相應(yīng)
72、的控件定義消息處理函數(shù),如下表</p><p> 表3 主要的消息處理函數(shù)表</p><p> 在picture_sysView.cpp重載消息處理函數(shù),這五個(gè)消息處理函數(shù)代碼基本相似,共同操作偽代碼如下:</p><p><b> 功能截圖如下:</b></p><p> 水平鏡像:
73、 垂直鏡像:</p><p> 順時(shí)針旋轉(zhuǎn)90度: 逆時(shí)針旋轉(zhuǎn)90度: </p><p><b> 旋轉(zhuǎn)180度:</b></p><p> (5)圖像增強(qiáng)處理模塊</p><p> 圖像增強(qiáng)處理模塊主要實(shí)現(xiàn)了圖像銳化效果,是模糊的圖像變得更加清晰,顏
74、色變得鮮明突出,更適合人眼觀察和識(shí)別。</p><p> 圖像增強(qiáng)處理類Pic_Enhance是在基類ImgCenterDib基礎(chǔ)上派生出來的, 圖像增強(qiáng)處理類設(shè)計(jì)代碼如下:</p><p> class Pic_Enhance:public ImgCenterDib </p><p> { public:</p><p> i
75、nt m_nBitCountOut;</p><p> unsigned char * m_pImgDataOut;</p><p> LPRGBQUAD m_lpColorTableOut;</p><p> int m_nColorTableLengthOut;</p><p><b> public:</b>
76、;</p><p> Pic_Enhance();</p><p> Pic_Enhance(CSize size, int nBitCount, LPRGBQUAD lpColorTable, unsigned char *pImgData);</p><p> ~Pic_Enhance();</p><p> void GradS
77、harp(BYTE bThre); //梯度銳化</p><p><b> };</b></p><p> 利用類向?qū)?,給相應(yīng)的控件定義消息處理函數(shù),如下表</p><p> 表4 主要的消息處理函數(shù)表</p><p> 在picture_sysView.cpp重載消息處理函數(shù),偽代碼敘述如下:</p&g
78、t;<p><b> 功能截圖如下:</b></p><p> (6) 圖像邊緣檢測(cè)模塊</p><p> 圖像邊緣檢測(cè)模塊實(shí)現(xiàn)了圖像邊緣輪廓檢測(cè), 包括羅伯茨算子邊緣檢測(cè),圖像輪廓提取,其功能模塊圖如圖4.6所示:</p><p> 圖4.6圖像邊緣檢測(cè)模塊功能結(jié)構(gòu)圖</p><p> 圖像邊緣
79、檢測(cè)類Pic_Segment是在基類ImgCenterDib基礎(chǔ)上派生出來的。該類與灰度變換類GrayTrans有相同的成員變量,其成員函數(shù)除CSize GetDimensions()函數(shù)相同,其他的成員函數(shù)如下:</p><p> Pic_Segment();</p><p> Pic_Segment(CSize size, int nBitCount, LPRGBQUAD lpCo
80、lorTable, </p><p> unsigned char *pImgData); //帶參數(shù)的構(gòu)造函數(shù)</p><p> ~Pic_Segment();</p><p> void Roberts();//Roberts算</p><p> void ContourExtract();//輪廓提取</p>&l
81、t;p> 利用類向?qū)?,給相應(yīng)的控件定義消息處理函數(shù),如下表</p><p> 表5 主要的消息處理函數(shù)表</p><p> 序號(hào) ID號(hào) 消息處理函數(shù) 函數(shù)功能</p><p> 1 ID_Roberts On Roberts 羅伯茨算子</p><p> 2 ID_Outline
82、 On Outline 輪廓提取</p><p> 在picture_sysView.cpp重載消息處理函數(shù),這2個(gè)消息處理函數(shù)代碼基本相似,共同操作偽代碼敘述如下:</p><p><b> 功能截圖如下:</b></p><p><b> 羅伯茨算子:</b></p><p>&
83、lt;b> 輪廓提取:</b></p><p><b> 5 結(jié)論與心得體會(huì)</b></p><p> 這次課程設(shè)計(jì)是以Microsoft Visual C++ 6.0 文檔視圖編程為基礎(chǔ)實(shí)現(xiàn)的,這就要求對(duì)MFC文檔視圖操作有一定的了解和操作編程能力,在做課程設(shè)計(jì)前,我查閱了該方面相關(guān)的書籍,對(duì)我完成歡迎界面和主界面的設(shè)計(jì)有很大的幫助。編程中在
84、不同類之間函數(shù)參數(shù)和變量的傳遞和函數(shù)的調(diào)用出了問題,但是理清函數(shù)的編譯編譯順序和變量的類型這些問題都逐一解決,同時(shí)增強(qiáng)了對(duì)工具欄,菜單欄的手動(dòng)操作能力。</p><p> 另外一點(diǎn)是對(duì).bmp圖像處理的實(shí)現(xiàn),數(shù)字圖像處理關(guān)鍵是算法的設(shè)計(jì)思想和算法的實(shí)現(xiàn),通過這次課程設(shè)計(jì),使我了解到了算法設(shè)計(jì)的重要性(算法設(shè)計(jì)是編程實(shí)現(xiàn)的前提),提高了自己動(dòng)手編程的能力和汲取一些先進(jìn)算法的思想,這對(duì)以后圖像處理的深入學(xué)習(xí)大有幫助
85、。</p><p> 該數(shù)字圖像界面是基于Microsoft Visual C++ 6.0的MFC多文檔實(shí)現(xiàn)的,在界面設(shè)計(jì)上看起來過于單調(diào),界面設(shè)計(jì)簡(jiǎn)單,但易于操作; Visual C++ 6.0的MFC對(duì)話框的編程是界面看起來更加美觀,更接近軟件系統(tǒng),給人不一樣的感覺,提高了工具欄和菜單欄的編程實(shí)現(xiàn)難度和設(shè)計(jì)的復(fù)雜度,這是今后學(xué)習(xí)的方向。</p><p><b> 6.參考
86、文獻(xiàn)</b></p><p> [1] 鄭莉 董淵 張瑞豐, C++語(yǔ)言程序設(shè)計(jì)(第三版), 清華大學(xué)出版社 2003</p><p> [2]David J.Kruglinski(美)等, Visual C++ 6.0技術(shù)內(nèi)幕,北京希望電子出版社,2002</p><p> [3]謝鳳英 趙丹培, Visual C++ 數(shù)字圖像處理,電子工業(yè)
87、出版社,2008</p><p> [4]求是科技 張宏林,精通Visual C++ 數(shù)字圖像處理典型算法及實(shí)現(xiàn),人民郵電出版社,2008</p><p> [5]劉銳寧 宋坤等, Visual C++從入門到精通,清華大學(xué)出版社,2008</p><p><b> 關(guān)鍵源代碼:</b></p><p> //
88、/////////////////////ImgCenterDib.cpp////////////////////////////////////</p><p> ImgCenterDib::ImgCenterDib() //缺省變量的構(gòu)造函數(shù)</p><p> { m_lpDib=NULL;//初始化m_lpDib為空。</p><p> m_lpCo
89、lorTable=NULL;//顏色表指針為空</p><p> m_pImgData=NULL; // 圖像數(shù)據(jù)指針為空</p><p> m_lpBmpInfoHead=NULL; // 圖像信息頭指針為空</p><p> m_hPalette = NULL;//調(diào)色板為空</p><p><b> }</b
90、></p><p> ImgCenterDib::ImgCenterDib(CSize size, int nBitCount, LPRGBQUAD lpColorTable,</p><p> unsigned char *pImgData)</p><p> { if(pImgData==NULL){//沒有位圖數(shù)據(jù)傳入,DIB為空</p&g
91、t;<p> m_lpDib=NULL;</p><p> m_lpColorTable=NULL;</p><p> m_pImgData=NULL; </p><p> m_lpBmpInfoHead=NULL; </p><p> m_hPalette = NULL;</p><p>&l
92、t;b> }</b></p><p><b> else{</b></p><p> m_imgWidth=size.cx;</p><p> m_imgHeight=size.cy;</p><p> m_nBitCount=nBitCount;</p><p>
93、m_nColorTableLength=ComputeColorTabalLength(nBitCount);//根據(jù)每像素位數(shù),計(jì)算顏色表長(zhǎng)度</p><p> int lineByte=(m_imgWidth*nBitCount/8+3)/4*4;</p><p> int imgBufSize=m_imgHeight*lineByte;//位圖數(shù)據(jù)緩沖區(qū)的大?。▓D像大?。?lt;
94、/p><p> m_lpDib=new BYTE [sizeof(BITMAPINFOHEADER) + </p><p> sizeof(RGBQUAD) * m_nColorTableLength+imgBufSize];//為m_lpDib一次性分配內(nèi)存,生成DIB結(jié)構(gòu)</p><p> //填寫B(tài)ITMAPINFOHEADER結(jié)構(gòu)</p>&
95、lt;p> m_lpBmpInfoHead = (LPBITMAPINFOHEADER) m_lpDib;</p><p> m_lpBmpInfoHead->biSize = sizeof(BITMAPINFOHEADER);</p><p> m_lpBmpInfoHead->biWidth = m_imgWidth;</p><p>
96、 m_lpBmpInfoHead->biHeight = m_imgHeight;</p><p> m_lpBmpInfoHead->biPlanes = 1;</p><p> m_lpBmpInfoHead->biBitCount = m_nBitCount;</p><p> m_lpBmpInfoHead->biCompres
97、sion = BI_RGB;</p><p> m_lpBmpInfoHead->biSizeImage = 0;</p><p> m_lpBmpInfoHead->biXPelsPerMeter = 0;</p><p> m_lpBmpInfoHead->biYPelsPerMeter = 0;</p><p>
98、 m_lpBmpInfoHead->biClrUsed = m_nColorTableLength;</p><p> m_lpBmpInfoHead->biClrImportant = m_nColorTableLength;</p><p> m_hPalette = NULL;</p><p> if(m_nColorTableLength
99、!=0){ //若有顏色表,則將顏色表拷貝進(jìn)DIB的顏色表位置</p><p> m_lpColorTable=(LPRGBQUAD)(m_lpDib+sizeof(BITMAPINFOHEADER));</p><p> memcpy(m_lpColorTable,lpColorTable,</p><p> sizeof(RGBQUAD) * m_nCol
100、orTableLength);//顏色表拷貝</p><p> MakePalette();//創(chuàng)建邏輯調(diào)色板</p><p><b> }</b></p><p> m_pImgData = (LPBYTE)m_lpDib+sizeof(BITMAPINFOHEADER)+</p><p> sizeof(R
101、GBQUAD) * m_nColorTableLength;//用m_pImgData指向DIB位圖數(shù)據(jù)起始位置</p><p> memcpy(m_pImgData,pImgData,imgBufSize);//拷貝圖像數(shù)據(jù)進(jìn)DIB位圖數(shù)據(jù)區(qū)</p><p><b> }</b></p><p><b> }</b>
102、;</p><p> ImgCenterDib::~ImgCenterDib()//析構(gòu)函數(shù),釋放資源</p><p> {if(m_lpDib != NULL) </p><p> delete [] m_lpDib; </p><p> if(m_hPalette != NULL)</p><p> ::
103、DeleteObject(m_hPalette);//如果有調(diào)色板,釋放調(diào)色板</p><p><b> }</b></p><p> BOOL ImgCenterDib::Draw(CDC* pDC, CPoint origin, CSize size)//顯示DIB位圖</p><p> { HPALETTE hOldPal=NUL
104、L;//舊的調(diào)色板句柄</p><p> if(m_lpDib == NULL) return FALSE;</p><p> if(m_hPalette != NULL)</p><p> {hOldPal=::SelectPalette(pDC->GetSafeHdc(), m_hPalette, TRUE);}</p><p&g
105、t; pDC->SetStretchBltMode(COLORONCOLOR);//設(shè)置位圖伸縮模式</p><p> ::StretchDIBits(pDC->GetSafeHdc(), origin.x, origin.y, size.cx, size.cy,</p><p> 0, 0, m_lpBmpInfoHead->biWidth, m_lpBmpInf
106、oHead->biHeight,m_pImgData,</p><p> (LPBITMAPINFO) m_lpBmpInfoHead, DIB_RGB_COLORS, SRCCOPY);//將DIB在pDC所指向的設(shè)備上進(jìn)行顯示</p><p> if(hOldPal!=NULL)</p><p> ::SelectPalette(pDC->Ge
107、tSafeHdc(), hOldPal, TRUE);//恢復(fù)舊的調(diào)色板</p><p> return TRUE;</p><p><b> }</b></p><p> BOOL ImgCenterDib::Read(LPCTSTR lpszPathName)//讀入bmp位圖</p><p> { CF
108、ile file;</p><p> if (!file.Open(lpszPathName, CFile::modeRead | CFile::shareDenyWrite))</p><p> return FALSE;</p><p> BITMAPFILEHEADER bmfh;</p><p> try { Empty();
109、//清理空間</p><p> int nCount=file.Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));//讀取BITMAPFILEHEADER結(jié)構(gòu)到變量bmfh中</p><p> if(nCount != sizeof(BITMAPFILEHEADER)) {</p><p> throw ne
110、w CException;}</p><p> if(bmfh.bfType != 0x4d42) {</p><p> throw new CException;</p><p><b> }</b></p><p> if(m_lpDib!=NULL)</p><p> delete
111、 []m_lpDib;</p><p> m_lpDib=new BYTE[file.GetLength() -sizeof(BITMAPFILEHEADER)];</p><p> file.Read(m_lpDib, file.GetLength() -sizeof(BITMAPFILEHEADER));</p><p> m_lpBmpInfoHead
112、= (LPBITMAPINFOHEADER)m_lpDib;</p><p> m_imgWidth=m_lpBmpInfoHead->biWidth;//為成員變量賦值</p><p> m_imgHeight=m_lpBmpInfoHead->biHeight;</p><p> m_nBitCount=m_lpBmpInfoHead->
113、biBitCount; </p><p> m_nColorTableLength=</p><p> ComputeColorTabalLength(m_lpBmpInfoHead->biBitCount);//計(jì)算顏色表長(zhǎng)度</p><p> m_hPalette = NULL;//生成邏輯調(diào)色板</p><p> if(m
114、_nColorTableLength!=0){</p><p> m_lpColorTable=(LPRGBQUAD)(m_lpDib+sizeof(BITMAPINFOHEADER));</p><p> MakePalette();</p><p><b> }</b></p><p> m_pImgData
115、 = (LPBYTE)m_lpDib+sizeof(BITMAPINFOHEADER) +</p><p> sizeof(RGBQUAD) * m_nColorTableLength;</p><p><b> }</b></p><p> catch(CException* pe) {</p><p> Af
116、xMessageBox("Read error");</p><p> pe->Delete();</p><p> return FALSE;}</p><p> return TRUE;</p><p><b> }</b></p><p> BOOL Im
117、gCenterDib::Write(LPCTSTR lpszPathName)//DIB數(shù)據(jù)存盤</p><p> { CFile file;</p><p> if (!file.Open(lpszPathName, CFile::modeCreate | CFile::modeReadWrite </p><p> | CFile::shareExcl
118、usive))</p><p> return FALSE;</p><p> BITMAPFILEHEADER bmfh;//填寫文件頭結(jié)構(gòu)</p><p> bmfh.bfType = 0x4d42; // 'BM'</p><p> bmfh.bfSize = 0;</p><p>
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 圖像處理課程設(shè)計(jì)報(bào)告--基于vc++ 的簡(jiǎn)單圖像處理
- 基于vc數(shù)字圖像處理課程設(shè)計(jì)說明書
- 數(shù)字圖像處理-圖像縮放的vc++實(shí)現(xiàn)
- vc++課程設(shè)計(jì)報(bào)告
- vc++課程設(shè)計(jì)---簡(jiǎn)單計(jì)算器的設(shè)計(jì)
- vc++課程設(shè)計(jì)--基于mfc的模擬時(shí)鐘
- vc++軟件課程設(shè)計(jì)報(bào)告
- vc++庫(kù)函數(shù)課程設(shè)計(jì)
- 數(shù)字圖像處理課程設(shè)計(jì)--基于matlab的數(shù)字圖像處理
- vc++課程設(shè)計(jì)報(bào)告--簡(jiǎn)單科學(xué)計(jì)算器設(shè)計(jì)
- 數(shù)字圖像處理課程設(shè)計(jì)--實(shí)現(xiàn)簡(jiǎn)單的數(shù)字圖像處理功能
- 數(shù)字圖像處理課程設(shè)計(jì)--基于matlab的數(shù)字圖像處理
- 基于VC++的數(shù)字圖像處理系統(tǒng)的開發(fā)及算法研究.pdf
- vc++課程設(shè)計(jì)報(bào)告--對(duì)抗游戲
- vc++網(wǎng)絡(luò)聊天軟件課程設(shè)計(jì)
- vc++課程設(shè)計(jì)報(bào)告----對(duì)抗游戲
- vc++課程設(shè)計(jì)-- 餐飲管理系統(tǒng)
- vc++課程設(shè)計(jì)--工資管理
- vc++課程設(shè)計(jì)--工資管理
- 基于VC++的圖像修復(fù)系統(tǒng)設(shè)計(jì).pdf
評(píng)論
0/150
提交評(píng)論