BMP (format)
Z Wikipedii
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 (TM), jednak dostępny 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.
[edytuj] Zobacz też:
[edytuj] Struktura pliku BMP
Plik BMP składa się z trzech części:
- nagłówka
- palety typu RGB (opcjonalna)
- danych obrazowych
Nagłówek pliku BMP 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 pixelach |
22 | 4 | biHeight | Wysokość obrazu w pixelach |
26 | 2 | biPlanes | Liczba płatów, zwykle 0 |
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 | biCrlRotation | 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, nie uż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 pixela w obrazie zapisywany jest przy pomocy numeru kolejnego koloru który jest wyliczany ze wzoru:
Nr Koloru = R+ 256*G+ 65536*B
gdzie to:
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.
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].