Windows Bitmap
| Rozszerzenia pliku |
|
|---|---|
| Typ MIME |
|
| Typ | |
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[1], 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[1]. 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[2] (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[3]. |
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:
|
| 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:[1]
| 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.[1] Można tu wyodrębnić 2 przypadki:[1]
- 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.[1]
Linie obrazu zapisywane są od dołu do góry.[1]
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
- ↑ a b c d e f g Marek Sawicki. BMP - format plików graficznych. „Bajtek”. 11/92 (87), s. 25-27, listopad 1992. [dostęp 2026-02-18].
- ↑ MSDN - BITMAPINFOHEADER: BI_ALPHABITFIELDS w członie biCompression (ang.)
- ↑ MSDN Typy nagłówków bitmapy (ang.)
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.