數(shù)字圖像處理的VC編程基礎(chǔ)_第1頁
數(shù)字圖像處理的VC編程基礎(chǔ)_第2頁
數(shù)字圖像處理的VC編程基礎(chǔ)_第3頁
數(shù)字圖像處理的VC編程基礎(chǔ)_第4頁
數(shù)字圖像處理的VC編程基礎(chǔ)_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論