資源描述:
《vc++圖象處理教程》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、第1章Windows位圖和調(diào)色板1.1位圖和調(diào)色板的概念如今Windows(3.x以及95,98,NT)系列已經(jīng)成為絕大多數(shù)用戶(hù)使用的操作系統(tǒng),它比DOS成功的一個(gè)重要因素是它可視化的漂亮界面。那么Windows是如何顯示圖象的呢?這就要談到位圖(bitmap)。我們知道,普通的顯示器屏幕是由許許多多點(diǎn)構(gòu)成的,我們稱(chēng)之為象素。顯示時(shí)采用掃描的方法:電子槍每次從左到右掃描一行,為每個(gè)象素著色,然后從上到下這樣掃描若干行,就掃過(guò)了一屏。為了防止閃爍,每秒要重復(fù)上述過(guò)程幾十次。例如我們常說(shuō)的屏幕分辨率為640×480
2、,刷新頻率為70Hz,意思是說(shuō)每行要掃描640個(gè)象素,一共有480行,每秒重復(fù)掃描屏幕70次。我們稱(chēng)這種顯示器為位映象設(shè)備。所謂位映象,就是指一個(gè)二維的象素矩陣,而位圖就是采用位映象方法顯示和存儲(chǔ)的圖象。舉個(gè)例子,圖1.1是一幅普通的黑白位圖,圖1.2是被放大后的圖,圖中每個(gè)方格代表了一個(gè)象素。我們可以看到:整個(gè)骷髏就是由這樣一些黑點(diǎn)和白點(diǎn)組成的。圖1.1???骷髏圖1.2????放大后的骷髏位圖那么,彩色圖是怎么回事呢?我們先來(lái)說(shuō)說(shuō)三元色RGB概念。我們知道,自然界中的所有顏色都可以由紅、綠、藍(lán)(R,G,B)
3、組合而成。有的顏色含有紅色成分多一些,如深紅;有的含有紅色成分少一些,如淺紅。針對(duì)含有紅色成分的多少,可以分成0到255共256個(gè)等級(jí),0級(jí)表示不含紅色成分;255級(jí)表示含有100%的紅色成分。同樣,綠色和藍(lán)色也被分成256級(jí)。這種分級(jí)概念稱(chēng)為量化。這樣,根據(jù)紅、綠、藍(lán)各種不同的組合我們就能表示出256×256×256,約1600萬(wàn)種顏色。這么多顏色對(duì)于我們?nèi)搜蹃?lái)說(shuō)已經(jīng)足夠豐富了。表1.1????常見(jiàn)顏色的RGB組合值顏色RGB紅25500藍(lán)02550綠00255黃2552550紫2550255青0255255
4、白255255255黑000灰128128128你大概已經(jīng)明白了,當(dāng)一幅圖中每個(gè)象素賦予不同的RGB值時(shí),能呈現(xiàn)出五彩繽紛的顏色了,這樣就形成了彩色圖。的確是這樣的,但實(shí)際上的做法還有些差別。讓我們來(lái)看看下面的例子。有一個(gè)長(zhǎng)寬各為200個(gè)象素,顏色數(shù)為16色的彩色圖,每一個(gè)象素都用R、G、B三個(gè)分量表示。因?yàn)槊總€(gè)分量有256個(gè)級(jí)別,要用8位(bit),即一個(gè)字節(jié)(byte)來(lái)表示,所以每個(gè)象素需要用3個(gè)字節(jié)。整個(gè)圖象要用200×200×3,約120k字節(jié),可不是一個(gè)小數(shù)目呀!如果我們用下面的方法,就能省的多。因
5、為是一個(gè)16色圖,也就是說(shuō)這幅圖中最多只有16種顏色,我們可以用一個(gè)表:表中的每一行記錄一種顏色的R、G、B值。這樣當(dāng)我們表示一個(gè)象素的顏色時(shí),只需要指出該顏色是在第幾行,即該顏色在表中的索引值。舉個(gè)例子,如果表的第0行為255,0,0(紅色),那么當(dāng)某個(gè)象素為紅色時(shí),只需要標(biāo)明0即可。讓我們?cè)賮?lái)計(jì)算一下:16種狀態(tài)可以用4位(bit)表示,所以一個(gè)象素要用半個(gè)字節(jié)。整個(gè)圖象要用200×200×0.5,約20k字節(jié),再加上表占用的字節(jié)為3×16=48字節(jié).整個(gè)占用的字節(jié)數(shù)約為前面的1/6,省很多吧?這張R、G、
6、B的表,就是我們常說(shuō)的調(diào)色板(Palette),另一種叫法是顏色查找表LUT(LookUpTable),似乎更確切一些。Windows位圖中便用到了調(diào)色板技術(shù)。其實(shí)不光是Windows位圖,許多圖象文件格式如pcx、tif、gif等都用到了。所以很好地掌握調(diào)色板的概念是十分有用的。有一種圖,它的顏色數(shù)高達(dá)256×256×256種,也就是說(shuō)包含我們上述提到的R、G、B顏色表示方法中所有的顏色,這種圖叫做真彩色圖(truecolor)。真彩色圖并不是說(shuō)一幅圖包含了所有的顏色,而是說(shuō)它具有顯示所有顏色的能力,即最多可
7、以包含所有的顏色。表示真彩色圖時(shí),每個(gè)象素直接用R、G、B三個(gè)分量字節(jié)表示,而不采用調(diào)色板技術(shù)。原因很明顯:如果用調(diào)色板,表示一個(gè)象素也要用24位,這是因?yàn)槊糠N顏色的索引要用24位(因?yàn)榭偣灿?24種顏色,即調(diào)色板有224行),和直接用R,G,B三個(gè)分量表示用的字節(jié)數(shù)一樣,不但沒(méi)有任何便宜,還要加上一個(gè)256×256×256×3個(gè)字節(jié)的大調(diào)色板。所以真彩色圖直接用R、G、B三個(gè)分量表示,它又叫做24位色圖。1.2bmp文件格式介紹完位圖和調(diào)色板的概念,下面就讓我們來(lái)看一看Windows的位圖文件(.bmp文件)
8、的格式是什么樣子的。bmp文件大體上分成四個(gè)部分,如圖1.3所示。位圖文件頭BITMAPFILEHEADER位圖信息頭BITMAPINFOHEADER調(diào)色板Palette實(shí)際的位圖數(shù)據(jù)ImageDate圖1.3????Windows位圖文件結(jié)構(gòu)示意圖第一部分為位圖文件頭BITMAPFILEHEADER,是一個(gè)結(jié)構(gòu),其定義如下:typedefstructtagBITMAPFILEHEAD