Udostępnij przez


Kompresja mapy bitowej

System Windows obsługuje formaty kompresowania map bitowych, które definiują kolory z 8 lub 4 bitami na piksel. Kompresja zmniejsza ilość miejsca na dysku i pamięć wymaganą dla mapy bitowej.

Gdy kompresja elementu członkowskiego struktury nagłówka informacji o mapie bitowej jest BI_RLE8, format kodowania długości przebiegu (RLE) jest używany do kompresowania 8-bitowej mapy bitowej. Ten format można skompresować w trybach zakodowanych lub bezwzględnych. Oba tryby mogą występować w dowolnym miejscu w tej samej mapie bitowej:

  • tryb zakodowany składa się z dwóch bajtów: pierwszy bajt określa liczbę kolejnych pikseli do narysowania przy użyciu indeksu kolorów zawartego w drugim bajtzie. Ponadto pierwszy bajt pary można ustawić na zero, aby wskazać znak ucieczki, który oznacza koniec linii, koniec mapy bitowej lub różnicę, w zależności od wartości drugiego bajtu. Interpretacja ucieczki zależy od wartości drugiego bajtu pary, która może być jedną z następujących wartości.
Wartość Znaczenie
0 Koniec wiersza.
1 Koniec mapy bitowej.
2 Delta. 2 bajty po ucieczce zawierają niepodpisane wartości wskazujące przesunięcie w prawo i w górę następnego piksela z bieżącej pozycji.

 

  • W tryb bezwzględny, pierwszy bajt wynosi zero, a drugi bajt jest wartością w zakresie od 03H do FFH. Drugi bajt reprezentuje liczbę bajtów, z których każda zawiera indeks kolorów pojedynczego piksela. Gdy drugi bajt jest co najmniej dwa, ucieczka ma takie samo znaczenie jak tryb zakodowany. W trybie bezwzględnym każde uruchomienie musi być wyściełane zero, aby kończyć się granicą 16-bitowego wyrazu.

W poniższym przykładzie przedstawiono wartości szesnastkowe 8-bitowej skompresowanej mapy bitowej:

[03 04] [05 06] [00 03 45 56 67 00] [02 78] [00 02 05 01] 
[02 78] [00 00] [09 1E] [00 01] 

Mapa bitowa rozwija się w następujący sposób (dwie cyfry reprezentują indeks kolorów dla pojedynczego piksela):

04 04 04 
06 06 06 06 06 
45 56 67 
78 78 
move current position 5 right and 1 up 
78 78 
end of line 
1E 1E 1E 1E 1E 1E 1E 1E 1E 
end of RLE bitmap 

Gdy element członkowski kompresji jest BI_RLE4, mapa bitowa jest kompresowana przy użyciu formatu kodowania długości przebiegu dla 4-bitowej mapy bitowej, która używa również trybów zakodowanych i bezwzględnych:

  • W trybie zakodowanym pierwszy bajt pary zawiera liczbę pikseli do narysowania przy użyciu indeksów kolorów w drugim bajtzie. Drugi bajt zawiera dwa indeksy kolorów, jeden w wysokiej kolejności 4 bity i jeden w niskiej kolejności 4 bity. Pierwszy z pikseli jest rysowany przy użyciu koloru określonego przez 4 bity o wysokiej kolejności, drugi jest rysowany przy użyciu koloru w niskiej kolejności 4 bitów, trzeci jest rysowany przy użyciu koloru w wysokiej kolejności 4 bitów, a tak dalej, aż wszystkie piksele określone przez pierwszy bajt zostały narysowane.
  • W trybie bezwzględnym pierwszy bajt to zero. Drugi bajt zawiera liczbę kolejnych indeksów kolorów. Kolejne bajty zawierają indeksy kolorów w ich wysokiej i niskiej kolejności 4 bitów, jeden indeks kolorów dla każdego piksela. W trybie bezwzględnym każde uruchomienie musi być wyrównane do granicy wyrazu. Końca linii, końca mapy bitowej i ucieczki różnicowe opisane dla BI_RLE8 dotyczą również kompresji BI_RLE4.

W poniższym przykładzie przedstawiono wartości szesnastkowe 4-bitowej skompresowanej mapy bitowej:

03 04 05 06 00 06 45 56 67 00 04 78 00 02 05 01 
04 78 00 00 09 1E 00 01 

Mapa bitowa rozwija się w następujący sposób (wartości jednocyfrowe reprezentują indeks kolorów dla pojedynczego piksela):

0 4 0 
0 6 0 6 0 
4 5 5 6 6 7 
7 8 7 8 
move current position 5 right and 1 up 
7 8 7 8 
end of line 
1 E 1 E 1 E 1 E 1 
end of RLE bitmap