調色板一般是為了顯示256色圖象時(shí)使用的。圖象(BMP圖象)按顏色種類(lèi)分類(lèi)可以分為:
1、黑白圖象。不使用調色板;
2、256色圖象(包括256級灰度圖象),使用調色板。調色板中記錄的是圖象中使用的256種顏色,圖象數據中記錄的是顏色索引,通過(guò)這個(gè)索引值就可以找到對應的顏色。
3、24bit真彩色圖象,不使用調色板。圖象數據中保留RGB三種顏色組合,可以直接顯示。
調色板的原理
PC機上顯示的圖象是由一個(gè)個(gè)像素組成的,每個(gè)像素都有自己的顏色屬性。在PC的顯示系統中,像素的顏色是基于RGB模型的,每一個(gè)像素的顏色由紅(B)、綠(G)、藍(B)三原色組合而成。每種原色用8位表示,這樣一個(gè)的顏色就是24位的。以此推算,PC的SVGA適配器可以同時(shí)顯示224約一千六百多萬(wàn)種顏色。24位的顏色通常被稱(chēng)作真彩色,用真彩色顯示的圖象可達到十分逼真的效果。
但是,真彩色的顯示需要大量的視頻內存,一幅640×480的真彩色圖象需要約1MB的視頻內存。由于數據量大增,顯示真彩色會(huì )使系統的整體性能迅速下降。為了解決這個(gè)問(wèn)題,計算機使用調色板來(lái)限制顏色的數目。調色板實(shí)際上是一個(gè)有256個(gè)表項的RGB顏色表,顏色表的每項是一個(gè)24位的RGB顏色值。使用調色板時(shí),在視頻內存中存儲的不是的24位顏色值,而是調色板的4位或8位的索引。這樣一來(lái),顯示器可同時(shí)顯示的顏色被限制在256色以?xún)?,對系統資源的耗費大大降低了。
顯示器可以被設置成16、256、64K、真彩色等顯示模式,前兩種模式需要調色板。在16或256色模式下,程序必須將想要顯示的顏色正確地設置到調色板中,這樣才能顯示出預期的顏色。圖11.1顯示了調色板的工作原理。使用調色板的一個(gè)好處是不必改變視頻內存中的值,只需改變調色板的顏色項就可快速地改變一幅圖象的顏色或灰度。
在DOS中,調色板的使用不會(huì )有什么問(wèn)題。由于DOS是一個(gè)單任務(wù)操作系統,一次只能運行一個(gè)程序,因此程序可以獨占調色板。在Windows環(huán)境下,情況就不那么簡(jiǎn)單了。Windows是一個(gè)多任務(wù)操作系統,可以同時(shí)運行多個(gè)程序。如果有幾個(gè)程序都要設置調色板,就有可能產(chǎn)生沖突。為了避免這種沖突,Windows使用邏輯調色板來(lái)作為使用顏色的應用程序和系統調色板(物理調色板)之間的緩沖。

圖11.1 調色板工作原理
在Windows中,應用程序是通過(guò)一個(gè)或多個(gè)邏輯調色板來(lái)使用系統調色板(物理調色板)。在256色系統調色板中,Windows保留了20種顏色作為靜態(tài)顏色,這些顏色用作顯示W(wǎng)indows界面,應用程序一般不能改變。缺省的系統調色板只包含這20種靜態(tài)顏色,調色板的其它項為空。應用程序要想使用新的顏色,必須將包含有所需顏色的邏輯調色板實(shí)現到系統調色板中。在實(shí)現過(guò)程中,Windows首先將邏輯調色板中的項與系統調色板中的項作完全匹配,對于邏輯調色板中不能完全匹配的項,Windows將其加入到系統調色板的空白項中,系統調色板總共有236個(gè)空白項可供使用,若系統調色板已滿(mǎn),則Windows將邏輯調色板的剩余項匹配到系統調色板中盡可能接近的顏色上。
每個(gè)設備上下文都擁有一個(gè)邏輯調色板,缺省的邏輯調色板只有20種保留顏色,如果要使用新的顏色,則應該創(chuàng )建一個(gè)新的邏輯調色板并將其選入到設備上下文中。但光這樣還不能使用新顏色,程序只有把設備上下文中的邏輯調色板實(shí)現到系統調色板中,新的顏色才能實(shí)現。在邏輯調色板被實(shí)現到系統調色板時(shí),Windows會(huì )建立一個(gè)調色板映射表。當設備上下文用邏輯調色板中的顏色繪圖時(shí),GDI繪圖函數會(huì )查詢(xún)調色板映射表以把像素值從邏輯調色板的索引轉換成系統調色板的索引,這樣當像素被輸出到視頻內存中時(shí)就具有了正確的顏色值。圖11.2說(shuō)明了這種映射關(guān)系,從圖中讀者可以體會(huì )到邏輯調色板的緩沖作用。在該圖中,GDI繪圖函數使用邏輯調色板的索引1中的顏色來(lái)繪圖,通過(guò)查詢(xún)調色板映射表,得知系統調色板中的第23號索引與其完全匹配,這樣實(shí)際輸出到視頻內存中的像素值是23。注意圖中還演示了顏色的不完全匹配,即邏輯調色板中的索引15和系統調色板中的索引46。
每個(gè)要使用額外顏色的窗口都會(huì )實(shí)現自己的邏輯調色板,邏輯調色板中的每種顏色在系統調色板中都有相同或相近的匹配。調色板的實(shí)現優(yōu)先權越高,匹配的精度也就越高。Windows規定,活動(dòng)窗口的邏輯調色板(如果有的話(huà))具有最高的實(shí)現優(yōu)先權。這是因為活動(dòng)窗口是當前與用戶(hù)交互的窗口,應該保證其有最佳的顏色顯示。非活動(dòng)窗口的優(yōu)先權是按Z順序自上到下確定的(Z順序就是重疊窗口的重疊順序)?;顒?dòng)窗口有權將其邏輯調色板作為前景調色板實(shí)現,非活動(dòng)窗口則只能實(shí)現背景調色板。
| 提示:術(shù)語(yǔ)活動(dòng)窗口(Active window)或前臺窗口(Foreground window)是指當前與用戶(hù)交互的窗口,活動(dòng)窗口的頂端的標題條呈高亮顯示,而非活動(dòng)窗口的標題條則是灰色的?;顒?dòng)窗口肯定是一個(gè)頂層窗口(Top-level window),頂層窗口是指沒(méi)有父窗口或父窗口是桌面窗口的窗口,這種窗口一般都有標題和邊框,主要包括框架窗口和對話(huà)框。術(shù)語(yǔ)重疊窗口是指作為應用程序主窗口的窗口,我們可以把對話(huà)框看成是一種特殊的重疊式窗口。 |

圖11.2 調色板的映射關(guān)系
其實(shí)很簡(jiǎn)單,可以舉個(gè)簡(jiǎn)單的例子,調試板是指一塊區域,一個(gè)大的結構數組
數組中每個(gè)元素由 RGBQ 構成,R存放紅色值,類(lèi)推,Q是保留位,一般不用。
比如有一副真彩24位圖象數據(無(wú)調色板) 一組RGB(就是一個(gè)象素)總共占3個(gè)字節
(R1G1B1) (R2G2B2)(R3G3B3) (R1G1B1) (R1G1B1)(R1G1B1)(R1G1B1)
7個(gè)象素 有5個(gè)顏色重復的象素的,總共21字節
轉成8位(256色) 有調色板
就變成了
n0 n1 n2 n0 n0 n0 n0(n1...nX 是一個(gè)字節,只存放索引號,對應調色板數組的序號)
-----調色板------
0-----R1G1B1Q
1-----R2G2B2Q
2-----R3G3B3Q
加起來(lái)才19字節
重復的象素值越多,越省空間,這就是調色板的作用,但是如果重復的次數不多的話(huà),你看到調色板里有很多Q,這樣反而不省空間,不如用24位直接顯示了
聯(lián)系客服