„Windows Bitmap“ – Versionsunterschied
[ungesichtete Version] | [ungesichtete Version] |
AZ: Der Seiteninhalt wurde durch einen anderen Text ersetzt. |
Sinn (Diskussion | Beiträge) K Änderungen von 62.109.87.181 (Beiträge) rückgängig gemacht und letzte Version von 84.56.168.31 wiederhergestellt |
||
Zeile 1: | Zeile 1: | ||
'''Windows Bitmap''' („'''BMP'''“) oder '''device-independent bitmap''' (DIB) ist ein zweidimensionales [[Rastergrafik|Rastergrafikformat]], das für die Betriebssysteme [[Microsoft Windows]] und [[OS/2]] entwickelt und mit [[Microsoft Windows 3.x|Windows 3.0]] eingeführt wurde. Die Dateiendung ist ''.bmp'', seltener ''.dib''. |
|||
alles kacke^^ |
|||
== Merkmale == |
|||
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 [[Farbtiefe]]n von 1, 4, 8, 16, 24 oder 32 bpp (wobei bei 16 und 32 bpp nicht alle [[Bit]]s tatsächlich genutzt werden müssen). [[Alphakanal|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 [[Portable Network Graphics|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 [[Grafikbearbeitungssoftware|Grafiksoftware]] unterstützt das Format problemlos (mit Ausnahme der eher exotischen Farbtiefen 16 und 32 bpp). |
|||
== Dateiformat (Version 3) == |
|||
{| class="prettytable float-right" |
|||
| bgcolor=FAFAFA align="left" | '''Dateikopf'''<br>(<span style="font-family:monospace">BITMAPFILEHEADER</span>) |
|||
|- |
|||
| bgcolor=E3ECF4 align="left" | '''Informationsblock'''<br>(<span style="font-family:monospace">BITMAPINFO</span>): |
|||
:'''Bitmap-Eigenschaften'''<br>(<span style="font-family:monospace">BITMAPINFOHEADER</span>) |
|||
:<hr noshade="noshade" size="1" /> |
|||
:Eventuell: '''Farbmasken''' |
|||
:<hr noshade="noshade" size="1" /> |
|||
:Eventuell: '''Farbtabelle''' |
|||
|- |
|||
| align="left" | Eventuell: Ungenutzter Platz |
|||
|- |
|||
| bgcolor=CCDDEE align="left" | '''Bilddaten''' |
|||
|- |
|||
| align="left" | Eventuell: Ungenutzter Platz |
|||
|} |
|||
BMP-Dateien bestehen aus drei Teilen: dem Dateikopf, dem Informationsblock und den Bilddaten (siehe Schema rechts). |
|||
Im folgenden bezeichnet <span style="font-family:monospace">WORD</span> einen 16-Bit-vorzeichenlosen [[Integer (Datentyp)|Integer]], <span style="font-family:monospace">DWORD</span> einen 32-Bit-vorzeichenlosen Integer und <span style="font-family:monospace">LONG</span> einen im [[Zweierkomplement]] kodierten 32-Bit-Integer. BMP verwendet die [[Little Endian|Little-Endian]]-Konvention. |
|||
=== Dateikopf === |
|||
{| class="prettytable" |
|||
! colspan="5" align="center" bgcolor=FFEFD5 | <span style="font-family:monospace">BITMAPFILEHEADER</span> (Größe: 14 Byte) |
|||
|- |
|||
! Offset<br>(Byte) |
|||
! Datentyp |
|||
! Größe |
|||
! Name |
|||
! Inhalt |
|||
|- |
|||
| 0 |
|||
| style="font-family:monospace" | WORD |
|||
| 2 Byte |
|||
| bfType |
|||
| [[ASCII]]-Zeichenkette <span style="font-family:monospace">"BM"</span> (Dezimalwert 19778). |
|||
|- |
|||
| 2 |
|||
| style="font-family:monospace" | DWORD |
|||
| 4 Byte |
|||
| bfSize |
|||
| Größe der BMP-Datei in Byte. (unzuverlässig) |
|||
|- |
|||
| 6 |
|||
| style="font-family:monospace" | DWORD |
|||
| 4 Byte |
|||
| bfReserved |
|||
| 0 |
|||
|- |
|||
| 10 |
|||
| style="font-family:monospace" | DWORD |
|||
| 4 Byte |
|||
| bfOffBits |
|||
| Offset der Bilddaten in Byte vom Beginn der Datei an. |
|||
|} |
|||
=== Informationsblock === |
|||
==== Bitmap-Eigenschaften ==== |
|||
Der Informationsblock beginnt mit folgender Struktur, die die Bitmap-Eigenschaften enthält: |
|||
{| class="prettytable" |
|||
! colspan="5" align="center" bgcolor=FFEFD5 | <span style="font-family:monospace">BITMAPINFOHEADER</span> (Größe: 40 Byte) |
|||
|- |
|||
! Offset<br>(Byte) |
|||
! Datentyp |
|||
! Größe |
|||
! Name |
|||
! Inhalt |
|||
|- |
|||
| 14 |
|||
| style="font-family:monospace" | DWORD |
|||
| 4 Byte |
|||
| biSize |
|||
| Größe des Informationsblocks in Byte |
|||
|- |
|||
| 18 |
|||
| style="font-family:monospace" | DWORD |
|||
| 4 Byte |
|||
| biWidth |
|||
| Breite der Bitmap in Pixel. |
|||
|- |
|||
| 22 |
|||
| style="font-family:monospace" | DWORD |
|||
| 4 Byte |
|||
| biHeight |
|||
| Der [[Absoluter Betrag|Betrag]] gibt die Höhe der Bitmap in Pixel an. |
|||
*Ist der Wert positiv, so ist die Bitmap eine sogenannte "bottom-up"-Bitmap (die Bilddaten beginnen mit der untersten und enden mit der obersten Bildzeile). Dies ist die gebräuchlichste Variante. |
|||
*Ist der Wert negativ, so ist die Bitmap eine "top-down"-Bitmap (die Bilddaten beginnen mit der obersten und enden mit der untersten Bildzeile). |
|||
|- |
|||
| 26 |
|||
| style="font-family:monospace" | 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 |
|||
| style="font-family:monospace" | WORD |
|||
| 2 Byte |
|||
| biBitCount |
|||
| Gibt die Farbtiefe der Bitmap in [[Farbtiefe|bpp]] an; muss einer der folgenden Werte sein: 1, 4, 8, 16, 24 oder 32. Bei 1, 4 und 8 bpp sind die Farben [[Indizierte Farben|indiziert]]. 16 und 32 bpp sind ungebräuchlich. |
|||
|- |
|||
| 30 |
|||
| style="font-family:monospace" | DWORD |
|||
| 4 Byte |
|||
| biCompression |
|||
| Einer der folgenden Werte: |
|||
* 0 (<span style="font-family:monospace">BI_RGB</span>): Bilddaten sind unkomprimiert. |
|||
* 1 (<span style="font-family:monospace">BI_RLE8</span>): Bilddaten sind lauflängenkodiert für 8 bpp. Nur erlaubt wenn biBitCount=8 und biHeight positiv. |
|||
* 2 (<span style="font-family:monospace">BI_RLE4</span>): Bilddaten sind lauflängenkodiert für 4 bpp. Nur erlaubt wenn biBitCount=4 und biHeight positiv. |
|||
* 3 (<span style="font-family:monospace">BI_BITFIELDS</span>): Bilddaten sind unkomprimiert und benutzerdefiniert (mittels Farbmasken) kodiert. Nur erlaubt wenn biBitCount=16 oder 32; ungebräuchlich. |
|||
|- |
|||
| 34 |
|||
| style="font-family:monospace" | DWORD |
|||
| 4 Byte |
|||
| biSizeImage |
|||
| |
|||
* ''Wenn biCompression=<span style="font-family:monospace">BI_RGB</span>:'' Entweder 0 oder die Größe der Bilddaten in Byte. |
|||
* ''Ansonsten:'' Größe der Bilddaten in Byte. |
|||
|- |
|||
| 38 |
|||
| style="font-family:monospace" | DWORD |
|||
| 4 Byte |
|||
| biXPelsPerMeter |
|||
| Horizontale Auflösung des Zielausgabegerätes in Pixel pro Meter; wird aber für BMP-Dateien meistens auf 0 gesetzt. |
|||
|- |
|||
| 42 |
|||
| style="font-family:monospace" | DWORD |
|||
| 4 Byte |
|||
| biYPelsPerMeter |
|||
| Vertikale Auflösung des Zielausgabegerätes in Pixel pro Meter; wird aber für BMP-Dateien meistens auf 0 gesetzt. |
|||
|- |
|||
| 46 |
|||
| style="font-family:monospace" | DWORD |
|||
| 4 Byte |
|||
| biClrUsed |
|||
| |
|||
* ''Wenn biBitCount=1:'' 0. |
|||
* ''Wenn biBitCount=4 oder 8:'' die Anzahl der Einträge der Farbtabelle; 0 bedeutet die maximale Anzahl (16 bzw. 256). |
|||
* ''Ansonsten:'' Die Anzahl der Einträge der Farbtabelle (0=keine Farbtabelle). Auch wenn sie in diesem Fall nicht notwendig ist, kann dennoch eine für die [[Quantisierung|Farbquantisierung]] empfohlene Farbtabelle angegeben werden. |
|||
|- |
|||
| 50 |
|||
| style="font-family:monospace" | DWORD |
|||
| 4 Byte |
|||
| biClrImportant |
|||
| |
|||
* ''Wenn biBitCount=1, 4 oder 8:'' Die Anzahl sämtlicher im Bild verwendeten Farben; 0 bedeutet alle Farben der Farbtabelle. |
|||
* ''Ansonsten:'' |
|||
** ''Wenn eine Farbtabelle vorhanden ist und diese sämtliche im Bild verwendeten Farben enthält:'' deren Anzahl. |
|||
** ''Ansonsten:'' 0. |
|||
|} |
|||
==== Farbmasken ==== |
|||
Wenn biCompression=<span style="font-family:monospace">BI_BITFIELDS</span>, dann folgen 3 <span style="font-family:monospace">DWORD</span>s, 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: |
|||
* gesetzte Bits müssen direkt nacheinander folgen; |
|||
* für 16 bpp müssen sich die gesetzten Bits in den beiden niederwertigen Bytes befinden; |
|||
* die Bitmasken der einzelnen Farbkanäle dürfen einander nicht überlappen. |
|||
==== Farbtabelle ==== |
|||
* ''Wenn biClrUsed=0:'' |
|||
** ''Wenn biBitCount=1, 4 oder 8:'' Es folgt eine Farbtabelle mit 2<sup>biBitCount</sup> Einträgen. |
|||
** ''Ansonsten:'' Es folgt keine Farbtabelle. |
|||
* ''Ansonsten:'' Es folgt eine Farbtabelle mit biClrUsed Einträgen. |
|||
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!). |
|||
=== Bilddaten === |
|||
Die Bilddaten beginnen am Offset bfOffBits. Die Größe der Bilddaten beträgt biWidth×biHeight×biBitCount/8 wenn biCompression=<span style="font-family:monospace">BI_RGB</span>, 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: |
|||
* '''<span style="font-family:monospace">BI_BITFIELDS</span>''' |
|||
:Jede Bildzeile ist durch rechtsseitiges Auffüllen mit Nullen auf ein ganzzahliges Vielfaches von 4 Bytes ausgerichtet. Das Format der Pixel ist in den Farbmasken definiert. Bei 16 bpp werden nur die beiden niederwertigen Bytes der Farbmasken berücksichtigt. |
|||
* '''<span style="font-family:monospace">BI_RGB</span>''' |
|||
:Jede Bildzeile ist durch rechtsseitiges Auffüllen mit Nullen auf ein ganzzahliges Vielfaches von 4 Bytes ausgerichtet. |
|||
:'''1, 4 oder 8 bpp:''' |
|||
:Die Daten jedes Pixels bestehen aus einem 0-basierten Index auf den Eintrag in der Farbtabelle. |
|||
:'''16 bpp:''' |
|||
:Das Format ist wie bei <span style="font-family:monospace">BI_BITFIELDS</span>, wenn folgende Farbmasken verwendet würden: |
|||
::<span style="font-family:monospace">0x00007C00</span> für den Rot-Kanal |
|||
::<span style="font-family:monospace">0x000003E0</span> für den Grün-Kanal |
|||
::<span style="font-family:monospace">0x0000001F</span> für den Blau-Kanal |
|||
:Jeder Farbkanal ist 5 Bit pro Pixel groß; insgesamt ergeben sich 32.768 mögliche Farben (ein Bit ist ungenutzt). |
|||
:'''24 bpp:''' |
|||
:Die Daten jedes Pixels bestehen aus jeweils einem Byte für den Blau-, Grün- und Rot-Kanal (in dieser Reihenfolge!). |
|||
:'''32 bpp:''' |
|||
:Das Format ist wie bei <span style="font-family:monospace">BI_BITFIELDS</span>, wenn folgende Farbmasken verwendet würden: |
|||
::<span style="font-family:monospace">0x00FF0000</span> für den Rot-Kanal |
|||
::<span style="font-family:monospace">0x0000FF00</span> für den Grün-Kanal |
|||
::<span style="font-family:monospace">0x000000FF</span> für den Blau-Kanal |
|||
:Jeder Farbkanal ist 8 Bit pro Pixel groß; insgesamt ergeben sich 16.777.216 mögliche Farben (8 Bit sind ungenutzt). Einige Programme wie etwa [[Adobe Photoshop]] interpretieren die verbleibenden 8 Bits (<span style="font-family:monospace">0xFF000000</span>) als [[Alphakanal]] mit 256 möglichen Transparenzstufen. Dies ist jedoch von der Spezifikation nicht vorgesehen. |
|||
* '''<span style="font-family:monospace">BI_RLE8</span> und <span style="font-family:monospace">BI_RLE4</span>''' |
|||
:Jeweils zwei aufeinanderfolgende Bytes bilden einen Datensatz. Hat das erste Byte einen anderen Wert als 0, so wird das zweite Byte so oft (bei <span style="font-family:monospace">BI_RLE4</span>: die nächsten 2 [[Nibble]]s insgesamt, Beispiel: 05 67 → 6 7 6 7 6) wiederholt, wie das erste Byte angibt. Hat das erste Byte hingegen den Wert 0, so hängt die Bedeutung vom zweiten Byte ab: |
|||
:{| |
|||
| valign="top" | '''0:''' |
|||
| valign="top" | Ende der Bildzeile. |
|||
|- |
|||
| valign="top" | '''1:''' |
|||
| valign="top" | Ende der Bitmap. |
|||
|- |
|||
| valign="top" | '''2:''' |
|||
| valign="top" | Verschiebung der aktuellen Pixelposition. Die beiden nächsten Bytes geben die Verschiebung nach rechts und nach unten an. |
|||
|- |
|||
| valign="top" | '''''n''=3-255:''' |
|||
| valign="top" | Die folgenden ''n'' Bytes (bei <span style="font-family:monospace">BI_RLE4</span>: die folgenden ''n'' Nibbles) werden direkt übernommen; der nächste Datensatz findet sich am darauffolgenden geraden Offset (vom Start der Bilddaten aus gezählt). |
|||
|} |
|||
:Das Resultat wird wie im unkomprimierten Fall interpretiert. |
|||
== Versionen 4 und 5 == |
|||
[[Microsoft]] hat mit [[Microsoft Windows 95|Windows 95]] und [[Microsoft Windows 98|Windows 98]] neuere Versionen 4 und 5 des BMP-Formates eingeführt, die [[Alphakanal|Alphakanäle]] und [[Farbkorrektur]] ermöglichen und als [[Containerformat]] für [[Portable Network Graphics|PNG]]- und [[JPEG]]-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. |
|||
== Weblinks == |
|||
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_2w1f.asp Spezifikation aus dem Microsoft Platform SDK] |
|||
[[Kategorie:Datenformat]] |
|||
[[Kategorie:Grafikformat]] |
|||
[[bg:BMP]] |
|||
[[ca:BMP]] |
|||
[[cs:BMP]] |
|||
[[en:BMP file format]] |
|||
[[es:Windows bitmap]] |
|||
[[fi:BMP (tiedostomuoto)]] |
|||
[[fr:Windows bitmap]] |
|||
[[gl:BMP]] |
|||
[[hu:BMP]] |
|||
[[id:Bitmap]] |
|||
[[it:Windows bitmap]] |
|||
[[ja:Windows bitmap]] |
|||
[[ka:BMP]] |
|||
[[ko:윈도 비트맵]] |
|||
[[nl:BMP (bestandsindeling)]] |
|||
[[no:Windows Bitmap]] |
|||
[[pl:BMP (format)]] |
|||
[[pt:Device Independent Bitmap]] |
|||
[[ru:BMP]] |
|||
[[sk:BMP (formát)]] |
|||
[[sv:BMP]] |
|||
[[vi:BMP]] |
|||
[[zh:BMP]] |
Version vom 13. Dezember 2007, 11:18 Uhr
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.
Merkmale
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).
Dateiformat (Version 3)
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.
Dateikopf
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. |
Informationsblock
Bitmap-Eigenschaften
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 | Größe des Informationsblocks in Byte |
18 | DWORD | 4 Byte | biWidth | Breite der Bitmap in Pixel. |
22 | DWORD | 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 | DWORD | 4 Byte | biXPelsPerMeter | Horizontale Auflösung des Zielausgabegerätes in Pixel pro Meter; wird aber für BMP-Dateien meistens auf 0 gesetzt. |
42 | DWORD | 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 |
|
Farbmasken
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:
- gesetzte Bits müssen direkt nacheinander folgen;
- für 16 bpp müssen sich die gesetzten Bits in den beiden niederwertigen Bytes befinden;
- die Bitmasken der einzelnen Farbkanäle dürfen einander nicht überlappen.
Farbtabelle
- Wenn biClrUsed=0:
- Wenn biBitCount=1, 4 oder 8: Es folgt eine Farbtabelle mit 2biBitCount Einträgen.
- Ansonsten: Es folgt keine Farbtabelle.
- Ansonsten: Es folgt eine Farbtabelle mit biClrUsed Einträgen.
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!).
Bilddaten
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:
- BI_BITFIELDS
- Jede Bildzeile ist durch rechtsseitiges Auffüllen mit Nullen auf ein ganzzahliges Vielfaches von 4 Bytes ausgerichtet. Das Format der Pixel ist in den Farbmasken definiert. Bei 16 bpp werden nur die beiden niederwertigen Bytes der Farbmasken berücksichtigt.
- BI_RGB
- Jede Bildzeile ist durch rechtsseitiges Auffüllen mit Nullen auf ein ganzzahliges Vielfaches von 4 Bytes ausgerichtet.
- 1, 4 oder 8 bpp:
- Die Daten jedes Pixels bestehen aus einem 0-basierten Index auf den Eintrag in der Farbtabelle.
- 16 bpp:
- Das Format ist wie bei BI_BITFIELDS, wenn folgende Farbmasken verwendet würden:
- 0x00007C00 für den Rot-Kanal
- 0x000003E0 für den Grün-Kanal
- 0x0000001F für den Blau-Kanal
- Jeder Farbkanal ist 5 Bit pro Pixel groß; insgesamt ergeben sich 32.768 mögliche Farben (ein Bit ist ungenutzt).
- 24 bpp:
- Die Daten jedes Pixels bestehen aus jeweils einem Byte für den Blau-, Grün- und Rot-Kanal (in dieser Reihenfolge!).
- 32 bpp:
- Das Format ist wie bei BI_BITFIELDS, wenn folgende Farbmasken verwendet würden:
- 0x00FF0000 für den Rot-Kanal
- 0x0000FF00 für den Grün-Kanal
- 0x000000FF für den Blau-Kanal
- Jeder Farbkanal ist 8 Bit pro Pixel groß; insgesamt ergeben sich 16.777.216 mögliche Farben (8 Bit sind ungenutzt). Einige Programme wie etwa Adobe Photoshop interpretieren die verbleibenden 8 Bits (0xFF000000) als Alphakanal mit 256 möglichen Transparenzstufen. Dies ist jedoch von der Spezifikation nicht vorgesehen.
- BI_RLE8 und BI_RLE4
- Jeweils zwei aufeinanderfolgende Bytes bilden einen Datensatz. Hat das erste Byte einen anderen Wert als 0, so wird das zweite Byte so oft (bei BI_RLE4: die nächsten 2 Nibbles insgesamt, Beispiel: 05 67 → 6 7 6 7 6) wiederholt, wie das erste Byte angibt. Hat das erste Byte hingegen den Wert 0, so hängt die Bedeutung vom zweiten Byte 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).
- Das Resultat wird wie im unkomprimierten Fall interpretiert.
Versionen 4 und 5
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 JPEG-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.