| Windows Bitmap | |
|---|---|
| Dateiendung: | .bmp, .dib |
| MIME-Type: | image/x-ms-bmp, image/x-bmp, image/bmp |
| Magische Zahl: | 42, 4Dhex BM |
| Entwickelt von: | Microsoft |
| Aktuelle Version | 5 |
| Art: | Rastergrafik |
Windows Bitmap (BMP) oderdevice-independent bitmap (DIB) ist ein zweidimensionalesRastergrafikformat, das für die BetriebssystemeWindows undOS/2 entwickelt und mitMicrosoft Windows 3.0 eingeführt wurde, welches 1990 erschien. DieDateiendung ist.bmp, seltener.dib.
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) erlaubenFarbtiefen von 1, 4, 8, 16, 24 oder 32 bpp (bpp = bits per pixel, Bits je Bildpunkt), wobei bei 16 und 32bpp nicht alleBits tatsächlich genutzt werden müssen.Alphakanäle,Farbkorrektur undMetadaten 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 wiePNG und kaum für dasInternet genutzt werden. Dafür ist das BMP-Format relativ einfach aufgebaut. BMPs sind vor allem im Windows-Umfeld weit verbreitet; gängigeGrafiksoftware unterstützt das Format problemlos (mit Ausnahme der eher exotischen Farbtiefen 16 und 32 bpp).
Die maximale Breite/Höhe eines Bildes beträgt theoretisch je 2.147.483.647 Pixel (231 − 1). In der Praxis akzeptieren viele Decoder nur deutlich niedrigere Werte.[1][2]
| 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 bezeichnetWORD einen 16-Bit-vorzeichenlosenInteger,DWORD einen 32-Bit-vorzeichenlosen Integer undLONG einen imZweierkomplement kodierten 32-Bit-Integer. BMP verwendet dieLittle-Endian-Konvention.
| BITMAPFILEHEADER (Größe: 14 Byte) | ||||||
|---|---|---|---|---|---|---|
| Offset (Byte) | Datentyp | Größe | Name | Inhalt | ||
| Dez | Hex | Windows-Style | C-Style | |||
| 0 | 0 | WORD | uint16_t | 2 Byte | bfType | ASCII-Zeichenkette"BM" (Hex: 0x42 0x4D, Dezimal: 66 77). |
| 2 | 2 | DWORD | uint32_t | 4 Byte | bfSize | Größe der BMP-Datei in Byte. (unzuverlässig) |
| 6 | 6 | DWORD | uint32_t | 4 Byte | bfReserved | Reserviert, von der Software abhängig, standardmäßig 0 |
| 10 | A | DWORD | uint32_t | 4 Byte | bfOffBits | Offset der Bilddaten in Byte vom Beginn der Datei an. Dieser hat nicht immer den Wert 54 (er ergibt sich aus 14 Byte Header + 40 Byte Infoblock) und muss daher dynamisch ausgelesen werden, weil es sonst ggf. zu Fehldarstellungen im Bild kommt. |
Der Informationsblock beginnt mit folgender Struktur, die die Bitmap-Eigenschaften enthält[4][5]
| BITMAPINFOHEADER (Größe: 40 Byte) | ||||||
|---|---|---|---|---|---|---|
| Offset (Byte) | Datentyp | Größe | Name | Inhalt | ||
| Dez | Hex | Windows-Style | C-Style | |||
| 14 | 0E | DWORD | uint32_t | 4 Byte | biSize | Größe der BITMAPINFOHEADER-Struktur in Byte |
| 18 | 12 | LONG | int32_t | 4 Byte | biWidth | Breite der Bitmap in Pixel. Dabei ist das erste Byte niederwertig und das letzte Byte höchstwertig. |
| 22 | 16 | LONG | int32_t | 4 Byte | biHeight | DerBetrag gibt die Höhe der Bitmap in Pixel an. Dabei ist das erste Byte niederwertig und das letzte Byte höchstwertig.
|
| 26 | 1A | WORD | uint16_t | 2 Byte | biPlanes | 1 (Stand in einigen älteren Formaten wiePCX für die Anzahl der Farbebenen, wird aber für BMP nicht verwendet) |
| 28 | 1C | WORD | uint16_t | 2 Byte | biBitCount | Gibt die Farbtiefe der Bitmap inbpp an; muss einer der folgenden Werte sein: 1, 4, 8, 16, 24 oder 32. Bei 1, 4 und 8 bpp sind die Farbenindiziert. |
| 30 | 1E | DWORD | uint32_t | 4 Byte | biCompression | Einer der folgenden Werte:
|
| 34 | 22 | DWORD | uint32_t | 4 Byte | biSizeImage |
|
| 38 | 26 | LONG | int32_t | 4 Byte | biXPelsPerMeter | Horizontale Auflösung des Zielausgabegerätes in Pixel pro Meter; wird aber für BMP-Dateien meistens auf 0 gesetzt. |
| 42 | 2A | LONG | int32_t | 4 Byte | biYPelsPerMeter | Vertikale Auflösung des Zielausgabegerätes in Pixel pro Meter; wird aber für BMP-Dateien meistens auf 0 gesetzt. |
| 46 | 2E | DWORD | uint32_t | 4 Byte | biClrUsed |
|
| 50 | 32 | DWORD | uint32_t | 4 Byte | biClrImportant |
|
Wenn biCompression=BI_BITFIELDS, dann folgen 3DWORDs, dieBitmasken für die Rot-, Grün- und Blauwerte enthalten. Gesetzte Bits bedeuten, dass in den Daten eines Pixels jenes Bit für den jeweiligenFarbkanal 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 näherungsweise (gilt nur für durch 4 teilbare Bildbreiten) 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. BeiBI_BITFIELDS und beiBI_RGB ist die Länge jeder Zeile ein Vielfaches von 4 Bytes und wird, falls erforderlich, mit Nullbytes aufgefüllt.
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 folgendenn Bytes (beiBI_RLE4: die folgendenn Nibbles) werden direkt übernommen; der nächste Datensatz findet sich am darauffolgenden geraden Offset (vom Start der Bilddaten aus gezählt). |
Vorteile von Bitmaps sind unter anderem:[7]
Nachteile von Bitmaps sind unter anderem:
Microsoft hat mitWindows 95 undWindows 98 neuere Versionen 4 und 5 des BMP-Formates eingeführt, dieAlphakanäle undFarbkorrektur ermöglichen und alsContainerformat fürPNG- undJFIF-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.