版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、數(shù)字圖像處理的VC編程基礎(chǔ)(jch)一、WINDOWS程序設(shè)計(jì)基礎(chǔ)知識WINDOWS的編程模式消息(xio xi)驅(qū)動(dòng)、事件觸發(fā)抽象的圖表設(shè)備接口(GDI)面向?qū)ο蟮馁Y源編輯動(dòng)態(tài)鏈接(DLL)功能強(qiáng)大的APIWINDOWS程序的基本框架程序入口點(diǎn):WinMain基于窗口的編程核心部分:窗口過程共三十二頁一個(gè)簡單的例子(hellowin)的剖析建立一個(gè)視窗首先需要注冊一個(gè)視窗類別,那需要一個(gè)視窗訊息處理程序來處理視窗訊息。處理視窗訊息對每個(gè)Windows程序都帶來了些負(fù)擔(dān)。例所示的HELLOWIN程序中整個(gè)做的事情差不多就是料理這些(zhxi)事情。實(shí)際上,每一個(gè)Windows程序碼中都包括HE
2、LLOWIN.C程序的大部分。沒人能真正記住此程序的全部寫法;通常,Windows程序?qū)懽髡咴陂_始寫一個(gè)新程序時(shí)總是會(huì)復(fù)制一個(gè)現(xiàn)有的程序,然後再做相應(yīng)的修改。共三十二頁Windows程序的生與死(窗口的誕生和死亡)1、程序初始化,調(diào)用CreateWindow,為程序建立一個(gè)窗口(當(dāng)然,之前必須先把窗口的屬性配置好),作為程序展現(xiàn)的平臺。CreateWindow調(diào)用后產(chǎn)生一個(gè)稱作WM_CREATE的消息給窗口過程,后者可作一些操作。2、程序在生存期間,不斷利用(lyng)GetMessage從消息隊(duì)列中抓取消息(填入MSG結(jié)構(gòu)體中),直到遇到消息WM_QUIT,此時(shí)GetMessage傳回0結(jié)束
3、while循環(huán)進(jìn)而結(jié)束整個(gè)程序。3、DispatchMessage通過Windows USER模塊的協(xié)助與監(jiān)督,把消息分派至窗口函數(shù)。4、不斷進(jìn)行2和3的操作。5、當(dāng)用戶按下Close選項(xiàng)時(shí),系統(tǒng)發(fā)出WM_CLOSE,通常應(yīng)用程序的窗口不理此消息,由DefWindowProc共三十二頁處理。6、DefWindowProc收到WM_CLOSE消息后,調(diào)用DestroyWindow清除窗口(chungku),同時(shí)發(fā)出WM_DESTROY,7、一般情況下,程序接到WM_DESTROY后,調(diào)用PostQuitMessage。8、PostQuitMessage送出WM_QUIT消息,讓消息循環(huán)中的Get
4、Message函數(shù)得到返回值0,從而結(jié)束消息循環(huán)。共三十二頁編寫WINDOWS程序的方法:利用Win32 API來編寫應(yīng)用程序使用MFC來編寫應(yīng)用程序使用向?qū)删唧w框架,使用MFC來寫應(yīng)用程序使用向?qū)删唧w框架,使用MFC來寫應(yīng)用程序1、MFC:Microsoft 的Windows應(yīng)用程序接口。封裝了大多數(shù)的Win32API函數(shù),并使用和Win32 API相同的名稱,使用編程方便。2、用AppWizard生成程序框架3、應(yīng)用程序包含的基本元素:文檔類、視圖類、主邊框窗口類、子邊框窗口類、應(yīng)用程序類4、應(yīng)用程序的控制流程:MFC程序生成了一個(gè)應(yīng)用程序類的全局對象,應(yīng)用程序類中有兩個(gè)虛函數(shù)In
5、itApplication和InitInstance負(fù)責(zé)程序的初始化,即注冊窗口類、生成窗口、運(yùn)行(ynxng)消息循環(huán)等。在InitInstance中構(gòu)造窗口(調(diào)用Create 函數(shù)),顯示窗口,然后調(diào)用Run 函數(shù)啟動(dòng)消息循環(huán),如果沒有消息,就由OnIdle處理一些空閑時(shí)的工作。共三十二頁消息處理機(jī)制:利用消息宏把消息和消息處理函數(shù)聯(lián)系起來。分為標(biāo)準(zhǔn)Windows消息(所有以WM_XXX為標(biāo)識的消息,WM_COMMAND除外(chwi))、控件通知和命令消息( WM_COMMAND,可被更多的對象處理。消息映射能繼承應(yīng)用ClassWizard和WizarBar生成自己的類、添加成員函數(shù)、變
6、量等共三十二頁二、VC+6.0集成環(huán)境介紹基本組成:標(biāo)題欄、菜單欄、各種窗口及狀態(tài)欄工具欄:十幾種工具,可顯示(xinsh)和隱藏,有STANDARD工具欄、 BUILD 工具欄等菜單欄:FILE選單(用于對文件進(jìn)行操作的命令選項(xiàng))EDIT選單(用于編輯或搜索的命令選項(xiàng))、VIEW選單(用于檢查源碼和調(diào)試信息的命令選項(xiàng))、INSERT(創(chuàng)建新的類、表單或資源,插入已有文件等)PROJECT(用于管理項(xiàng)目和工作區(qū))BUILD(用于編譯、建立和執(zhí)行應(yīng)用程序)、TOOLS、WINDOWS項(xiàng)目工作區(qū):含有工作區(qū)的定義和項(xiàng)目中包含文件的所有信息。工作區(qū)窗口:ClassView FileView Reso
7、urceView資源管理:位圖、光標(biāo)、選單、工具欄、對話框、串表 共三十二頁1、利用(lyng)資源管理器創(chuàng)建新資源、導(dǎo)入位圖和光標(biāo)及圖標(biāo)等到資源文件中,還可創(chuàng)建資源模板。2、利用資源瀏覽器查看和編輯資源符號。3、對話框編輯器:用于創(chuàng)建或編輯對話框資源或?qū)υ捒蚰0?添加并編輯控件;更改控件屬性;格式化對話框;改變制表順序和助記鍵;測試運(yùn)行對話框。4、菜單編輯器:用于創(chuàng)建并編輯菜單資源創(chuàng)建選單資源,用一資源號(ID)標(biāo)識,定義加速鍵,在加速鍵編輯器中建立相應(yīng)的加速鍵表?xiàng)l目,并賦予和選單相同的ID號。定義狀態(tài)欄提示。5、加速鍵編輯器:添加、刪除、更改和瀏覽項(xiàng)目所用加速鍵。6、串表編輯室器7、版本住
8、處編輯器8、圖形編輯器9、工具欄 編輯器共三十二頁三、Windows 位圖操作位圖是一二維數(shù)組,它與圖像中的像素一一對應(yīng)設(shè)備環(huán)境類CDCCDC類封裝了繪圖所需的成員函數(shù)和設(shè)備的基本屬性,但一般情況下使用其派生類CClientDC和CWindowDCGDI位圖和設(shè)備無關(guān)的位圖GDI位圖也稱為設(shè)備相關(guān)位圖(DDB),是一種GDI對象(duxing),因此,首先必須創(chuàng)建它,然后把它選入設(shè)備環(huán)境中,當(dāng)使用完后,再刪除。設(shè)備無關(guān)位圖(DIB)是一種與設(shè)備無關(guān)的位圖,自帶顏色信息,因此有利于在各種設(shè)備間傳輸。BMP中DIB的結(jié)構(gòu)1、文件頭BITMAPFILEHEADER共三十二頁typedef struc
9、t tagBITMAPFILEHEADER / bmfh WORD bfType ; / signature word BM or 0 x4D42 DWORD bfSize ; / entire size of file WORD bfReserved1 ; / must be zero WORD bfReserved2 ; / must be zero DWORD bfOffsetBits ; / offset in file of DIB pixel bits BITMAPFILEHEADER, * PBITMAPFILEHEADER ; 2、位圖信息(xnx)頭:BITMAPINFOHE
10、ADER共三十二頁 typedef struct tagBITMAPINFOHEADER / bmih DWORD biSize ; / size of the structure = 40 LONG biWidth ; / width of the image in pixels LONG biHeight ; / height of the image in pixels WORD biPlanes ; / = 1 WORD biBitCount ; / bits per pixel (1, 4, 8, 16, 24, or 32) DWORD biCompression ; / comp
11、ression code DWORD biSizeImage ; / number of bytes in image LONG biXPelsPerMeter ; / horizontal resolution LONG biYPelsPerMeter ; / vertical resolution DWORD biClrUsed ; / number of colors used DWORD biClrImportant ; / number of important colors BITMAPINFOHEADER, * PBITMAPINFOHEADER ;共三十二頁3、調(diào)色板(可能沒有
12、)typedef struct tagRGBQUAD / rgb BYTE rgbBlue ; / blue level BYTE rgbGreen ; / green level BYTE rgbRed ; / red level BYTE rgbReserved ; / = 0 RGBQUAD ; 4、實(shí)際(shj)位圖數(shù)據(jù)DIB訪問函數(shù)typedef struct tagBITMAPINFO / bmi BITMAPINFOHEADER bmiHeader ; / info-header structure RGBQUAD bmiColors1 ; / color table array
13、 BITMAPINFO, * PBITMAPINFO ; 共三十二頁1、 SetDIBitsToDeviceSetDIBitsToDevice函數(shù)顯示沒有延伸和縮小的DIB。DIB的每個(gè)圖素對應(yīng)到輸出設(shè)備的一個(gè)圖素上,而且DIB中的圖像一定會(huì)被正確顯示出來也就是說,圖像的頂列在上方(shn fn)。任何會(huì)影響設(shè)備內(nèi)容的座標(biāo)轉(zhuǎn)換都影響了顯示DIB的開始位置,但不影響顯示出來的圖片大小和方向。該函數(shù)如下:iLines = SetDIBitsToDevice ( hdc, / device context handle xDst, / x destination coordinate yDst, /
14、 y destination coordinate cxSrc, / source rectangle width cySrc, / source rectangle height xSrc, / x source coordinate ySrc, / y source coordinate yScan, / first scan line to draw cyScans, / number of scan lines to draw pBits, / pointer to DIB pixel bits pInfo, / pointer to DIB information fClrUse)
15、; / color use flag共三十二頁SetDIBitsToDevice函數(shù)傳回所顯示的掃描行的數(shù)目。因此,要調(diào)用(dioyng)SetDIBitsToDevice來顯示整個(gè)DIB圖像,您需要下列信息:hdc目的表面的設(shè)備句柄代號 xDst和yDst圖像左上角的目的坐標(biāo) cxDib和cyDibDIB的圖素寬度和高度,在這里,cyDib是BITMAPINFOHEADER結(jié)構(gòu)內(nèi)biHeight欄位的絕對值。 pInfo和pBits指向點(diǎn)陣圖信息部分和圖素位元的指標(biāo)2、StretchDIBits int StretchDIBits(HDC hdc,int Xdest,int Ydest,in
16、t DEstWidth,int nDestHeight,int XSrc, int Ysrc,int nSrcWidth,int SrcHeight,CONST VOID *lpBits,CONST BITMAPINFO *lpBitsInfo,UINT iUsage,DORD dwRo);共三十二頁要通過縮小或放大DIB,在輸出設(shè)備上以特定的大小顯示它,可以(ky)使用StretchDIBits:iLines = StretchDIBits ( hdc, / device context handle xDst, / x destination coordinate yDst, / y de
17、stination coordinate cxDst, / destination rectangle width cyDst, / destination rectangle height xSrc, / x source coordinate ySrc, / y source coordinate cxSrc, / source rectangle width cySrc, / source rectangle height pBits, / pointer to DIB pixel bits pInfo, / pointer to DIB information fClrUse, / c
18、olor use flag dwRop) ; / raster operation函數(shù)參數(shù)除了下列三個(gè)方面,均與SetDIBitsToDevice相同。 共三十二頁目的座標(biāo)包括邏輯寬度(cxDst)和高度(cyDst),以及開始點(diǎn)。 不能通過持續(xù)顯示DIB來減少記憶體需求。 最後一個(gè)參數(shù)是位元映射操作方式,它指出(zh ch)了DIB圖素與輸出設(shè)備圖素結(jié)合的方式,為此參數(shù)設(shè)定為SRCCOPY。調(diào)色板管理:顏色查找表調(diào)用CreatePalette創(chuàng)建邏輯調(diào)色板,然后用SelectPalette將其選入設(shè)備描述表,再調(diào)用RealizePalette使indows在設(shè)備描述表中“實(shí)現(xiàn)”邏輯調(diào)色板。共
19、三十二頁四、操作實(shí)例處理位圖的三種方法、利用(lyng)對象顯示位圖、在位圖中創(chuàng)建位圖、利用etDIBitsToDevice 函數(shù)或StretchDIBits函數(shù)顯示位圖。位圖處理實(shí)例、利用應(yīng)用程序向?qū)蓱?yīng)用程序框架、設(shè)計(jì)位圖、工具欄按鈕資源(可利用位圖資源器新建位圖資源,也可加載位圖文件),利用工具欄編輯器編輯工具欄資源、添加成員變量和成員函數(shù)成員變量:共三十二頁int m_x;HBITMAP m_Bmp;LPVOID m_ColorList;LPBYTE m_Image;LPBITMAPINFOHEADER m_DibHead; enum allocate None, crtalloca
20、te, heapallocate;allocate m_nBmpallocate;allocate m_nImageallocate;DWORD m_ImageSize; int m_nPalette;HANDLE m_hFile;HANDLE m_hMap;LPVOID m_lpvFile;HPALETTE m_hPalette;HGLOBAL m_hGlob; 共三十二頁成員函數(shù):void SetPaletteSize(int nBitCount);設(shè)置調(diào)色板大小void Clear();清除BOOL ReadFile(CFile *pFile);讀取數(shù)據(jù)到內(nèi)存BOOL SetPalett
21、e();當(dāng)前位圖顏色數(shù)大于設(shè)置調(diào)色板BOOL GetPalette();創(chuàng)建(chungjin)顏色數(shù)不大于的調(diào)色板BOOL DibToDC(CDC* pDC,CSize size);顯示位圖BOOL MemToDib(LPVOID lmem);得到內(nèi)存中位圖象素位置CSize GetDibSize();返回位圖尺寸、在初始化代碼中設(shè)置滾動(dòng)范圍及顯示初始化圖像、處理縮放位圖的消息映射函數(shù)、在nDraw中添加顯示代碼、重載nFileOpen 函數(shù)(添加菜單項(xiàng)及相應(yīng)處理函數(shù))共三十二頁C+類簡介(jin ji)類的概念數(shù)據(jù)類型:包含數(shù)據(jù)成員與函數(shù)類的使用:聲明類的對象,通過對象訪問公有成員變量(b
22、inling)和函數(shù),從而實(shí)現(xiàn)對類內(nèi)數(shù)據(jù)的訪問共三十二頁一個(gè)(y )DIB位圖的讀取過程1.創(chuàng)建應(yīng)用程序,打開VC6.0,選擇新建,建立一個(gè)基于MFC的應(yīng)用程序項(xiàng)目(xingm),名稱自定,如XXX共三十二頁2 根據(jù)提示,定制應(yīng)用程序的特征。得到(d do)如下圖所示內(nèi)容:共三十二頁3 修改(xigi)視圖類的基類心支持滾動(dòng)條共三十二頁4.單擊完成(wn chng)按鈕生成應(yīng)用程序共三十二頁5 添加成員(chngyun)變量通過類向?qū)Щ蚴謩?dòng)在視圖類中添加成員變量(binling),具體類型如前面所示(演示)共三十二頁6.添加成員(chngyun)函數(shù)最好(zu ho)通過類向?qū)У墓δ茉黾映蓡T函
23、數(shù),不然容易出錯(cuò)(演示)共三十二頁7.完善成員函數(shù)(hnsh)代碼功能先把空函數(shù)安置好,然后(rnhu)直接從教師給的代碼中拷貝內(nèi)容。共三十二頁8 編譯(biny)測試先編譯,運(yùn)行(ynxng)測試拷貝代碼是否有語法錯(cuò)誤,或者拷貝錯(cuò)誤共三十二頁9 加入圖像文件讀取與顯示(xinsh)的代碼(1)設(shè)置(shzh)初始化函數(shù),加入如下代碼:m_x=25;CSize MaxSize(24000,32000);CSize MinSize(MaxSize.cx/100,MaxSize.cy/100);SetScrollSizes(MM_HIMETRIC,MaxSize,MaxSize,MinSize);LPVOID lFirstBMP=(LPVOID):LoadResource
溫馨提示
- 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)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 我的拿手好戲彈鋼琴作文
- 2025年食品安全管理師理論考試復(fù)習(xí)題庫(含答案)
- 2025年江西楓林涉外經(jīng)貿(mào)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 2025年江蘇商貿(mào)職業(yè)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點(diǎn)含答案解析
- 《稅收管理業(yè)務(wù)指導(dǎo)》課件
- 專題04:人稱選用(練習(xí))
- 食品工廠衛(wèi)生作業(yè)內(nèi)容
- 蔬菜基地租賃承包合同范本
- 物業(yè)招標(biāo)合同書
- 建筑消防系統(tǒng)技術(shù)服務(wù)合同
- 2025年華僑港澳臺學(xué)生聯(lián)招考試英語試卷試題(含答案詳解)
- 2024-2025學(xué)年北京石景山區(qū)九年級初三(上)期末語文試卷(含答案)
- 第一章 整式的乘除 單元測試(含答案) 2024-2025學(xué)年北師大版數(shù)學(xué)七年級下冊
- JD37-009-2024 山東省存量更新片區(qū)城市設(shè)計(jì)編制技術(shù)導(dǎo)則
- 中國高血壓防治指南(2024年修訂版)
- 北京市海淀區(qū)重點(diǎn)中學(xué)2025屆高考數(shù)學(xué)押題試卷含解析
- GB/Z 44765.3-2024用戶端能源管理系統(tǒng)和電網(wǎng)側(cè)管理系統(tǒng)間的接口第3部分:架構(gòu)
- 《春酒》琦君完整版
- 北師大版(2024新版)七年級上冊數(shù)學(xué)第四章《基本平面圖形》測試卷(含答案解析)
- 湖南省邵陽市武岡市2024屆高三上學(xué)期期中考試地理含答案解析
- 春節(jié)后復(fù)工安全教育培訓(xùn)考試試題及答案
評論
0/150
提交評論