Windows Bitmap („BMP“) oder device-independent bitmap (DIB) ist ein zweidimensionales Rastergrafikformat, das für die Betriebssysteme Microsoft Windows und OS/2 entwickelt und mit Windows 3.0 eingeführt wurde. Die Dateiendung ist .bmp, seltener .dib.
Inhaltsverzeichnis |
BMPs gibt es in drei verschiedenen Versionen. Die meisten BMP-Dateien liegen in der Version 3 vor; es gibt keine früheren Versionen. Die späteren Versionen 4 und 5 sind höchst selten anzutreffen.
Windows-Bitmaps (der Version 3) erlauben Farbtiefen von 1, 4, 8, 16, 24 oder 32 bpp (wobei bei 16 und 32 bpp nicht alle Bits tatsächlich genutzt werden müssen). Alphakanäle, Farbkorrektur und Metadaten werden nicht unterstützt. Windows-Bitmaps werden entweder unkomprimiert oder verlustfrei mit RLE-Komprimierung (Lauflängenkodierung) gespeichert. Dies ist ein eher schwaches Verfahren, sodass BMP-Dateien wesentlich größer sind als andere Formate wie PNG und kaum für das World Wide Web genutzt werden. Dafür ist das BMP-Format relativ einfach aufgebaut. BMPs sind vor allem im Windows-Umfeld weit verbreitet; gängige Grafiksoftware unterstützt das Format problemlos (mit Ausnahme der eher exotischen Farbtiefen 16 und 32 bpp).
| Dateikopf (BITMAPFILEHEADER) |
| Informationsblock (BITMAPINFO):
|
| Eventuell: Ungenutzter Platz |
| Bilddaten |
| Eventuell: Ungenutzter Platz |
BMP-Dateien bestehen aus drei Teilen: dem Dateikopf, dem Informationsblock und den Bilddaten (siehe Schema rechts).
Im folgenden bezeichnet WORD einen 16-Bit-vorzeichenlosen Integer, DWORD einen 32-Bit-vorzeichenlosen Integer und LONG einen im Zweierkomplement kodierten 32-Bit-Integer. BMP verwendet die Little-Endian-Konvention.
| BITMAPFILEHEADER (Größe: 14 Byte) | ||||
|---|---|---|---|---|
| Offset (Byte) |
Datentyp | Größe | Name | Inhalt |
| 0 | WORD | 2 Byte | bfType | ASCII-Zeichenkette "BM" (Dezimalwert 19778). |
| 2 | DWORD | 4 Byte | bfSize | Größe der BMP-Datei in Byte. (unzuverlässig) |
| 6 | DWORD | 4 Byte | bfReserved | 0 |
| 10 | DWORD | 4 Byte | bfOffBits | Offset der Bilddaten in Byte vom Beginn der Datei an. |
Der Informationsblock beginnt mit folgender Struktur, die die Bitmap-Eigenschaften enthält:
| BITMAPINFOHEADER (Größe: 40 Byte) | ||||
|---|---|---|---|---|
| Offset (Byte) |
Datentyp | Größe | Name | Inhalt |
| 14 | DWORD | 4 Byte | biSize | 40 (Größe der BITMAPINFOHEADER-Struktur in Byte) |
| 18 | LONG | 4 Byte | biWidth | Breite der Bitmap in Pixel. |
| 22 | LONG | 4 Byte | biHeight | Der Betrag gibt die Höhe der Bitmap in Pixel an.
|
| 26 | WORD | 2 Byte | biPlanes | 1 (Stand in einigen älteren Formaten wie PCX für die Anzahl der Farbebenen, wird aber für BMP nicht verwendet) |
| 28 | WORD | 2 Byte | biBitCount | Gibt die Farbtiefe der Bitmap in bpp an; muss einer der folgenden Werte sein: 1, 4, 8, 16, 24 oder 32. Bei 1, 4 und 8 bpp sind die Farben indiziert. 16 und 32 bpp sind ungebräuchlich. |
| 30 | DWORD | 4 Byte | biCompression | Einer der folgenden Werte:
|
| 34 | DWORD | 4 Byte | biSizeImage |
|
| 38 | LONG | 4 Byte | biXPelsPerMeter | Horizontale Auflösung des Zielausgabegerätes in Pixel pro Meter; wird aber für BMP-Dateien meistens auf 0 gesetzt. |
| 42 | LONG | 4 Byte | biYPelsPerMeter | Vertikale Auflösung des Zielausgabegerätes in Pixel pro Meter; wird aber für BMP-Dateien meistens auf 0 gesetzt. |
| 46 | DWORD | 4 Byte | biClrUsed |
|
| 50 | DWORD | 4 Byte | biClrImportant |
|
Wenn biCompression=BI_BITFIELDS, dann folgen 3 DWORDs, die Bitmasken für die Rot-, Grün- und Blauwerte enthalten. Gesetzte Bits bedeuten, dass in den Daten eines Pixels jenes Bit für den jeweiligen Farbkanal verwendet wird. Dabei müssen folgende Bedingungen erfüllt sein:
Jeder Eintrag der Farbtabelle ist 4 Byte groß und enthält jeweils ein Byte für den Blau-, Grün- und Rotanteil, sowie ein auf 0 gesetztes Byte (in dieser Reihenfolge!).
Die Bilddaten beginnen am Offset bfOffBits. Die Größe der Bilddaten beträgt biWidth×biHeight×biBitCount/8 wenn biCompression=BI_RGB, ansonsten biSizeImage.
Die Bilddaten werden Zeile für Zeile gespeichert. Wenn biHeight positiv ist, beginnen die Bilddaten mit der letzten und enden mit der ersten Bildzeile, ansonsten ist es umgekehrt.
Das weitere Format der Bilddaten hängt vom Wert des biCompression-Felds ab:
| 0: | Ende der Bildzeile. |
| 1: | Ende der Bitmap. |
| 2: | Verschiebung der aktuellen Pixelposition. Die beiden nächsten Bytes geben die Verschiebung nach rechts und nach unten an. |
| n=3-255: | Die folgenden n Bytes (bei BI_RLE4: die folgenden n Nibbles) werden direkt übernommen; der nächste Datensatz findet sich am darauffolgenden geraden Offset (vom Start der Bilddaten aus gezählt). |
Microsoft hat mit Windows 95 und Windows 98 neuere Versionen 4 und 5 des BMP-Formates eingeführt, die Alphakanäle und Farbkorrektur ermöglichen und als Containerformat für PNG- und JFIF-Dateien verwendet werden können. Diese neuen Formate sind jedoch nur sehr selten als eigenständige Dateien anzutreffen und werden kaum von Anwendungen unterstützt; sie finden eher als internes Format in Windows-Programmen Verwendung.