Typy nagłówków mapy bitowej
Mapa bitowa ma cztery podstawowe typy nagłówków:
Cztery typy nagłówków map bitowych różnią się rozmiarem elementu członkowskiego, który jest pierwszym DWORD w każdej ze struktur.
Struktura BITMAPV5HEADER jest rozszerzoną strukturą BITMAPV4HEADER, która jest rozszerzoną strukturą BITMAPINFOHEADER. Jednak BITMAPINFOHEADER i BITMAPCOREHEADER mają tylko rozmiar elementu wspólnego z innymi strukturami nagłówków mapy bitowej.
Formaty BITMAPCOREHEAD ER i BITMAPV4HEADER zostały zastąpione odpowiednio przez formaty BITMAPINFOHEAD ER i BITMAPV5HEADER. Formaty BITMAPCOREHEADER i BITMAPV4HEADER są prezentowane pod kątem kompletności i zgodności z poprzednimi wersjami.
Format diB jest następujący (aby uzyskać więcej informacji, zobacz Bitmap Storage ):
- strukturaBITMAPFILEHEADER
- albo BITMAPCOREHEADER, BITMAPINFOHEADER, BITMAPV4HEADERlub struktura BITMAPV5HEADER.
- opcjonalna tabela kolorów, która jest zestawem struktur RGBQUAD lub zestawu struktur RGBTRIPLE.
- dane mapy bitowej
- opcjonalne dane profilu
W tabeli kolorów opisano, jak wartości pikseli odpowiadają wartościom kolorów RGB. RGB to model opisujący kolory generowane przez emitowanie światła.
dane profilu odnoszą się do nazwy pliku profilu (profilu połączonego) lub rzeczywistych bitów profilu (profil osadzony). Format pliku umieszcza dane profilu na końcu pliku. Dane profilu są umieszczane tuż po tabeli kolorów (jeśli są obecne). Jeśli jednak funkcja otrzymuje spakowany DIB, dane profilu są dostarczane po bitach mapy bitowej, podobnie jak w formacie pliku.
Dane profilu będą istnieć tylko dla struktur BITMAPV5HEADER, w których bV5CSType jest PROFILE_LINKED lub PROFILE_EMBEDDED. W przypadku funkcji, które odbierają spakowane bazy danych DIB, dane profilu są dostarczane po danych mapy bitowej.
Palettized urządzenie to każde urządzenie, które używa palet do przypisywania kolorów. Klasycznym przykładem urządzenia paletyzowanego jest wyświetlacz działający w 8-bitowej głębokości koloru (czyli 256 kolorów). Wyświetlanie w tym trybie używa małej tabeli kolorów do przypisywania kolorów do mapy bitowej. Kolory w mapie bitowej są przypisywane do najbliższego koloru na palecie używanej przez urządzenie. Urządzenie palettizowane nie tworzy optymalnej palety do wyświetlania mapy bitowej; używa po prostu dowolnego elementu w bieżącej palecie. Aplikacje są odpowiedzialne za tworzenie palety i wybieranie jej w systemie. Ogólnie rzecz biorąc, 16-, 24-bitowe i 32-bitowe mapy bitowe na piksel (bpp) nie zawierają tabel kolorów (czyli optymalnych palet dla mapy bitowej); aplikacja jest odpowiedzialna za generowanie optymalnej palety w tym przypadku. Jednak 16-, 24-i 32-bpp mapy bitowe mogą zawierać takie optymalne tabele kolorów do wyświetlania na urządzeniach paletyzowanych; w takim przypadku aplikacja musi utworzyć paletę na podstawie tabeli kolorów obecnej w pliku mapy bitowej.
Mapy bitowe o rozmiarze 1, 4 lub 8 bpp muszą mieć tabelę kolorów o maksymalnym rozmiarze w oparciu o bpp. Maksymalny rozmiar 1, 4 i 8 bitów bpp wynosi 2 do potęgi bpp. W związku z tym mapa bitowa 1 bpp ma maksymalnie dwa kolory, mapa bitowa 4 bpp ma maksymalnie 16 kolorów, a mapa bitowa 8 bpp ma maksymalnie 256 kolorów.
Mapy bitowe, które są 16-, 24-lub 32-bpp, nie wymagają tabel kolorów, ale mogą mieć możliwość określenia kolorów dla urządzeń paletyzowanych. Jeśli tabela kolorów jest obecna dla 16-, 24-, lub 32-bpp mapy bitowej, biClrUsed element członkowski określa rozmiar tabeli kolorów, a tabela kolorów musi mieć tyle kolorów. Jeśli biClrUsed wynosi zero, nie ma tabeli kolorów.
Czerwone, zielone i niebieskie maski bitfield dla map bitowych BI_BITFIELD natychmiast podążają za strukturami BITMAPINFOHEADER, BITMAPV4HEADERi BITMAPV5HEADER. Struktury BITMAPV4HEADER i BITMAPV5HEADER zawierają dodatkowe elementy członkowskie dla czerwonych, zielonych i niebieskich masek w następujący sposób.
Członek | Znaczenie |
---|---|
RedMask | Maska kolorów określająca czerwony składnik każdego piksela, ważny tylko wtedy, gdy element członkowski compression jest ustawiony na BI_BITFIELDS. |
GreenMask | Maska kolorów określająca zielony składnik każdego piksela, prawidłowa tylko wtedy, gdy element członkowski kompresji jest ustawiony na BI_BITFIELDS. |
BlueMask | Maska kolorów określająca niebieski składnik każdego piksela, prawidłowa tylko wtedy, gdy element członkowski kompresji jest ustawiony na BI_BITFIELDS. |
Gdy biCompression element członkowski BITMAPINFOHEADER jest ustawiony na BI_BITFIELDS, a funkcja otrzymuje argument typu LPBITMAPINFO, maski kolorów będą natychmiast podążać za nagłówkiem. Jeśli tabela kolorów jest obecna, będzie postępować zgodnie z maskami kolorów. BITMAPCOREHEADER mapy bitowe nie obsługują masek kolorów.
Domyślnie dane mapy bitowej są dolne w formacie. Dolna dół oznacza, że pierwszy wiersz skanowania w danych mapy bitowej jest ostatnim wierszem skanowania, który ma być wyświetlany. Na przykład 0th pikseli 0th scan line of the bitmap data of a 10-pixel by 10-pikselowa mapa bitowa będzie 0th pikseli 9th linii skanowania wyświetlanego lub drukowanego obrazu. Mapy bitowe w formacie RLE (Run-Length Encoded) i BITMAPCOREHEADER mapy bitowe nie mogą być mapami bitowymi w dół. Linie skanowania są wyrównane DWORD, z wyjątkiem map bitowych skompresowanych przez RLE. Muszą być one dopełnione do szerokości linii skanowania w bajtach, które nie są równomiernie podzielne przez cztery, z wyjątkiem skompresowanych map bitowych RLE. Na przykład mapa bitowa 24-bpp 10-pikselowa o rozmiarze 10 pikseli będzie miała dwa bajty wypełnienia na końcu każdego wiersza skanowania.