Windows bitmap
Das Microsoft Windows / OS/2 - Bitmap-Format BMP ist ein Dateiformat zur verlustfreien Speicherung von Rastergrafiken.Unter Windows wird es meist mit der Dateiendung *.bmp gekennzeichnet. Vorteil dieses Formats ist sein einfacher Aufbau, was das Einlesen und Speichern vereinfacht. Außerdem ist es das Standardformat unter Windows, sodass es weit verbreitet ist. Ein Nachteil des Formates ist der große Speicherbedarf.
Technische Informationen
BMP-Dateien enthalten einen Header, in dem Informationen über das Bildformat und über die Datei selbst enthalten sind, gefolgt von dem eigentlichen Datenbereich. Dieser besteht wiederum aus einer eventuellen Farbpalette und den eigentlichen Pixel-Daten.
Gespeichert wird das Bild im RGB-Farbraum, mit einer Farbtiefe von 1, 4, 8 oder 24 Bit; dies entspricht 2, 16, 256 und 16,7 Mio. Farben. Werden 256 oder weniger Farben benutzt, enthalten die Pixeldaten Verweise auf die Farbpalette, bei 24 Bit Farbtiefe ist die Farbe direkt in den Daten enthalten.
Bei 1, 4 oder 8 Bit Farbtiefe ist eine Datenkompression mittels einer einfachen Lauflängenkodierung möglich. Diese wird aber selten eingesetzt. Die OS/2-Variante des BMP-Formats bietet erweiterte Möglichkeiten zur Kompression, u.a. kann teilweise das Huffman-Verfahren benutzt werden.
Die Anzahl der Bytes je Zeile muss durch 4 dividierbar sein. Um dies zu gewährleisten, werden gegebenenfalls ein bis drei Null-Bytes angehängt.
Position | dto.hex | Inhalt | Beispiel (Hexcode) | Bedeutung |
---|---|---|---|---|
00 bis 01 | 00 bis 01 | Dateiformat | 42 4D | BM (Bitmap) |
02 bis 05 | 02 bis 05 | Dateigröße (Bytes) | 26 04 00 00 | entspricht hex. 04 26, das heißt insgesamt 1062 Bytes |
06 bis 09 | 06 bis 09 | Null | 00 00 00 00 | |
10 bis 13 | 0A bis 0D | Länge des Headers | 36 00 00 00 | entspricht hex. 36, das heißt 54 Bytes |
14 bis 17 | 0E bis 11 | Länge des Headers ab hier | 28 00 00 00 | entspricht hex. 28, das heißt 40 Bytes |
18 bis 21 | 12 bis 15 | Bildbreite (Pixel) | 12 00 00 00 | entspricht hex. 12, das heißt 18 Pixel |
22 bis 25 | 16 bis 19 | Bildhöhe (Pixel) | 12 00 00 00 | entspricht hex. 12, das heißt 18 Pixel |
26 bis 27 | 1A bis 1B | Ebenenanzahl | 01 00 | entspricht hex. 01, das heißt eine Ebene |
28 bis 29 | 1C bis 1D | Farbtiefe (Bits pro Pixel) | 18 00 | Hier: 24; alternativ 1, 4 oder 8 |
30 bis 33 | 1E bis 21 | Kompressionsmethode | 00 00 00 00 | Hier: keine Kompression |
34 bis 37 | 22 bis 25 | Datenmenge ohne Header | F0 03 00 00 | entspricht hex. 03 F0, das heißt insgesamt 1008 Bytes |
38 bis 41 | 26 bis 29 | horizontale Auflösung (pixel/Meter) | EB 0A 00 00 | entspricht hex. 0A EB, das heißt 2795 px/m |
42 bis 45 | 2A bis 2D | vertikale Auflösung (pixel/Meter) | EB 0A 00 00 | entspricht hex. 0A EB, das heißt 2795 px/m |
46 bis 49 | 2E bis 31 | Anzahl benutzter Farben | 00 00 00 00 | Hier: ohne Belang |
50 bis 53 | 32 bis 35 | Anzahl wichtiger Farben | 00 00 00 00 | Hier: ohne Belang |
Die folgenden 1008 Bytes (Position 54 bis 1061, hex.: 36 bis 425) enthalten die eigentliche Bildinformation:
Die 18 Bildzeilen werden (von unten nach oben) mit jeweils 56 Bytes abgespeichert.
Aufbau einer Bildzeile:
Offset | dto.hex | Bedeutung |
---|---|---|
00 | 00 | Blau-Anteil der Farbe des 1. Pixels von links |
01 | 01 | Grün-Anteil der Farbe des 1. Pixels von links |
02 | 02 | Rot-Anteil der Farbe des 1. Pixels von links |
03 bis 05 | 03 bis 05 | Blau-, Grün- und Rot-Anteil der Farbe des 2. Pixels |
... | ||
51 bis 53 | 33 bis 35 | Blau-, Grün- und Rot-Anteil der Farbe des 18. Pixels |
54 bis 55 | 36 bis 37 | bedeutungsloser Platzhalter, notwendig weil Bytezahl der Zeile durch 4 teilbar sein muß |
Bei einer Farbtiefe von 1, 2, 4 oder 8 Bits pro Pixel wird die eigentliche Bildinformation in zwei Teilen abgespeichert:
In einer Tabelle werden die Blau-, Grün- und Rot-Anteile einer benutzten Farbe jeweils in 4 Bytes (je 1 Byte R, G, B + 1 Füllbyte) gespeichert, anschließend werden die Bildzeilen (von unten nach oben) abgespeichert. Beispielsweise werden bei einem 18·18-Pixel-Bitmap mit einer Farbtiefe von 4 Bits
ab Position 54 die 16 möglichen Farbwerte in 64 Bits gespeichert:
Position | dto.hex | Bedeutung |
---|---|---|
54 | 36 | Blau-Anteil der Palettenfarbe 0 |
55 | 37 | Grün-Anteil der Palettenfarbe 0 |
56 | 38 | Rot-Anteil der Palettenfarbe 0 |
57 | 39 | z.Z.: ohne Bedeutung, sollte Null sein |
58 bis 61 | 3A bis 3D | Blau-, Grün- und Rot-Anteil der Palettenfarbe 1 |
... | ||
114 bis 117 | 72 bis 75 | Blau-, Grün- und Rot-Anteil der Palettenfarbe 15 (hex.: F) |
In den folgenden 216 Bytes (Position 118 bis 333, hex.: 76 bis 14D) werden die 18 Bildzeilen mit jeweils 12 Bytes abgespeichert.
Aufbau einer Bildzeile:
Offset | dto.hex | Bsp. (hex) | Bedeutung |
---|---|---|---|
00 | 00 | 50 | 1. Pixel (von links) besitzt Palettenfarbe 5, 2. Pixel besitzt Palettenfarbe 0 |
... | |||
08 | 08 | AF | 17. Pixel besitzt Palettenfarbe 10, 18. Pixel besitzt Palettenfarbe 15 |
09 bis 11 | 09 bis 1B | 00 00 00 | bedeutungsloser Platzhalter, notwendig weil Bytezahl der Zeile durch 4 teilbar sein muß |