Aufbau des BMP-Headers
Der Header besteht in der Regel aus insgesamt 54 Bytes. Ihre Bedeutung zeigt nachfolgende Tabelle (am Beispiel eines 18·18-Pixel-Bitmaps):
{| border="1" cellspacing="0" cellpadding="2"
! style="background:#cccccc" | Position
! style="background:#cccccc" | dto.hex
! style="background:#efefef" | Inhalt
! style="background:#efefef" | Beispiel (Hexcode)
! style="background:#efefef" | Bedeutung
|-----
| style="background:#efefef" | 00 bis 01
| style="background:#efefef" | 00 bis 01
| Dateiformat || style="background:#ffefef" | 42 4D
| BM (Bitmap)
|-----
| style="background:#efefef" | 02 bis 05
| style="background:#efefef" | 02 bis 05
| Dateigröße (Bytes) || 26 04 00 00
| entspricht hex. 04 26, d.h. insgesamt 1062 Bytes
|-----
| style="background:#efefef" | 06 bis 09
| style="background:#efefef" | 06 bis 09
| Null || 00 00 00 00 ||
|-----
| style="background:#efefef" | 10 bis 13
| style="background:#efefef" | 0A bis 0D
| Länge des Headers || 36 00 00 00 || entspricht hex. 36, d.h. 54 Bytes
|-----
| style="background:#efefef" | 14 bis 17
| style="background:#efefef" | 0E bis 11
| Länge des Headers ab hier || 28 00 00 00
| entspricht hex. 28, d.h. 40 Bytes
|-----
| style="background:#efefef" | 18 bis 21
| style="background:#efefef" | 12 bis 15
| Bildbreite (Pixel) || 12 00 00 00 || entspricht hex. 12, d.h. 18 Pixel
|-----
| style="background:#efefef" | 22 bis 25
| style="background:#efefef" | 16 bis 19
| Bildhöhe (Pixel) || 12 00 00 00 || entspricht hex. 12, d.h. 18 Pixel
|-----
| style="background:#efefef" | 26 bis 27
| style="background:#efefef" | 1A bis 1B
| Ebenenanzahl || 01 00 || entspricht hex. 01, d.h. eine Ebene
|-----
| style="background:#efefef" | 28 bis 29
| style="background:#efefef" | 1C bis 1D
| Farbtiefe (Bits pro Pixel) || 18 00 || Hier: 24; alternativ 1, 4 oder 8
|-----
| style="background:#efefef" | 30 bis 33
| style="background:#efefef" | 1E bis 21
| Kompressionsmethode || 00 00 00 00 || Hier: keine Kompression
|-----
| style="background:#efefef" | 34 bis 37
| style="background:#efefef" | 22 bis 25
| Datenmenge ohne Header || F0 03 00 00
| entspricht hex. 03 F0, d.h. insgesamt 1008 Bytes
|-----
| style="background:#efefef" | 38 bis 41
| style="background:#efefef" | 26 bis 29
| horizontale Auflösung (pixel/Meter) || EB 0A 00 00
| entspricht hex. 0A EB, d.h. 2795 px/m
|-----
| style="background:#efefef" | 42 bis 45
| style="background:#efefef" | 2A bis 2D
| vertikale Auflösung (pixel/Meter) || EB 0A 00 00
| entspricht hex. 0A EB, d.h. 2795 px/m
|-----
| style="background:#efefef" | 46 bis 49
| style="background:#efefef" | 2E bis 31
| Anzahl benutzter Farben || 00 00 00 00
| Hier: ohne Belang
|-----
| style="background:#efefef" | 50 bis 53
| style="background:#efefef" | 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:
{| border="1" cellspacing="0" cellpadding="2"
! style="background:#cccccc" | Offset
! style="background:#cccccc" | dto.hex
! style="background:#efefef" | Bedeutung
|-----
| style="background:#efefef" | 00
| style="background:#efefef" | 00
| Blau-Anteil der Farbe des 1. Pixels von links
|-----
| style="background:#efefef" | 01
| style="background:#efefef" | 01
| Grün-Anteil der Farbe des 1. Pixels von links
|-----
| style="background:#efefef" | 02
| style="background:#efefef" | 02
| Rot-Anteil der Farbe des 1. Pixels von links
|-----
| style="background:#efefef" | 03 bis 05
| style="background:#efefef" | 03 bis 05
| Blau-, Grün- und Rot-Anteil der Farbe des 2. Pixels
|-----
| colspan="3" | ...
|-----
| style="background:#efefef" | 51 bis 53
| style="background:#efefef" | 33 bis 35
| Blau-, Grün- und Rot-Anteil der Farbe des 18. Pixels
|-----
| style="background:#efefef" | 54 bis 55
| style="background:#efefef" | 36 bis 37
| bedeutungsloser Platzhalter, notwendig weil Bytezahl der Zeile durch 4 teilbar sein muß
|}
Bei einer Farbtiefe von 1, 2 oder 4 Bits pro Pixel wird die eigentliche Bildinformation in zwei Teilen abgespeichert:
In einer Tabelle werden die Blau-, Grün- und Rot-Anteil einer benutzten Farbe jeweils in 4 Bytes 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:
{| border="1" cellspacing="0" cellpadding="2"
! style="background:#cccccc" | Position
! style="background:#cccccc" | dto.hex
! style="background:#efefef" | Bedeutung
|-----
| style="background:#efefef" | 54
| style="background:#efefef" | 36
| Blau-Anteil der Palettenfarbe 0
|-----
| style="background:#efefef" | 55
| style="background:#efefef" | 37
| Grün-Anteil der Palettenfarbe 0
|-----
| style="background:#efefef" | 56
| style="background:#efefef" | 38
| Rot-Anteil der Palettenfarbe 0
|-----
| style="background:#efefef" | 57
| style="background:#efefef" | 39
| z.Z.: ohne Bedeutung, sollte Null sein
|-----
| style="background:#efefef" | 58 bis 61
| style="background:#efefef" | 3A bis 3D
| Blau-, Grün- und Rot-Anteil der Palettenfarbe 1
|-----
| colspan="3" | ...
|-----
| style="background:#efefef" | 114 bis 117
| style="background:#efefef" | 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:
{| border="1" cellspacing="0" cellpadding="2"
! style="background:#cccccc" | Offset
! style="background:#cccccc" | dto.hex
! style="background:#efefef" | Bsp. (hex)
! style="background:#efefef" | Bedeutung
|-----
| style="background:#efefef" | 00
| style="background:#efefef" | 00
| 50
| 1. Pixel (von links) besitzt Palettenfarbe 5,
2. Pixel besitzt Palettenfarbe 0
|-----
| colspan="4" | ...
|-----
| style="background:#efefef" | 08
| style="background:#efefef" | 08
| AF
| 17. Pixel besitzt Palettenfarbe 10,
18. Pixel besitzt Palettenfarbe 15
|-----
| style="background:#efefef" | 09 bis 11
| style="background:#efefef" | 09 bis 1B
| 00 00 00
| bedeutungsloser Platzhalter, notwendig weil Bytezahl der Zeile durch 4 teilbar sein muß
|}