pcx
ZSOFT公司開發的圖像檔格式
PCX是一種由美國喬治亞州的ZSoft公司所開發的圖像檔格式,原本是該公司的PC Paintbrush軟體的文件格式(PCX代表PC Paintbrush Exchange),卻成了最廣泛接受的DOS圖像標準之一,然而這種使用格式已經被其他更複雜的圖像格式如GIF、JPEG、PNG漸漸取代。
PCX格式是ZSOFT公司在開發圖像處理軟體Paintbrush時開發的一種格式,基於PC的繪圖程序的專用格式,一般的桌面排版、圖形藝術和視頻捕獲軟體都支持這種格式。PCX支持256色調色板或全24位的RGB,圖像大小最多達64K*64K像素。不支持CMYK或HSI顏色模式,photoshop等多種圖像處理軟體均支持PCX格式。 PCX壓縮屬於無損壓縮。
PCX這種圖像文件的形成是有一個發展過程的。最先的PCX雛形是出現在ZSOFT公司推出的名叫PC PAINBRUSH的用於繪畫的商業軟體包中。以後,微軟公司將其移植到 Windows環境中,成為Windows系統中一個子功能。先在微軟的Windows3.1中廣泛應用,隨著Windows的流行、升級,加之其強大的圖像處理能力,使PCX同GIF、TIFF、BMP圖像文件格式一起,被越來越多的圖形圖像軟體工具所支持,也越來越得到人們的重視。
PCX是最早支持彩色圖像的一種文件格式,最高可以支持256種彩色。PCX設計者很有眼光地超前引入了彩色圖像文件格式,使之成為早期的PC時代非常流行的圖像文件格式。
PCX圖像文件由文件頭和實際圖像數據構成。文件頭由128位元組組成,描述版本信息和圖像顯示設備的橫向、縱向解析度,以及調色板等信息:在實際圖像數據中,表示圖像數據類型和彩色類型。PCX圖像文件中的數據都是用PCXREL技術壓縮后的圖像數據。
PCX是PC機畫筆的圖像文件格式。PCX的圖像深度可選為l、4、8bit。由於這種文件格式出現較早,它不支持真彩色。PCX文件採用RLE行程編碼,文件體中存放的是壓縮后的圖像數據。因此,將採集到的圖像數據寫成PCX文件格式時,要對其進行RLE編碼:而讀取一個PCX文件時首先要對其進行RLE解碼,才能進一步顯示和處理。
PCX是Zsoft公司研製的一種常用圖像格式,也是在PC機上使用時間最久的一種點陣圖格式。PCX的最新版本支持24位色彩(256色的調色板或全24位RGB),圖像的大小可達64k×64k個像素。PCX採用遊程長度編碼來壓縮數據,但是有些情況下壓縮效率不高,尤其是對於掃描圖像或視頻圖像。PCX存在許多的版本,其文件頭中的一個代碼標識了文件所支持的Zsoft產品版本,不同版本的圖像特點如表1.1所示。
版本號 | 圖像特點 |
基本的單色(2色)或4色圖像 | |
1 | 基本的單色(2色)或4色圖像,另加16位色圖像 |
2 | 基本的單色(2色)或4色圖像,另加24位調色板的256色以及全24位RGB色圖像 |
3 | 基本的單色(2色)或4色圖像, |
4 | 基本的單色(2色)或4色圖像 |
5 | 基本的單色(2色)或4色、256色圖像以及多平面真彩色圖像 |
文件結構及文件頭PCX圖像由3個部分組成,即文件頭、點陣圖數據和一個多達256種色彩的調色板。PCX文件的文件頭為固定的128位元組。其中包含版本號、被列印或掃描圖像的解析度(單位為每英寸點數)、大小(單位為像素數)、每掃描行位元組數、每像素位數和彩色平面數等信息。文件還可能包括一個調色板以及表明該調色板是灰度還是彩色的一個代碼。文件的核心部分是點陣圖數據。點陣圖數據以類似於Packbits壓縮法的遊程長度壓縮形式記錄,像素值通常是單位元組的索引值,指向調色板中的位置。如果版本號為5,則文件末尾處還有一個單一的位平面和一個RGB值的256色調色板,3種原色各佔1個位元組。
PCX文件頭結構
起始位元組 | 位元組數 | 內容 | 解釋 |
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 | 全空直到文件結束 |
對PCX進行解碼的關鍵因為在一個PCX文件中可以用到幾種不同的記錄方法,因此其中必須包含所用方法的標誌。在對PCX進行解釋時,單靠讀取版本號是不夠的,最可靠的標誌是每像素的位數(文件頭的第3個位元組)和色彩平面數(文件頭的第65個位元組),這兩個標誌與圖像色彩數的對應關係如表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圖像所使用的調色板類型。
PCX圖像數據存儲
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個重複單元為一組進行壓縮的,不論要記錄的是何種類型的數據,都使用同樣的遊程長度壓縮演演算法。在掃描行中有編碼間隔標誌,但是,在一個掃描行中的色彩平面之間沒有間隔標誌。同樣,也沒有分隔符來標識一個掃描行結束。
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個位平面。