Windows Bitmap
Rozszerzenia pliku |
.bmp, .dib |
---|---|
Typ MIME |
image/x-portable-bitmap |
Typ |
BMP – to jeden z formatów plików z grafiką bitmapową. Opracowany pierwotnie jako natywny 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 tylko tryb RGB.
Struktura pliku BMP
Plik BMP składa się z trzech części:
- nagłówka
- palety typu RGB (opcjonalna)
- danych obrazowych
Nagłówek pliku BMP składa się z 54 bajtów i zbudowany jest w następujący sposób:
Offset względem początku pliku |
Rozmiar w bajtach |
Nazwa | Opis zawartości |
0 | 2 | bfType | Sygnatura pliku, zawsze przyjmuje wartość BM |
2 | 4 | bfSize | Długość całego pliku w bajtach |
6 | 2 | bfReserved1 | Pole zarezerwowane, zwykle ma wartość 0 |
8 | 2 | bfReserved2 | Pole zarezerwowane, zwykle ma wartość 0 |
10 | 4 | bfOffBits | Pozycja danych obrazowych w pliku |
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 |
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
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 [6bitów B][5bitó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].