在16色模式下顯示256色及全彩色_第1頁(yè)
在16色模式下顯示256色及全彩色_第2頁(yè)
在16色模式下顯示256色及全彩色_第3頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

在16色模式下顯示256色及全彩色

摘要該文描述了在VGA16色圖形模式下顯示256色及全彩色圖像的抖動(dòng)算法,并給出了顯示BitMap圖像的C語(yǔ)言程序。在編寫有關(guān)圖像顯示的軟件時(shí),有時(shí)為了軟件的兼容性和通用性,不得不采用VGA標(biāo)準(zhǔn)的圖形模式,這就涉及到如何在16色圖形模式下顯示256色及全彩色圖像的問(wèn)題。解決這一問(wèn)題有兩種方法。一種是采用色彩近似的方法,即根據(jù)需要顯示的全部顏色,經(jīng)過(guò)尋優(yōu)來(lái)選擇16種最具代表性的顏色,每一種顏色都用這16種顏色中最接近的一種來(lái)代替?!队?jì)算機(jī)世界月刊》1994年第1期的《用集群方法進(jìn)行顏色選擇》一文詳細(xì)描述了該方法。但事實(shí)上,該方法僅對(duì)于某些理想的情況適用,而對(duì)于更普遍的情況,該方法無(wú)論從運(yùn)算速度還是從處理效果來(lái)講,都不可能令人感到滿意,因而不宜在實(shí)際中運(yùn)用。另一種方法是被眾多商品化軟件所廣泛采用的抖動(dòng)技術(shù),其原理是利用多種可見顏色的組合來(lái)模擬一種不可見的顏色。目前,關(guān)于彩色圖像抖動(dòng)算法的資料不多。筆者通過(guò)對(duì)灰度圖像處理算法及Windows環(huán)境下一些圖像處理軟件的剖析,得出了抖動(dòng)算法的一般原理和實(shí)現(xiàn)方法。一、抖動(dòng)算法原理我們知道,在256色及全彩色圖像中,每一種顏色均由R、G、B三個(gè)顏色分量組成,而每一個(gè)分量又一般由一個(gè)字節(jié)表示。這樣,每一個(gè)顏色分量可有256級(jí)亮度變化。本算法的關(guān)鍵在于引入亮度矩陣的概念,即采用一個(gè)16×16的矩陣來(lái)表示每一個(gè)顏色分量的亮度值,不同亮度值對(duì)應(yīng)著矩陣的不同排列。矩陣全為0時(shí)對(duì)應(yīng)亮度0,全為255時(shí)對(duì)應(yīng)亮度255。當(dāng)亮度值為L(zhǎng)時(shí),亮度矩陣中將有[L255×256]個(gè)255及[(1-L255)×256]個(gè)0,此時(shí),矩陣的平均亮度值為L(zhǎng)'={[L/255×256]×255+[(1-L/255)×256]×0}/256=L這就是說(shuō),矩陣的平均亮度正好為顏色分量的實(shí)際亮度。假設(shè)某一顏色C的R、G、B三個(gè)顏色分量的亮度矩陣分別為:@@01A04600.GIF;公式一@@其中rmn、gmn、bmn(0≤m,n≤15)取值為0或15。將上述三個(gè)矩陣作疊加運(yùn)算,得@@01A04601.GIF;公式二@@其中的Cmn為表1中由rmn、gmn、bmn所確定的顏色值。表1為VGA16色圖形模式下的標(biāo)準(zhǔn)調(diào)色板(并非設(shè)置模式后的缺省調(diào)色板)。顯然,Cmn只可能為0及9~15之中的一個(gè)。由此方法得到的矩陣Mc即可視為顏色C的模擬矩陣。由于顏色C的R、G、B三個(gè)顏色分量與亮度矩陣MR、MG、MB有著相等的亮度值,所以矩陣MC從視覺效果上來(lái)講能很好地模擬顏色C。但在顯示時(shí),不可能用整個(gè)這樣的矩陣來(lái)替代一個(gè)像素點(diǎn),那將導(dǎo)致整幅圖像長(zhǎng)寬均變成原圖的16倍。實(shí)際的做法是:若該像素點(diǎn)距離圖像原點(diǎn)的座標(biāo)為(X,Y),則令:m=Ymod16n=Xmod16(1)此時(shí),可用MC中的顏色Cmn來(lái)顯示該像素。@@01A04602.GIF;表116色圖形模式標(biāo)準(zhǔn)調(diào)色板@@二、算法實(shí)現(xiàn)1.亮度矩陣的表示算法中要用到257個(gè)16×16的亮度矩陣,如果對(duì)每一個(gè)都分別表示的話,將占用很大的內(nèi)存空間(大于64K)。由于亮度矩陣的排列及增長(zhǎng)均有一定的規(guī)律性,我們只需要采用一個(gè)16×16的矩陣即可。該矩陣中256個(gè)元素的取值分別為0~255,按一定規(guī)律排列。令其為:@@01A04603.GIF;公式三@@亮度為L(zhǎng)時(shí)的矩陣可由H變化而來(lái),其中@@01A04604.GIF;公式四@@2.顏色查找表算法中只用到了顏色0及9~15,我們可以忽略其他項(xiàng)并將有用部分表示為一個(gè)三維數(shù)組形式的顏色查找表,如表2所示。此時(shí),r,g,b值作為數(shù)組下標(biāo),取值為0或1。與之相應(yīng),我們將(2)式變?yōu)锧@01A04605.GIF;公式三@@3.每一像素的顯示步驟①對(duì)256色圖像,由顏色索引值查顏色映射表獲取R、G、B值;對(duì)全彩色圖像,直接讀取R、G、B值;②根據(jù)像素座標(biāo)(X,Y),由(1)式求得m,n;③根據(jù)R、G、B值,由(3)式求得rmn、gmn、bmn;④由rmn、gmn、bmn查表2得顏色值C;⑤將像素以顏色C顯示于(X,Y)處。本文所附程序用于在16色圖形模式下顯示256色及全彩色BitMap圖像。關(guān)于BitMap圖像的格式及讀取方法,許多資料均有介紹,這里不再贅述。該程序由TurboC2.0及BorlandC3.1編譯,在386兼容機(jī)上運(yùn)行通過(guò)。運(yùn)行方法為:show文件名.BMP@@01A04606.GIF;公式三表2顏色查找表@@事實(shí)證明,采用本文所描述的算法,可以得到與許多商品化軟件相似的處理速度和處理效果。源程序:#include<stdio.h>#include<dos.h>#include<stdio.h>#include<conio.h>#defineNoError0#defineErrorFileOpen1#defineErrorFileType2#defineErrorImageColor3typedefstructtagBITMAPFILEHEADER{unsignedintbfType;unsignedlongbfSize;unsignedintbfReserved1;unsignedintbfReserved2;unsignedlongbfoffBits;}BITMAPFILEHEADER;typedefstructtagBITMAPINFOHEADER{unsignedlongbiSize;unsignedlongbiWidth;unsignedlongbiHeight;unsignedintbiPlanes;unsignedintbiBitCount;unsignedlongbiCompression;unsignedlongbiSizeImage;unsignedlongbiXPelsPerMeter;unsignedlongbiYPelsPerMeter;unsignedlongbiClrUsed;unsignedlongbiClrImportant;}BITMAPINFOHEADER;typedefstructtagRGBQUAD{unsignedcharrgbBlue;unsignedcharrgbGreen;unsignedcharrgbRed;unsignedcharrgbReserved;}RGBQUAD;voidmain(intargc,char*argv[]);intShowBmp(char*FileName);intGetColor(unsignedcharR,unsignedcharG,unsignedcharB,intX,intY);voidSetVideoMode(unsignedcharMode);voidSetPalReg(unsignedchar*palReg);voidSetDacReg(unsignedchar*DacReg,intColor,intCount);voidPutPixel(intX,intY,unsignedcharColor);unsignedcharPalReg[17]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0};unsignedcharStandardPal[48]={0,0,0,32,0,0,0,32,0,32,32,0,0,0,32,32,0,32,0,32,32,32,32,32,48,48,48,63,0,0,0,63,0,63,63,0,0,0,63,63,0,63,0,63,63,63,63,63,};unsignedcharLightnessMatrix[16][16]={{0,235,59,219,15,231,55,215,2,232,56,217,12,229,52,213},{128,64,187,123,143,79,183,119,130,66,184,120,140,76,180,116},{33,192,16,251,47,207,31,247,34,194,18,248,44,204,28,244},{161,97,144,80,175,111,159,95,162,98,146,82,172,108,156,92},{8,225,48,208,5,239,63,223,10,226,50,210,6,236,60,220},{136,72,176,112,133,69,191,127,138,74,178,114,134,70,188,124},{41,200,24,240,36,197,20,255,42,202,26,242,38,198,22,252},{169,105,152,88,164,100,148,84,170,106,154,90,166,102,150,86},{3,233,57,216,13,228,53,212,1,234,58,218,14,230,54,214},{131,67,185,121,141,77,181,117,129,65,186,122,142,78,182,118},{35,195,19,249,45,205,29,245,32,193,17,250,46,206,30,246},{163,99,147,83,173,109,157,93,160,96,145,81,174,110,158,94},{11,227,51,211,7,237,61,221

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論