簡介
PCX的最新版本支持24位色彩(256色的調色板或全24位RGB),圖像的大小可達64k×64k個像素。PCX採用遊程長度編碼來壓縮數據,但是有些情況下壓縮效率不高,尤其是對於掃描圖像或視頻圖像。PCX存在許多的版本,其檔案頭中的一個代碼標識了檔案所支持的Zsoft產品版本,不同版本的圖像特點如表1.1所示。
圖像特點
表1.1 不同PCX版本的圖像特點
版本號 | 圖像特點 |
0 | 基本的單色(2色)或4色圖像 |
1 | 基本的單色(2色)或4色圖像,另加16位色圖像 |
2 | 基本的單色(2色)或4色圖像,另加24位調色板的256色以及全24位RGB色圖像 |
3 | 基本的單色(2色)或4色圖像, |
4 | 基本的單色(2色)或4色圖像 |
5 | 基本的單色(2色)或4色、256色圖像以及多平面真彩色圖像 |
1. 檔案結構及檔案頭PCX圖像由3個部分組成,即檔案頭、點陣圖數據和一個多達256種色彩的調色板。PCX檔案的檔案頭為固定的128位元組。其中包含版本號、被列印或掃描圖像的解析度(單位為每英寸點數)、大小(單位為像素數)、每掃描行位元組數、每像素位數和彩色平面數等信息。檔案還可能包括一個調色板以及表明該調色板是灰度還是彩色的一個代碼。檔案的核心部分是點陣圖數據。點陣圖數據以類似於Packbits壓縮法的遊程長度壓縮形式記錄,像素值通常是單位元組的索引值,指向調色板中的位置。如果版本號為5,則檔案末尾處還有一個單一的位平面和一個RGB值的256色調色板,3種原色各占1個位元組。
PCX格式圖像的檔案頭結構如表1.2所示。
表1.2 PCX檔案頭結構
起始位元組 | 位元組數 | 內容 | 解釋 |
0 | 1 | Zsoft標誌 | 10(0x0a),Zsoft PCX檔案的標誌 |
1 | 1 | 版本號 | 0:PC Paintbrush 2.51:PC Paintbrush 2.8,帶調色板 |
2 | 1 | 編碼 | 1:PCX遊程長度編碼 |
3 | 1 | 位/像素 | 每個平面的位/像素值,可能值為1、2,、4或8 |
4 | 8 | 圖像大小 | 圖像邊界極限為Xmin、Ymin、Xmax、Ymax,以像素為單位 |
12 | 2 | 水平解析度 | 列印時,X方向的每英寸點數 |
14 | 2 | 垂直解析度 | 列印時,Y方向的每英寸點數 |
16 | 48 | 檔案頭調色板 | 16色的“EGA/VGA”頭調色板 |
64 | 1 | 保留位元組 | Zsoft保留,為0 |
65 | 1 | 平面 | 彩色/灰度平面數。PCX圖像可以是單彩色,也可以具有多個彩色平面 |
66 | 2 | 每行位元組數 | 每個色彩平面的每行位元組數,即存儲未壓縮圖像的一個掃描行所需的位元組數,總是偶數 |
68 | 2 | 調色板解釋 | 1:彩色或黑白 2:灰度 |
70 | 2 | 視頻螢幕大小X | 視頻輸出的水平像素數-1 |
72 | 2 | 視頻螢幕大小Y | 視頻輸出的垂直像素數-1 |
74 | 54 | 全空直到檔案結束 | 0 |
2. 對PCX進行解碼的關鍵因為在一個PCX檔案中可以用到幾種不同的記錄方法,因此其中必須包含所用方法的標誌。在對PCX進行解釋時,單靠讀取版本號是不夠的,最可靠的標誌是每像素的位數(檔案頭的第3個位元組)和色彩平面數(檔案頭的第65個位元組),這兩個標誌與圖像色彩數的對應關係如表1.3所示。
表1.3 PCX數據的解釋
每像素的位數 | 色彩平面數 | 解釋 |
1 | 1 | 單色 |
1 | 2 | 4色 |
1 | 3 | 8色 |
1 | 4 | 16色 |
2 | 1 | 4色 |
2 | 4 | 16色 |
4 | 1 | 16色 |
8 | 1 | 256色 |
8 | 3 | 16.7兆色 |
平面數說明是否使用了調色板。多於一個平面則沒有調色板。如果使用了調色板,則可以由版本號和每像素位數決定PCX圖像所使用的調色板類型。
3. PCX圖像數據的存儲如果沒有使用調色板,則數據是實際的像素值;否則是調色板表項的索引值。當是實際的像素值時,它們按色彩平面和掃描行存儲。其存儲格式為:
第0行 RRRRRR…GGGGGG…BBBBBB…
第1行 RRRRRR…GGGGGG…BBBBBB…
┇ ┇
第n行 RRRRRR…GGGGGG…BBBBBB…
如果有兩個平面,那么色彩是任選的;如果有3個平面,其顏色為RGB;如果有4個平面,則顏色信息包含RGB和光強。光強位只是給像素一種名義上的較高亮度。
當使用調色板時,數據指調色板的索引值,它們構成一個完整的圖像平面,即不會被分解為單獨的色彩平面。數據將按如下的簡單方式排列(i是調色板中的索引值):
第0行 iiiiiiiiiiiii…
第1行 iiiiiiiiiiiii…
┇ ┇
第n行 iiiiiiiiiiiii…
i的長度取決於每像素的位數,如每像素位數為4,則i就是半個位元組長。
PCX的編碼是以最大64個重複單元為一組進行壓縮的,不論要記錄的是何種類型的數據,都使用同樣的遊程長度壓縮算法。在掃描行中有編碼間隔標誌,但是,在一個掃描行中的色彩平面之間沒有間隔標誌。同樣,也沒有分隔設定來標識一個掃描行結束。
4. PCX圖像的調色板任何PCX檔案,如果像素位數超過1但又只有一個色彩平面,則都需要使用調色板。PCX圖像由3種不同的調色板實現。版本代碼為5的檔案最容易確認。如果有一個色彩平面,則它們會在檔案結尾處使用256色的“VGA”調色板。其他的基於調色板的檔案均使用頭調色板,而頭調色板又有兩種可能的實現,即EGA和CGA。三種不同的調色板介紹如下。
(1)位於檔案末尾的256色“VGA”調色板256色的調色板從檔案末尾(EOF)前768個位元組開始,而且以十進制碼12(十六進制0C)開始(768=256×1位元組×3,每個R、G和B都是1個位元組)。因此,值為n的像素指向調色板中的“EOF-768+3×n”處;後面3個位元組分別為該像素紅、綠、藍的值。
(2)16色的“EGA/VGA”頭調色板頭調色板位於第16~第63位元組,共48個位元組,數據按3元組組織,具有16組3位元組數據,每個位元組分別對應R、G和B。對於為EGA建立的檔案,每種原色只可以有4級,所以每個位元組提供的256個值的範圍被分成4個區域。每個區域與相應的級相對應:063對應第0級、64~127對應第1級、128~192對應第2級、193~254對應第3級。
(3)“CGA”調色板這種調色板現已過時,在PCX的版本5及更高的版本中不再使用。這中方法只需要位元組16和位元組19的最高位數據。
另外,版本5或更高版本的PCX檔案能夠支持24位真彩色的PCX檔案,其色彩平面為3個位平面。