Windows Bitmap

Windows Bitmap
Ikona formatu
Rozszerzenia pliku

.bmp, .dib

Typ MIME

image/x-portable-bitmap
image/x-ms-bmp (nieoficjalny)
image/x-bmp (nieoficjalny)

Typ

grafika rastrowa

BMPformat 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 strukturyOpcjonalna?RozmiarPrzeznaczenieKomentarz
Nagłówek plikuNie14 BajtówPrzechowuje najważniejsze informacje o pliku.Jest zbędny po załadowaniu obrazka do pamięci.
Nagłówek DIBNieRóż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 bitowaTak3 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ówZależy od liczby kolorówRóżny rozmiarDefiniuje kolory użyte przez obraz (tablicę pikseli)Występuje wtedy, gdy głębia kolorów ≤ 8
Gap1TakRóżny rozmiarStruktura dostosowującaArtefakty znajdujące się, aż do offsetu pliku dla tablicy pikseli znajdującego się w nagłówku pliku.
Tablica pikseliNieRóżny rozmiarDefiniuje wartości poszczególnych pikseliFormat 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.
Gap2TakRóżny rozmiarStruktura dostosowującaArtefakty znajdujące się, aż do offsetu danych ICC znajdującego się w nagłówku DIB.
Profil kolorów ICCTakRóżny rozmiarDefiniuje profil kolorów dla systemu zarządzania koloremMoż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[2].

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#RozmiarPrzeznaczenie
0000h2 bajtypoczą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
0002h4 bajtyOznacza rozmiar całego pliku w bajtach
0006h2 bajtyzarezerwowany; zależy od aplikacji, która tworzy obraz
0008h2 bajtyzarezerwowany; zależy od aplikacji, która tworzy obraz
000Ah4 bajtyOffset, tzn. początkowy adres bitów 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.

RozmiarNazwa nagłówkaWspierane systemy operacyjneDodane funkcjonalności (rosnąco)w plikach stworzonych przez program
12BITMAPCOREHEADER
OS21XBITMAPHEADER
OS/2 i wszystkie wersje Windows począwszy od Windows 3.0
64BITMAPCOREHEADER2
OS22XBITMAPHEADER
OS/2Dodaje pół-tonowanie. Dodaje kompresje RLE oraz Huffman 1D.
40BITMAPINFOHEADERwszystkie wersje Windows począwszy od Windows 3.0Likwiduje kompresje RLE-24 oraz Huffman 1D. Dodaje obsługę 16bpp oraz 32bpp pikseli. Dodaje opcjonalną maskę bitów RGB.Adobe Photoshop
52BITMAPV2INFOHEADERBrak danych.Usuwa opcjonalną maskę bitów RGB. Dodaje obowiązkową maskę bitów RGB.
56BITMAPV3INFOHEADERBrak danych.Dodaje obowiązkową maskę bitową dla kanału alfa.Adobe Photoshop
108BITMAPV4HEADERwszystkie wersje Windows począwszy od 95/NT4Dodaje typ przestrzeni barw oraz korekcje gamma.
124BITMAPV5HEADERWindows 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
NazwaOpis zawartości
144biSizeWielkość nagłówka informacyjnego. Długość stąd do końca nagłówka – 40, czasem mniej
184biWidthSzerokość obrazu w pikselach
224biHeightWysokość obrazu w pikselach
262biPlanesLiczba warstw kolorów, zwykle 1
282biBitCountLiczba bitów na piksel
304biCompressionAlgorytm kompresji
344biSizeImageRozmiar samego rysunku
384biXPelsPerMeterRozdzielczość pozioma
424biYPelsPerMeterRozdzielczość pionowa
464biClrUsedLiczba kolorów w palecie
501biClrImportantLiczba 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.
511biClrRotationFlaga sygnalizująca, czy ma następować rotacja palety (domyślnie 0 – brak rotacji). Jeśli flaga jest ustawiona na 1, następuje podmiana palety.
522biReserved

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

Media użyte na tej stronie

Bmp.png
Autor: unknown, Licencja: GPL