Przejdź do głównej treści

Formaty plików

Co to jest BMP? Format mapy bitowej w pigułce

BMP to nieskompresowany, bezstratny format map bitowych z Windows. Wyjaśniamy budowę jego nagłówków, głębie kolorów, ograniczenia i sposoby na zmniejszenie plików.

Autor: Hemen Dönüştür Editör EkibiOpublikowano: 8 min czytania

Okładka poradnika o formacie pliku BMP

BMP to jeden z najstarszych i najprostszych formatów obrazów w świecie Windows. Plik BMP zwykle zapisuje piksele na dysku wiersz po wierszu, bez żadnej kompresji. Ta prostota sprawia, że łatwo go odczytać i jest bezstratny, ale ta sama prostota sprawia, że pliki są ogromne. W tym artykule opisujemy, skąd wziął się BMP, co jest w środku pliku, szczegóły dotyczące głębi kolorów i przezroczystości, gdzie wciąż można go dziś spotkać oraz jak konwertować pliki BMP do praktyczniejszych formatów.

Czym jest BMP?

BMP (bitmapa, rozszerzenie .bmp) to rastrowy format plików graficznych oparty na pikselach. W dokumentacji technicznej nazywa się go też DIB, czyli mapą bitową niezależną od urządzenia (device-independent bitmap). „Niezależna od urządzenia” oznacza, że obraz można zinterpretować tak samo bez względu na kartę graficzną czy drukarkę, na której powstał: plik zawiera we własnym nagłówku i tablicy kolorów informacje potrzebne do odczytania kolorów.

Według dokumentacji Win32 firmy Microsoft plik mapy bitowej zaczyna się od struktury BITMAPFILEHEADER, po której następuje BITMAPINFOHEADER, BITMAPV4HEADER lub BITMAPV5HEADER, potem opcjonalna tablica kolorów, a na końcu dane pikseli. Typ MIME to image/bmp.

Krótka historia: od Windows i OS/2 do dziś

BMP powstał w wyniku wspólnej pracy Microsoftu i IBM nad Windows i OS/2 pod koniec lat 80. Mapy bitowe w czasach Windows 1.0 mocno zależały od urządzenia wyjściowego; postać niezależna od urządzenia upowszechniła się wraz z Windows 3.0 w 1990 roku. To z powodu 12-bajtowego nagłówka BITMAPCOREHEADER, zdefiniowanego dla OS/2 Presentation Manager, wciąż mówi się o plikach „OS/2 BMP”.

Z biegiem lat format rozszerzano, dodając pola na końcu nagłówka. Według opisu formatu w Library of Congress wersja 5 pojawiła się wraz z Windows 98 w 1998 roku i umożliwiła zapisywanie w pliku profili kolorów ICC. Typowe dziś rozmiary nagłówków to:

NagłówekRozmiarNajważniejsza nowość
BITMAPCOREHEADER12 bajtówPodstawowa struktura zgodna z OS/2 1.x
BITMAPINFOHEADER40 bajtówNajpopularniejszy nagłówek, od Windows 3.0; pola kompresji i rozdzielczości
BITMAPV4HEADER108 bajtówMaski kolorów, maska alfa i informacje o przestrzeni kolorów
BITMAPV5HEADER124 bajtyOsadzone lub połączone profile ICC, intencja renderowania

Czytniki rozpoznają, który nagłówek jest używany, po wartości rozmiaru w jego pierwszym polu. Dzięki temu starsze programy mogą pominąć nowsze pola i nadal odczytać podstawowe dane.

Co jest w środku pliku BMP

Nagłówek pliku i sygnatura „BM”

Każdy plik BMP zaczyna się od 14-bajtowego nagłówka pliku, a jego pierwsze dwa bajty to znaki ASCII BM (szesnastkowo 42 4D). Nagłówek przechowuje całkowity rozmiar pliku i przesunięcie w bajtach, od którego zaczynają się dane pikseli. DIB umieszczony w schowku Windows (format CF_DIB) pomija te 14 bajtów i zaczyna się bezpośrednio od nagłówka informacyjnego.

Nagłówek informacyjny

Nagłówek informacyjny zawiera szerokość, wysokość, liczbę bitów na piksel (biBitCount), typ kompresji, rozdzielczość poziomą i pionową (w pikselach na metr) oraz liczbę kolorów używanych w tablicy kolorów.

Tablica kolorów (paleta)

W obrazach o 8 lub mniej bitach na piksel piksel nie jest kolorem, lecz indeksem w tablicy kolorów. W przykładzie z dokumentacji Microsoftu mapa bitowa 32x32 z 16 kolorami ma tablicę pikseli o wielkości 32 x 32 x 4 = 4096 bitów, bo do zaadresowania 16 kolorów wystarczą 4 bity.

Dane pikseli: wiersze od dołu i wyrównanie do 4 bajtów

BMP ma dwie nietypowe cechy. Po pierwsze, jeśli wysokość jest dodatnia, wiersze są zapisywane od dołu do góry: pierwszy wiersz w pliku to dolny wiersz obrazu. Ujemna wysokość oznacza zapis od góry do dołu, ale takich obrazów nie można kompresować. Po drugie, każdy wiersz jest dopełniany do wielokrotności 4 bajtów. Microsoft podaje długość wiersza (stride) jako:

stride = ((width * bitCount + 31) & ~31) >> 3
imageSize = |height| * stride

W przypadku obrazu 1920x1080 w 24 bitach każdy wiersz ma 1920 x 3 = 5760 bajtów (to już wielokrotność 4), więc dane pikseli zajmują 5760 x 1080 = 6 220 800 bajtów. Razem z 54 bajtami nagłówków plik ma około 6,2 MB. Ten sam obraz jako JPG to zwykle niewielki ułamek tej wielkości.

Głębia kolorów, kompresja i przezroczystość

Dokumentacja BITMAPV5HEADER definiuje 1, 4, 8, 16, 24 i 32 bity na piksel (wartość 0 oznacza, że głębia wynika z osadzonych danych JPEG lub PNG). 1 bit to czerń i biel, 4 bity to 16 kolorów, a 8 bitów to paleta 256 kolorów. Przy 24 bitach każdy piksel to trzy bajty w kolejności niebieski, zielony, czerwony.

Pole kompresji może przyjmować następujące wartości:

  • BI_RGB: brak kompresji. W praktyce zdecydowana większość plików BMP.
  • BI_RLE8 i BI_RLE4: proste kodowanie długości serii dla obrazów z paletą 8- i 4-bitową. Przydatne przy dużych jednolitych obszarach, prawie bezużyteczne przy zdjęciach.
  • BI_BITFIELDS: to nie kompresja; maski określają, gdzie w pikselach 16- i 32-bitowych znajdują się bity czerwieni, zieleni i błękitu (np. RGB 565).
  • BI_JPEG i BI_PNG: pozwalają umieścić dane JPEG lub PNG wewnątrz mapy bitowej. Rzadko obsługiwane przez uniwersalne przeglądarki obrazów.

Przezroczystość to najbardziej niespójny obszar BMP. Maska alfa w nagłówkach V4 i V5 może zdefiniować czwarty bajt 32-bitowego piksela jako krycie, ale w klasycznym 32-bitowym BMP ten bajt jest opisany jako nieużywany i wiele programów go ignoruje. Dlatego 32-bitowy BMP, który w jednym programie wygląda na przezroczysty, a w innym leży na czarnym tle, nie jest niczym niezwykłym. Jeśli potrzebujesz przezroczystości, PNG jest znacznie bezpieczniejszym wyborem.

Obsługa w systemach, przeglądarkach i programach

BMP otwiera się niemal wszędzie. Odczytują go wbudowane przeglądarki obrazów Windows i Paint, Podgląd w macOS oraz popularne przeglądarki w Linuksie. Przewodnik MDN po formatach obrazów podaje obsługę BMP we wszystkich wersjach Chrome, Edge, Firefox, Opera i Safari. Ten sam przewodnik podkreśla też, że nieskompresowane pliki BMP są bardzo duże w porównaniu z PNG czy JPG i generalnie należy unikać ich w treściach stron internetowych.

Gdzie używa się dziś BMP?

  • Zasoby aplikacji Windows i starsze oprogramowanie: obrazy pasków narzędzi, grafiki kreatorów instalacji i niektóre zasoby gier wciąż są w BMP.
  • Systemy wbudowane i mikrokontrolery: urządzenie z wyświetlaczem nie potrzebuje dekodera JPEG; dane pikseli można skopiować prosto na ekran.
  • Kamery przemysłowe, skanery i narzędzia testowe: gdy potrzebny jest surowy, bezstratny wynik, BMP jest prostym formatem pośrednim.
  • Nauczanie: z nagłówkiem liczącym zaledwie kilkadziesiąt bajtów BMP jest często pierwszym formatem, który studenci odczytują i zapisują na zajęciach z przetwarzania obrazów.

Zalety i wady

ZaletyWady
Bezstratny; wartości pikseli nigdy się nie zmieniająBrak kompresji, więc pliki są bardzo duże
Banalny w odczycie i zapisie, bez obciążenia procesoraNiespójna obsługa przezroczystości
Otwiera się w niemal każdym systemie operacyjnym i przeglądarceSłaba obsługa metadanych (EXIF, opisy)
Tryby z paletą pasują do urządzeń o małych zasobachNiepraktyczny w sieci, poczcie e-mail i formularzach przesyłania

Typowe problemy i jak je rozwiązać

Plik jest za duży na e-mail lub formularz przesyłania

To najczęstszy problem. W przypadku zdjęć i skanów konwersja BMP do JPG zwykle zmniejsza rozmiar o rząd wielkości lub więcej. W przypadku zrzutów ekranu, diagramów lub czegokolwiek z tekstem lepsza jest konwersja BMP do PNG: PNG też jest bezstratny, ale skompresowany, i nie dodaje szumu, jaki JPG tworzy wokół ostrych krawędzi.

32-bitowy BMP pokazuje czarne tło

Program nie rozpoznaje bajtu alfa albo odczytuje go błędnie. Zwykle pomaga konwersja do PNG. Przy konwersji do JPG, który nie ma przezroczystości, przezroczyste obszary są wypełniane bielą lub wybranym przez Ciebie kolorem.

Obraz jest do góry nogami lub przekrzywiony

We własnoręcznie napisanym czytniku zwykle wynika to z dwóch błędów: pominięcia faktu, że wiersze są zapisane od dołu, albo niepominięcia bajtów dopełnienia na końcu każdego wiersza. Użycie podanego wyżej wzoru na stride i sprawdzenie znaku wysokości zapobiega obu.

Program odmawia otwarcia pliku BMP

Pliki BMP z kompresją RLE, BI_BITFIELDS lub osadzonymi danymi JPEG/PNG nie są obsługiwane przez niektóre proste czytniki. Ponowny zapis jako nieskompresowany 24-bitowy BMP albo konwersja do PNG usuwa problem ze zgodnością.

Wskazówki dotyczące konwersji

  • JPG do zdjęć, PNG do grafik: przy porzucaniu BMP obowiązuje zwykła zasada. Do sieci możesz też wybrać WebP lub AVIF w konwerterze obrazów.
  • Utrzymuj wysoką jakość: ponieważ BMP jest bezstratny, jakość JPG na poziomie 85-90% daje wynik trudny do odróżnienia od oryginału.
  • W razie potrzeby zmniejsz: jeśli plik nadal jest duży, zmniejsz wymiary w pikselach albo użyj narzędzia do kompresji obrazów, aby osiągnąć docelowy rozmiar.
  • W drugą stronę: jeśli urządzenie wbudowane lub starszy program potrzebuje BMP, wybierz BMP jako format docelowy w konwerterze obrazów. Nasze narzędzia zapisują standardowy nieskompresowany 24-bitowy BMP; przezroczyste obszary są spłaszczane na wybranym przez Ciebie kolorze tła.

Nasze strony konwersji BMP działają w Twojej przeglądarce: plik nie jest przesyłany i nigdy nie opuszcza Twojego urządzenia.

Najczęściej zadawane pytania

Czy BMP i DIB to to samo?

W praktyce tak. DIB to niezależna od urządzenia struktura mapy bitowej, której Windows używa w pamięci i w schowku; plik BMP to ta sama struktura poprzedzona 14-bajtowym nagłówkiem pliku.

Czy BMP jest bezstratny?

Tak. Nieskompresowane i kompresowane metodą RLE pliki BMP zachowują wartości pikseli dokładnie. Jedynym wyjątkiem jest rzadko spotykany BMP z osadzonymi danymi JPEG.

Czy konwersja BMP do PNG obniża jakość?

Nie. PNG także jest bezstratny; obraz pozostaje identyczny i jedynie się zmniejsza, bo jest skompresowany.

Czy mogę używać BMP na stronie internetowej?

Przeglądarki wyświetlają BMP, ale pliki są niepotrzebnie duże i spowalniają strony. Do sieci używaj JPG, PNG, WebP lub AVIF.

Czy BMP obsługuje przezroczystość?

32-bitowy BMP teoretycznie może zawierać kanał alfa, ale programy nie obsługują go spójnie. Gdy potrzebujesz przezroczystości, bezpieczniejszym wyborem jest PNG.

Źródła

Powiązane konwertery

Wszystkie artykuły