Beschreibung über den Aufbau von .bmp Dateien ab Datei beginn
Als erstes kommt der BITMAPFILEHEADER, dann der BITMAPINFOHEADER und dann eine Farbtabelle,
wenn die Anzahl der Farben kleiner oder gleich 256 ist. Dann die Bilddaten.
struct BITMAPFILEHEADER {
WORD bfType; // Typ bei *.bmp in Hex = 424D = BM
DWORD bfSize; // Dateigröße in Byte
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits; // Offset zum ersten Datenbyte des Bildes
} ;
struct BITMAPINFOHEADER {
DWORD biSize; // Länge des Info-Headers(dieser Record) = 40 Byte in Hex 28
LONG biWidth; // Breite des Bilds
LONG biHeight; // Höhe des Bilds
WORD biPlanes; // Anzahl der Farbebenen in der Regel 1 u. 0
WORD biBitCount; // Anzahl der Bits pro Pixel( Anzahl der Farben)
// 1= Schwarz-Weis, 4 = 16 Farben = 64 Byte,
// 8 = 256 Farben = 1024 Byte, 24 = 16 Milionen Farben
DWORD biCompression; // Komprimierungstyp, 0 = Unkomprimiert, 1 = 8-Bit
// Run-Length-Encording-Verfahren,
// 2 = 4-Bit Run-Encording-Verfahren
DWORD biSizeImage; // Bildgröße in Bytes.
LONG biXPelsPerMeter; // Horizontale Auflösung
LONG biYPelsPerMeter; // Vertikale Auflösung
DWORD biClrUsed; // Die Zahl der im Bild vorkommenden Farben
DWORD biClrImportant; // die Anzahl der wichtigen Farben
} ;
Nach der Größe des biBitCount ist hier eine Farbtabelle, bei biBitCount = 18 Hex = 24 nicht.
Ist der biBitCount = 1 dann ist die Farbtabelle 8 Byte Groß. 2 Farben, vier Byte
für Schwarz u. 4 Byte für Weiß
Ist der biBitCount = 4 dann ist die Farbtabelle 64 Byte groß. 16 Farben * Vier Byte
für jede Farbe.
Ist der biBitCount = 8 dann ist die Farbtabelle 1024 Byte groß. 256 Farben * Vier Byte
für jede Farbe.
Ist der biBitCount größer ist keine Farbtabelle mehr vorhanden.
Die Farbenwerte werden für jedes Pixel einzeln in den Datenblock der Datei gespeichert,
3 Byte für eine Farbe.
Bei biBitCount = 1 wird 1 Bit als Verweis auf den Index in der Farbtabelle verwendet,
Null und Eins = 2 Farben.
Zum Beispiel die Bilddaten eines 32 * 32 Pixel großen Bild sind dann 128 Byte groß,
32 *32 = 1024 / 8 = 128.
Bei biBitCount = 4 werden 4 Bit für den Verweis auf die Farbtabelle verwendet,
4 Bit = 0-15.
Das Beispiel-Bild ist dann 512 Byte groß.
Bei biBitCount = 8 wird 1 Byte also 8 Bit für den Verweis auf die Farbtabelle verwendet,
8 Bit = 0-255.
Das Beispiel-Bild ist dann 1024 Byte groß. In biSizeImage müsste dann in Hex.
der Wert 400 stehen = 1024 Byte.
Von den 4 Byte für eine Farbe werden nur 3 Byte benutzt, je 1 Byte für Rot,
Grün und Blau (RGB).
Beispiele: 00 00 00 00 = Schwarz, 00 FF FF FF = Weiß, 00 FF 00 00 = Rot, usw.
Wichtiger Hinweis: Bei biBitCount = 4 also 16 sind die 16 Farben in der Farbtabelle
festgelegt, es müssen genau diese 16 Farben sein (Systemfarben).
Bei 256 Farben ist das nicht der Fall. Also 4 Byte für Farben in der Farbtabelle
und 3 Byte für die Farben wenn keine Farbtabelle vorhanden ist.
|