Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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