Windows Bitmap
|
Rozszerzenia pliku
|
.bmp , .dib
|
Typ MIME
|
image/x-portable-bitmap
image/x-ms-bmp (nieoficjalny)
image/x-bmp (nieoficjalny)
|
Typ
|
grafika rastrowa
|
BMP – format pliku z grafiką bitmapową. Opracowany pierwotnie dla systemu OS/2, wykorzystywany później także w interfejsach systemów z rodziny Microsoft Windows, jednak jako wolny od patentów jest dostępny i – mimo dużych rozmiarów – popularny jako format przechowywania danych również na wszystkich pozostałych platformach. Zawiera w sobie prostą kompresję bezstratną RLE (która nie musi być użyta), informację o użytych kolorach. Obsługuje tryby RGB oraz RGBA.
Struktura pliku BMP
Plik BMP składa się z kilku części:
Nazwa struktury
|
Opcjonalna?
|
Rozmiar
|
Przeznaczenie
|
Komentarz
|
Nagłówek pliku
|
Nie
|
14 Bajtów
|
Przechowuje najważniejsze informacje o pliku.
|
Jest zbędny po załadowaniu obrazka do pamięci.
|
Nagłówek DIB
|
Nie
|
Różny rozmiar (istnieje 7 różnych wersji tego nagłówka)
|
Przechowuje najważniejsze informacje o obrazie i definiuje format piksela.
|
Występuje bezpośrednio po nagłówku pliku.
|
Dodatkowa maska bitowa
|
Tak
|
3 lub 4 DWORD[1] (12 lub 16 bajtów)
|
Definiuje format piksela.
|
Występuje tylko wtedy, gdy nagłówek DIB jest w formacie BITMAPINFOHEADER.
|
Tablica kolorów
|
Zależy od liczby kolorów
|
Różny rozmiar
|
Definiuje kolory użyte przez obraz (tablicę pikseli)
|
Występuje wtedy, gdy głębia kolorów ⩽ 8
|
Gap1
|
Tak
|
Różny rozmiar
|
Struktura dostosowująca
|
Artefakty znajdujące się, aż do offsetu pliku dla tablicy pikseli znajdującego się w nagłówku pliku.
|
Tablica pikseli
|
Nie
|
Różny rozmiar
|
Definiuje wartości poszczególnych pikseli
|
Format piksela zdefiniowany jest w nagłówku DIB lub w dodatkowej masce bitowej. Każdy wiersz tablicy pikseli jest wyrównany do wielokrotności 4 bajtów.
|
Gap2
|
Tak
|
Różny rozmiar
|
Struktura dostosowująca
|
Artefakty znajdujące się, aż do offsetu danych ICC znajdującego się w nagłówku DIB.
|
Profil kolorów ICC
|
Tak
|
Różny rozmiar
|
Definiuje profil kolorów dla systemu zarządzania kolorem
|
Może zawierać ścieżkę do zewnętrznego pliku przechowującego profil kolorów. Po załadowaniu do pamięci jako „nie-spakowany DIB” znajduje się między tablicą kolorów a Gap1.
|
Nagłówek pliku
Ten blok znajduje się na początku pliku i jest używany do jego identyfikacji. Używa się go po to, by sprawdzić, czy jest to plik BMP i czy nie jest on uszkodzony. Pierwszymi dwoma bajtami w formacie BMP są znaki „B”, oraz „M” w kodowaniu ASCII. Wszystkie wartości całkowite są przechowywane w formacie little-endian (tj. najmniej znaczący bajt umieszczony jako pierwszy).
Offset#
|
Rozmiar
|
Przeznaczenie
|
0000h
|
2 bajty
|
początek nagłówka używany do identyfikacji pliku BMP, DIB. Najczęściej wynosi 0x42 0x4D w systemie szesnastkowym, odpowiada to znakom BM w kodzie ASCII. Możliwe wartości:
- BM – Windows 3.1x, 95, NT, ... itd.
- BA – OS/2 struktura tablicy bitmapy
- CI – OS/2 struktura kolorowej ikony
- &CP – OS/2 stały wskaźnik koloru
- IC – OS/2 struktura ikony
- *PT – OS/2 wskaźnik
|
0002h
|
4 bajty
|
Oznacza rozmiar całego pliku w bajtach
|
0006h
|
2 bajty
|
zarezerwowany; zależy od aplikacji, która tworzy obraz
|
0008h
|
2 bajty
|
zarezerwowany; zależy od aplikacji, która tworzy obraz
|
000Ah
|
4 bajty
|
Offset, tzn. początkowy adres bitów tablicy pikseli.
|
Nagłówek DIB
Ta struktura przekazuje aplikacji informacje o obrazie, który będzie wyświetlany. Nagłówek jest dopasowany do wewnętrznych mechanizmów systemów Windows i OS/2 i posiada 7 różnych wariantów. Wszystkie z nich zawierają pole DWORD (32-bitowe), określające rozmiar nagłówka, dzięki niemu można określić typ nagłówka. Duża liczba wersji nagłówka jest spowodowana tym, że Microsoft rozszerzał informacje w nim zawarte kilka razy. Nowe, rozszerzone nagłówki mogą być używane z niektórymi funkcjami GDI i zapewniają większą funkcjonalność. Odkąd GDI wspomaga funkcję ładowania bitmap, większość aplikacji korzysta z tych funkcji. Jedną z konsekwencji jest to, że format odczytywanych plików zależy od wersji systemu, na którym uruchomiona jest aplikacja.
Rozmiar
|
Nazwa nagłówka
|
Wspierane systemy operacyjne
|
Dodane funkcjonalności (rosnąco)
|
w plikach stworzonych przez program
|
12
|
BITMAPCOREHEADER OS21XBITMAPHEADER
|
OS/2 i wszystkie wersje Windows począwszy od Windows 3.0
|
|
|
64
|
BITMAPCOREHEADER2 OS22XBITMAPHEADER
|
OS/2
|
Dodaje pół-tonowanie. Dodaje kompresje RLE oraz Huffman 1D.
|
|
40
|
BITMAPINFOHEADER
|
wszystkie wersje Windows począwszy od Windows 3.0
|
Likwiduje kompresje RLE-24 oraz Huffman 1D. Dodaje obsługę 16bpp oraz 32bpp pikseli. Dodaje opcjonalną maskę bitów RGB.
|
Adobe Photoshop
|
52
|
BITMAPV2INFOHEADER
|
Brak danych.
|
Usuwa opcjonalną maskę bitów RGB. Dodaje obowiązkową maskę bitów RGB.
|
|
56
|
BITMAPV3INFOHEADER
|
Brak danych.
|
Dodaje obowiązkową maskę bitową dla kanału alfa.
|
Adobe Photoshop
|
108
|
BITMAPV4HEADER
|
wszystkie wersje Windows począwszy od 95/NT4
|
Dodaje typ przestrzeni barw oraz korekcje gamma.
|
|
124
|
BITMAPV5HEADER
|
Windows 98/2000 i nowsze.
|
Dodaje profile kolorów ICC.
|
|
Nagłówek BITMAPINFOHEADER składa się z 40 bajtów i zbudowany jest w następujący sposób:
Offset względem początku pliku
|
Rozmiar w bajtach
|
Nazwa
|
Opis zawartości
|
14
|
4
|
biSize
|
Wielkość nagłówka informacyjnego. Długość stąd do końca nagłówka – 40, czasem mniej
|
18
|
4
|
biWidth
|
Szerokość obrazu w pikselach
|
22
|
4
|
biHeight
|
Wysokość obrazu w pikselach
|
26
|
2
|
biPlanes
|
Liczba warstw kolorów, zwykle 1
|
28
|
2
|
biBitCount
|
Liczba bitów na piksel
|
30
|
4
|
biCompression
|
Algorytm kompresji
|
34
|
4
|
biSizeImage
|
Rozmiar samego rysunku
|
38
|
4
|
biXPelsPerMeter
|
Rozdzielczość pozioma
|
42
|
4
|
biYPelsPerMeter
|
Rozdzielczość pionowa
|
46
|
4
|
biClrUsed
|
Liczba kolorów w palecie
|
50
|
1
|
biClrImportant
|
Liczba ważnych kolorów w palecie (gdy 0, to wszystkie są ważne); pole to stosuje się przy animacji bitmap poprzez rotację kolorów. Oznacza, od którego koloru paleta ma być podmieniana.
|
51
|
1
|
biClrRotation
|
Flaga sygnalizująca, czy ma następować rotacja palety (domyślnie 0 – brak rotacji). Jeśli flaga jest ustawiona na 1, następuje podmiana palety.
|
52
|
2
|
biReserved
|
|
Paleta kolorów
Po części nagłówkowej pliku BMP zazwyczaj znajduje się paleta.
Można tu wyodrębnić 2 przypadki:
- W trybach 8-bitowych paleta zbudowana jest z opisów kolorów, gdzie każdy kolor opisany jest za pomocą 4 bajtów (B, G, R, nieużywany lub alpha). Każdą ze składowych koloru należy podzielić przez 4.
- W trybach o większej liczbie kolorów niż 256 paleta nie występuje, a kolor piksela w obrazie zapisywany jest przy pomocy numeru kolejnego koloru, który jest wyliczany ze wzoru:
- Nr Koloru = R + 256 ⋅ G + 65536 ⋅ B,
- gdzie:
- R – wartość składowej czerwonej,
- G – wartość składowej zielonej,
- B – wartość składowej niebieskiej.
Tabela pikseli
Następnie w pliku znajdują się dane obrazowe.
Linie obrazu zapisywane są od dołu do góry.
W obrazach TrueColor punkty zapisywane są w kolejności B, G, R (trzy bajty), w obrazach o mniejszej liczbie kolorów zapisywane są one na mniejszej ilości bajtów – przykładowo 16-bitowa bitmapa (High Color) zapisuje na dwóch bajtach [5bitów B][6bitów G][5bitów R]. Dla plików z liczbą kolorów mieszczącą się w liczbie ośmiobitowej kolor zapisywany jest jako numer koloru (wskaźnik) w palecie.
Należy zwrócić uwagę, że (poniekąd ze względów historycznych) w wierszu danych pliku BMP jest zawsze zapisana wielokrotność 4 bajtów. Jeśli wiersz danych ma długość (w bajtach) inną niż podzielna przez 4, to dopisuje się bajty o wartości 0, tak aby w danym wierszu ilość bajtów była wielokrotnością 4.
Animowane bitmapy – powstają z cyklicznej podmiany kolorów w palecie, przykładem może być logo startowe systemu Windows. Animowane bitmapy można tworzyć dla obrazów 8-bitowych.
Należy zwrócić szczególną uwagę na zapis kolejnych bajtów danych obrazu: nie jest to [R, G, B], ale [B, G, R].
Zobacz też
Przypisy