Budowa pliku BMP


Strona główna | Autor | Borland C++ 5.5 | GUI | Książki | OpenGL | Programy | Projekty | Teksty


Opis

BMP (BitMaP) jest standardowym formatem plików w systemach rodziny Microsoft Windows. Jego podstawową zaletą jest stosunkowo prosta budowa, wadą zaś występowanie odmiennych wersji dla systemu Windows i OS/2. Poniżej przedstawię budowę pliku BMP w systemie Windows.

Nagłówek pliku BMP zajmuje 14 początkowych bajtów pliku. Budowę nagłówka pliku pokazuje poniższa tabela:

Nazwa pola Długość w bajtach Opis
bfType 2 pole służy do sprawdzenia, czy plik jest zapisany w formacie BMP i powinno zawierać napis 'BM'
bfSize 4 określenie długości pliku w bajtach
bfReserved1 2 zarezerwowane (zera)
bfReserved2 2 zarezerwowane (zera)
bfOffBits 4 położenie obszaru danych względem początku pliku

Za nagłówkiem pliku BMP znajduję się nagłówek rysunku liczący 40 bajtów. Budowę nagłówka rysunku przedstawia poniższa tabela:

Nazwa pola Długość w bajtach Opis
biSize 4 długość nagłówka rysunku (40)
biWidth 4 szerokość rysunku w punktach
biHeight 4 wysokość rysunku w punktach
biPlanes 2 liczba planów w urządzeniu docelowym, zawsze równa 1
biBitCount 2 pole określa ile kolejnych bitów z obszaru danych opisuje kolor jednego punktu rysunku. Jednocześnie informuje ono, ile maksymalnie kolorów zawiera paleta kolorów. Pole to może przyjmować kilka wartości:
  1. obrazek jest dwubarwny, paleta kolorów zawiera opis maksymalnie dwóch barw, każdy bit obszaru danych określa kolor jednego punktu rysunku,
  1. obrazek może mieć maksimum 16 kolorów i taka jest maksymalna liczba barw w palecie kolorów, każde cztery bity obszaru danych określają barwę jednego punktu,
  1. obrazek może mieć maksimum 256 kolorów, paleta zawiera opis maksimum 256 barw, każdy punkt rysunku opisywany jest przez 8 bitów,
  1. rysunek może mieć maksimum 224 = 16.777.216 kolorów (True Color), w tym przypadku nie ma palety kolorów tylko każde trzy bajty obszaru danych określają odpowiednio natężenie koloru czerwonego, zielonego i niebieskiego
  1. rysunek może mieć maksimum 224 = 16.777.216 kolorów (True Color), w tym przypadku nie ma palety kolorów tylko każde cztery bajty obszaru danych określają odpowiednio natężenie koloru czerwonego, zielonego i niebieskiego zaś ostatni bajt może służyć do przechowywania składowej A (Alpha), bądź nie jest wykorzystany
biCompression 4 Pole określa sposób kompresji obszaru danych pliku i może przyjmować jedną z trzech wartości:
  1. brak kodowania,
  1. kodowanie RLE8 (Run Length Encoding 8-Bits),
  1. kodowanie RLE4 (Run Length Encoding 4-Bits).
biSizeImage 4 długość obszaru danych w bajtach
biXPelsPerMeter 4 rozdzielczość pozioma obrazka w punktach na metr
biYPelsPerMeter 4 rozdzielczość pionowa obrazka w punktach na metr
biClrUsed 4 pole określa ile kolorów z palety jest wykorzystywanych w rysunku, wartość zero oznacza, że wykorzystywana jest cała paleta, w trybie True Color (24-bitowym) zmienna ta określa wielkość tabeli kolorów, która wystarcza, aby program wczytujący rysunek mógł pomieścić użyte w rysunku kolory
biClrImportant 4 pole określa ile kolorów wystarcza, aby możliwie poprawnie wyświetlić rysunek, zaleca się aby kolory w palecie były uszeregowane według malejącego znaczenia w rysunku, zero oznacza, że cała paleta jest istotna

Po nagłówku rysunku plik BMP zawiera paletę (oczywiście poza trybem 24-bitowym) określająca kolory punktów. Na kolor punktu składają się trzy składowe: niebieska (Blue), zielona (Green) i czerwona (Red). Każdy kolor palety zajmuje 4 bajty - ostatni bajt jest niewykorzystany ale przyśpiesza to operacje na procesorach 32-bitowych.

Po palecie kolorów plik BMP zawiera obszar danych poszczególnych punktów rysunku. Punkty rysunku są zapisane wierszami od najniższego do najwyższego w kolejności od lewej do prawej, zatem lewy dolny róg rysunku jest zapisany na początku obszaru danych, a prawy górny - na końcu. Wielkość każdego punktu jest określona przez pole biBitCount w nagłówku obrazu. Niezależnie od szerokości rysunku, każdy jego wiersz zajmuje wielokrotność czterech bajtów, a niewykorzystana końcówka wypełniona jest zerami.

Standardowo pliki BMP wykorzystywane w systemie Windows nie mają skompresowanego obszaru danych obrazu. Z uwagi na małą popularność tej wersji pliku BMP, mają one zazwyczaj oddzielne rozszerzenie RLE.


Do pobrania


© Janusz Ganczarski
JanuszG@enter.net.pl