- 相關(guān)推薦
在16色模式下顯示256色及全彩色
摘 要 該文描述了在VGA16色圖形模式下顯示256色及全彩色圖像的抖動(dòng)算法,并給出了顯示BitMap圖像的C語言程序。在編寫有關(guān)圖像顯示的軟件時(shí),有時(shí)為了軟件的兼容性和通用性,不得不采用VGA標(biāo)準(zhǔn)的圖形模式,這就涉及到如何在16色圖形模式下顯示256色及全彩色圖像的問題。解決這一問題有兩種方法。一種是采用色彩近似的方法,即根據(jù)需要顯示的全部顏色,經(jīng)過尋優(yōu)來選擇16種最具代表性的顏色,每一種顏色都用這16種顏色中最接近的一種來代替!队(jì)算機(jī)世界月刊》1994年第1期的《用集群方法進(jìn)行顏色選擇》一文詳細(xì)描述了該方法。但事實(shí)上,該方法僅對(duì)于某些理想的情況適用,而對(duì)于更普遍的情況,該方法無論從運(yùn)算速度還是從處理效果來講,都不可能令人感到滿意,因而不宜在實(shí)際中運(yùn)用。另一種方法是被眾多商品化軟件所廣泛采用的抖動(dòng)技術(shù),其原理是利用多種可見顏色的組合來模擬一種不可見的顏色。目前,關(guān)于彩色圖像抖動(dòng)算法的資料不多。筆者通過對(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的矩陣來表示每一個(gè)顏色分量的亮度值,不同亮度值對(duì)應(yīng)著矩陣的不同排列。矩陣全為0時(shí)對(duì)應(yīng)亮度0,全為255時(shí)對(duì)應(yīng)亮度255。
當(dāng)亮度值為L時(shí),亮度矩陣中將有[L255×256]個(gè)255及[(1-L255)×256]個(gè)0,此時(shí),矩陣的平均亮度值為L'={[L/255×256]×255 [(1-L/255)×256]×0}/256=L這就是說,矩陣的平均亮度正好為顏色分量的實(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從視覺效果上來講能很好地模擬顏色C。但在顯示時(shí),不可能用整個(gè)這樣的矩陣來替代一個(gè)像素點(diǎn),那將導(dǎo)致整幅圖像長寬均變成原圖的16倍。實(shí)際的做法是:若該像素點(diǎn)距離圖像原點(diǎn)的座標(biāo)為(X,Y),則令:
m=Y mod 16
n=X mod 16 (1)
此時(shí),可用MC中的顏色Cmn來顯示該像素。
@@01A04602.GIF;表1 16色圖形模式標(biāo)準(zhǔn)調(diào)色板@@
二、算法實(shí)現(xiàn)
1.亮度矩陣的表示
算法中要用到257個(gè)16×16的亮度矩陣,如果對(duì)每一個(gè)都分別表示的話,將占用很大的內(nèi)存空間(大于64K)。由于亮度矩陣的排列及增長均有一定的規(guī)律性,我們只需要采用一個(gè)16×16的矩陣即可。該矩陣中256個(gè)元素的取值分別為0~255,按一定規(guī)律排列。令其為:
@@01A04603.GIF;公式三@@亮度為L時(shí)的矩陣可由H變化而來,其中@@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得顏
[1] [2] [3] [4]
【在16色模式下顯示256色及全彩色】相關(guān)文章:
麥草全量還田稻作栽培模式研究04-26
互動(dòng)教學(xué)模式下的詞匯教學(xué)05-02
新課標(biāo)背景下的教學(xué)模式構(gòu)建04-28
網(wǎng)絡(luò)環(huán)境下教學(xué)模式探索05-01
故障模式下的空間交會(huì)防撞設(shè)計(jì)04-27
文化模式下的自我意識(shí)研究04-29