資源描述:
《VC數(shù)字圖像處理編程入門(mén)》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、VC數(shù)字圖像處理編程入門(mén)山東大學(xué)信息科學(xué)與工程學(xué)院2005.9.28VC開(kāi)發(fā)環(huán)境簡(jiǎn)介VC編程需要的知識(shí)C/C++語(yǔ)言;對(duì)Windows操作系統(tǒng)的了解(底層編程);微軟類(lèi)庫(kù)MFC(MicrosoftFoundationClass)VisualC++是一個(gè)可視化集成開(kāi)發(fā)環(huán)境掌握‘工程’的概念菜單使用介紹、Debug/Release區(qū)別等等VC開(kāi)發(fā)的兩種方式(一)SDK(softwaredevelopmentkit)方式又稱(chēng)WIN32API(應(yīng)用程序接口)編程即直接調(diào)用32位Windows(WIN32
2、)操作系統(tǒng)提供的接口函數(shù)進(jìn)行編程。SDK編程(VC中)使用的語(yǔ)言是C語(yǔ)言。適合底層編程和對(duì)速度要求較高的環(huán)境,比如游戲開(kāi)發(fā)、驅(qū)動(dòng)開(kāi)發(fā)、數(shù)字圖形等看圖像打開(kāi)、高斯噪聲繪制的例子VC開(kāi)發(fā)的兩種方式(二)MFC方式又稱(chēng)類(lèi)庫(kù)編程,即程序主要不再直接跟操作系統(tǒng)API打交道(在需要的時(shí)候也可以調(diào)用API),而是使用封裝好的C++類(lèi)庫(kù)。MFC編程的好處之一:可以使用MFC向?qū)?lái)生成程序框架,提高效率在這堂課中后面講的程序都是MFC程序VC練習(xí)一TC編寫(xiě)的‘hello,world’程序在VC中編譯的方法初步確立‘工程
3、’的概念雙擊打開(kāi)C源程序形成工程的方法;先建立工程,再逐步添加C源程序的方法初步講解VC調(diào)試技術(shù)(步進(jìn)/變量監(jiān)視)注意在這個(gè)程序中C和C++的部分區(qū)別VC練習(xí)二學(xué)習(xí)使用VC中的程序建立向?qū)?lái)建立一個(gè)程序框架學(xué)習(xí)建立一個(gè)菜單、工具欄并彈出對(duì)話(huà)框顯示Hello,World!圖像編程基礎(chǔ)位圖、三基色與混色、調(diào)色板的概念有一個(gè)長(zhǎng)寬各為200個(gè)象素,顏色數(shù)為16色的彩色圖,每一個(gè)象素都用R,G,B三個(gè)分量表示,因?yàn)槊總€(gè)分量有256個(gè)級(jí)別,要用8位即一個(gè)字節(jié)來(lái)表示,所以每個(gè)象素需要用3個(gè)字節(jié)。整個(gè)圖象要用200
4、*200*3,約120k字節(jié)。這幅圖中最多只有16種顏色,我們可以用一個(gè)表:表中的每一行記錄一種顏色的R,G,B值。這樣當(dāng)我們表示一個(gè)象素的顏色時(shí),只需要指出該顏色是在第幾行,即該顏色在表中的索引值。舉個(gè)例子,如果表的第0行為255,0,0(紅色),那么當(dāng)某個(gè)象素為紅色時(shí),只需要標(biāo)明0即可。再來(lái)計(jì)算一下:16種狀態(tài)可以用4位表示,所以一個(gè)象素要用半個(gè)字節(jié)。整個(gè)圖象要用200*200*0.5,約20k字節(jié),再加上表占用的字節(jié)為3*16=48字節(jié).整個(gè)占用的字節(jié)數(shù)約為前面的1/6!Windows位圖結(jié)構(gòu)位圖
5、文件頭的結(jié)構(gòu)第一部分為位圖文件頭BITMAPFILEHEADER,是一個(gè)結(jié)構(gòu),其定義如下:typedefstructtagBITMAPFILEHEADER{WORDbfType;DWORDbfSize;指定文件大?。òㄟ@14個(gè)字節(jié))WORDbfReserved1;WORDbfReserved2;DWORDbfOffBits;(從文件頭到數(shù)據(jù)區(qū)的偏移量)}BITMAPFILEHEADER;這個(gè)結(jié)構(gòu)的長(zhǎng)度是固定的,為14個(gè)字節(jié)(WORD為無(wú)符號(hào)16位整數(shù),DWORD為無(wú)符號(hào)32位整數(shù))位圖信息頭的結(jié)構(gòu)第二
6、部分為位圖信息頭BITMAPINFOHEADER,其主要字段如下:typedefstructtagBITMAPINFOHEADER{DWORDbiSize;指定這個(gè)結(jié)構(gòu)的長(zhǎng)度,為40LONGbiWidth;指定圖象的寬度,單位是象素LONGbiHeight;WORDbiBitCount;顏色的位數(shù),一般為1、4、8、24DWORDbiSizeImage;}BITMAPINFOHEADER;這個(gè)結(jié)構(gòu)的長(zhǎng)度是固定的,為40個(gè)字節(jié)(WORD為無(wú)符號(hào)16位整數(shù),DWORD無(wú)符號(hào)32位整數(shù),LONG為32位整數(shù))
7、biSizeImage字段biSizeImage指定實(shí)際的位圖數(shù)據(jù)占用的字節(jié)數(shù),其實(shí)也可以從以下的公式中計(jì)算出來(lái):biSizeImage=biWidth‘*biHeight要注意的是:上述公式中的biWidth‘必須是4的整倍數(shù)(所以不是biWidth,而是biWidth‘,表示大于或等于biWidth的,離4最近的整倍數(shù)。舉個(gè)例子,如果biWidth=240,則biWidth‘=240;如果biWidth=241,biWidth‘=244)一定要注意:每行所占字節(jié)長(zhǎng)度始終是4的倍數(shù),或者每行所占位長(zhǎng)度
8、是32的倍數(shù)。如果不是,則需要補(bǔ)齊調(diào)色板調(diào)色板實(shí)際上是一個(gè)四元數(shù)組,則有2的iBitCount次方個(gè)元素)。數(shù)組中每個(gè)元素的類(lèi)型是一個(gè)RGBQUAD結(jié)構(gòu),占4個(gè)字節(jié).typedefstructtagRGBQUAD{BYTErgbBlue;//藍(lán)色分量BYTErgbGreen;//綠色分量BYTErgbRed;//紅色分量BYTErgbReserved;//保留值}RGBQUAD;注意:24位真彩色圖中沒(méi)有調(diào)色板數(shù)據(jù)實(shí)際的位圖數(shù)據(jù)區(qū)第四部分就