PCX - PCX
| Rozszerzenie nazwy pliku |
Rozszerzenie pliku PCX
|
|---|---|
| Rodzaj mediów internetowych |
image/vnd.zbrush.pcx , image/x-pcx (przestarzałe) |
| Opracowany przez | ZSoft Corporation |
| Pierwsze wydanie | 1985 |
| Najnowsze wydanie | 5 (1991 ) |
| Rodzaj formatu | Bezstratny format obrazu bitmapowego |
PCX , skrót od PiCture eXchange , to format pliku obrazu opracowany przez nieistniejącą już firmę ZSoft Corporation z Marietta w stanie Georgia w Stanach Zjednoczonych . Był to natywny format plików dla PC Paintbrush i stał się jednym z pierwszych powszechnie akceptowanych standardów obrazowania DOS , chociaż od tego czasu został zastąpiony przez bardziej wyrafinowane formaty obrazów, takie jak BMP , JPEG i PNG . Pliki PCX zwykle przechowują obrazy z indeksami paletowymi w zakresie od 2 lub 4 kolorów do 16 i 256 kolorów, chociaż format został rozszerzony, aby rejestrować również obrazy w prawdziwych kolorach (24-bitowe).
Formaty obrazów PCX
| Głębokość bitowa | Samoloty | Liczba kolorów |
|---|---|---|
| 4 | 1 | 16 kolorów z palety |
| 8 | 1 | 256 kolorów z palety |
| 8 | 1 | 256 odcieni szarości |
| 4 | 4 | 4096 kolorów z 16 poziomami przezroczystości |
| 8 | 3 | 16,7 miliona, 24-bitowy „True Color” |
| 8 | 4 | 16,7 miliona z 256 poziomami przejrzystości |
| 1 | 1 | 2 kolory monochromatyczne (1-bit) (pędzel Win 3.1) |
| 1 | 4 | 16 kolorów RGBi (4 bity) w 4 płaszczyznach (pędzel Win 3.1) |
PCX został zaprojektowany podczas wczesnego rozwoju sprzętu wyświetlającego do komputerów PC i większość obsługiwanych przez niego formatów nie jest już używana. Tabela A zawiera listę najczęściej używanych formatów PCX. Współczesne programy do edycji obrazów mogą nie czytać plików PCX, które pasują do starszego sprzętu.
PCX jest obsługiwany przez popularne oprogramowanie do przetwarzania obrazu, w tym ACDSee , GIMP , ImageMagick , IrfanView , LView , Netpbm , PaintShop Pro , Photoshop , Visio , PMview , XnView i GraphicConverter . W wersji 2.1.4 FFmpeg mógł kodować i dekodować formaty pikseli PCX rgb24, rgb8, bgr8, rgb4_byte, bgr4_byte, grey, pal8 i monob .
Istnieje wielostronicowa wersja PCX, używana przez niektóre komputerowe programy do zarządzania faksami i dokumentami, z rozszerzeniem pliku .dcx . Plik DCX składa się z nagłówka wprowadzającego zestaw następujących plików PCX.
Format pliku PCX
Pliki PCX zostały zaprojektowane do użytku na komputerach PC kompatybilnych z IBM i zawsze używają małej kolejności bajtów endian . Plik PCX ma trzy główne sekcje w następującej kolejności
- 128-bajtowy nagłówek
- dane obrazu
- (opcjonalnie) paleta 256 kolorów
Nagłówek pliku PCX zawiera bajt identyfikujący (wartość 10), numer wersji, wymiary obrazu, 16 kolorów palety, liczby płaszczyzn kolorów, głębię bitową każdej płaszczyzny oraz wartość metody kompresji. Numery wersji PCX mieszczą się w zakresie od 0 do 5, co pierwotnie oznaczało wersję programu PC Paintbrush używanego do tworzenia pliku PCX. Nagłówek zawsze ma miejsce na 16 kolorów, chociaż liczba użytych kolorów zależy od głębi bitowej obrazu. Nagłówek ma 74 bajty, a dane obrazu zaczynają się 128 bajtów po rozpoczęciu pliku, 54 bajty między nimi nie są używane. Nagłówek składa się z 18 pól:
| Odsunięcie hex | Offset dec | Rozmiar | Cel, powód |
|---|---|---|---|
| 00 | 0 | 1 bajt | Stałe pole nagłówka o wartości szesnastkowej 0x0A (= 10 dziesiętnie).
|
| 01 | 1 | 1 bajt | Numer wersji odnoszący się do wydania oprogramowania Paintbrush, który może być:
|
| 02 | 2 | 1 bajt | Metoda użyta do kodowania danych obrazu. Może być:
|
| 03 | 3 | 1 bajt | Liczba bitów stanowiących jeden piksel na płaszczyźnie. Możliwe wartości to:
|
| 04 | 4 | 2 bajty | Minimalna współrzędna x pozycji obrazu. |
| 06 | 6 | 2 bajty | Minimalna współrzędna y pozycji obrazu. |
| 08 | 8 | 2 bajty | Maksymalna współrzędna x pozycji obrazu. |
| 0A | 10 | 2 bajty | Maksymalna współrzędna y pozycji obrazu. |
| 0C | 12 | 2 bajty | Pozioma rozdzielczość obrazu w DPI. |
| 0E | 14 | 2 bajty | Pionowa rozdzielczość obrazu w DPI. |
| 10 | 16 | 48 bajtów | Paleta EGA dla obrazów 16-kolorowych. |
| 40 | 64 | 1 bajt | Pierwsze zarezerwowane pole, zwykle ustawione na zero. |
| 41 | 65 | 1 bajt | Liczba płaszczyzn kolorów tworzących dane pikseli. Przeważnie wybierany na 1, 3 lub 4. |
| 42 | 66 | 2 bajty | Liczba bajtów jednej płaszczyzny koloru reprezentującej pojedynczą linię skanowania. |
| 44 | 68 | 2 bajty | Tryb, w jakim należy konstruować paletę:
|
| 46 | 70 | 2 bajty | Pozioma rozdzielczość ekranu systemu źródłowego. |
| 48 | 72 | 2 bajty | Rozdzielczość pionowa ekranu systemu źródłowego. |
| 4A | 74 | 54 bajty | Drugie zarezerwowane pole, przeznaczone do przyszłych rozszerzeń i zwykle ustawione na zero bajtów. |
Wszystkie pliki PCX używają tego samego schematu kompresji, a wartość kompresji zawsze wynosi 1. Żadne inne wartości nie zostały zdefiniowane i nie ma nieskompresowanych plików PCX. Jedno ze źródeł twierdzi, że 0 (nieskompresowane) jest dozwolone, ale niewiele oprogramowania je obsługuje .
Układ danych obrazu
| Rząd 0 | RRRRRRRRR |
| GGGGGGGG | |
| BBBBBBBBB | |
| AAAAAAAAA | |
| Rząd 1 | RRRRRRRRR |
| GGGGGGGG | |
| BBBBBBBBB | |
| AAAAAAAAA | |
| Rząd 2 itd. | .... |
Dane obrazu PCX są przechowywane w wierszach lub liniach skanowania w kolejności od góry do dołu. Jeśli obraz ma wiele płaszczyzn, są one przechowywane w jednej płaszczyźnie w wierszu, tak że po wszystkich czerwonych danych w wierszu 0 następują wszystkie zielone dane w wierszu 0, a następnie wszystkie dane w kolorze niebieskim, a następnie dane alfa. Ten wzór jest powtarzany dla każdej linii, jak pokazano w Tabeli B.
Gdy obraz ma mniej niż 8 bitów na piksel, każda linia jest dopełniana do następnej granicy bajtu. Na przykład, jeśli obraz ma 1 płaszczyznę 1-bitowych danych (monochromatycznych) o szerokości 22 pikseli, każdy wiersz będzie miał 3 bajty długości, 24 bity na wiersz i 2 bity niewykorzystane.
Kompresja danych obrazu
Dane obrazu PCX są kompresowane przy użyciu kodowania run-length (RLE), prostego bezstratnego algorytmu kompresji , który łączy serię trzech lub więcej kolejnych bajtów o identycznych wartościach w dwubajtową parę. Dwa najbardziej znaczące bity bajtu są używane do określenia, czy dane dane reprezentują pojedynczy piksel o danym indeksie palety lub wartości koloru, czy też parę RLE reprezentującą serię kilku pikseli jednej wartości:
- jeśli oba bity mają wartość 1, bajt jest interpretowany jako długość przebiegu. Pozostawia to 6 bitów na rzeczywistą wartość długości przebiegu, tj. Zakres wartości 0-63
- w każdym innym przypadku bajt jest interpretowany jako wartość pojedynczego piksela. To pozostawia wszystkie wartości, dla których bit # 7 i bit # 8 nie są jednocześnie 1. To wymaganie nie jest spełniane przez wszystkie wartości 192 (binarne 11000000) i wyższe.
W porównaniu z maksymalną długością przebiegu 128, możliwą przy kompresji TGA RLE, kodowanie długości przebiegu PCX oferuje większy zakres wartości pojedynczego piksela, podczas gdy maksymalna długość przebiegu jest ograniczona do 63.
Ze względu na użycie dwóch najbardziej znaczących bitów jako flag, wartości pikseli od 192 do 255 (z już ustawionym najbardziej znaczącym bitem) muszą być przechowywane w parze bajtów RLE, nawet jeśli występują tylko jeden lub dwa piksele po kolei mając na uwadze, że indeksy kolorów od 0 do 191 mogą być przechowywane bezpośrednio lub w parach bajtów RLE (w zależności od tego, który z nich jest bardziej efektywny przestrzennie); w związku z tym rzeczywisty współczynnik kompresji można zoptymalizować poprzez odpowiednie sortowanie wpisów palet, chociaż nie jest to wykonalne, gdy plik musi współdzielić swoją paletę kolorów z innymi obrazami. Na przykład paletę można zoptymalizować z najczęściej używanymi kolorami występującymi na pozycjach palety od 0 do 191 oraz najmniej powszechnymi kolorami przydzielonymi do pozostałej ćwiartki palety.
Inną nieefektywnością algorytmu RLE jest to, że można przechowywać fragmenty o długości 0, co pozwala na stosowanie białych znaków w pliku. Pozwoliło to na nieco szybszą dekompresję plików PCX na procesorach, dla których był pierwotnie przeznaczony. To dziwactwo można wykorzystać do steganografii .
Algorytm kompresji PCX wymaga bardzo małej mocy procesora lub pamięci do zastosowania, co stanowi poważny problem w systemach komputerowych, gdy został zaprojektowany. Ponieważ komputery i sprzęt wyświetlający stają się coraz bardziej wyrafinowane, algorytm PCX staje się mniej efektywny przestrzennie. Algorytmy kompresji używane w nowszych formatach graficznych są bardziej wydajne podczas kompresji obrazów, takich jak zdjęcia, wygładzona lub w inny sposób złożona grafika.
Paleta kolorów
Plik PCX ma w nagłówku miejsce na 16 paletę kolorów. Kiedy stał się dostępny sprzęt z 256-kolorowym VGA, zabrakło miejsca na paletę w pliku PCX; nawet 54 nieużywane bajty po nagłówku nie wystarczą. Wybranym rozwiązaniem było umieszczenie palety na końcu pliku wraz z bajtem znacznika potwierdzającym jej istnienie.
Jeśli plik PCX ma paletę 256 kolorów, zostanie znaleziony 768 bajtów od końca pliku. W tym przypadku wartość w bajcie poprzedzającym paletę powinna wynosić 12 (0x0C). Paleta jest przechowywana jako sekwencja trójek RGB; jego użyteczna długość jest określona liczbą kolorów obrazu. Wartości kolorów w palecie PCX zawsze używają 8 bitów, niezależnie od głębi bitowej obrazu.