Rechnernetze
Home Nach oben

MS Windows-Standard .bmp

Es werden zwei Kompressionsformate beschrieben, die im Header spezifiziert werden. In der Regel verwendet man Farbtabellen (außer beim True-Color-Mode), in welchem die verwendeten Farben aufgelistet sind. Der Standard verlangt, dass dieses nach Häufigkeit des Auftretens der einzelnen Farbpixels geschieht; insbesondere sollte eine vorhandene Hintergrundfarbe den Index 0 erhalten. Die Pixel werden zeilenweise von links nach rechts geschrieben, wobei mit der letzten Zeile (unterste im zu komprimierenden Bild) angefangen wird.

4 Bit-RLE

Hier besteht die Kompressionsfolge aus jeweils zwei Bytes, von denen das erste die Anzahl von Pixeln beschreibt, während das zweite Pixelpaare beschreibt, d.h. die oberen bzw. unteren Halbbytes à 4 Bits beschreiben jeweils ein anderes Pixel. Wenn die Anzahl der Pixel größer ist als null, werden diese Pixel alternierend übernommen. Ist die Anzahl null, so gilt dieses als Escape-Zeichen, wobei das nächste Zeichen die folgenden Bedeutungen haben kann:

Escape-Symbol Bedeutung
0 End-of-Line
1 End-of-Rle(Bitmap)
2 Die folgenden beiden Bytes beschreiben ein Offset in x (rechts) und y (oben) -Richtung. 
Alle anderen Pixel erhalten den Wert 0 (d.h. ersten Eintrag in der Farbtabelle).
n > 3 Die folgenden n Halbbytes werden direkt kopiert.
Da die Zeiger auf 16-Bit-Grenzen liegen müssen, können Paddingwerte (Nullen) folgen.

Das folgende Beispiel (http://www.rasip.fer.hr/research/compress/algorithms/fund/rl/) soll die verschiedenen RLE-Techniken, die hier offenbar eingesetzt werden, verdeutlichen:

Komprimierte Daten Expandierte Daten
06 52 5 2 5 2 5 2
08 1B 1 B 1 B 1 B 1 B
00 06 83 14 34 8 3 1 4 3 4
00 02 09 06 Schiebe Cursor 9 Positionen nach rechts und 6 Zeilen nach oben
00 00 Zeilenende
04 22 2 2 2 2
00 01 End-of-RLE(Bitmap)

Man beachte, dass die Koordinaten-Verschiebung vor allem für Bilder geeignet ist! Auch können hiermit wohl Graphiken, die vor allem aus einer Hintergrundfarbe und wenigen "Strichen" auf dieser Hintergrundfarbe bestehen, recht gut komprimiert werden. Allerdings muss das Kompressionsprogramm sicherlich eine ziemlich Intelligenz besitzen, um dieses ausnutzen zu können. 

8 Bit-RLE

Dieses Verfahren arbeit völlig analog dem 4 Bit-RLE, außer dass jetzt einer Anzahl ein einzelnes Byte folgt, welches ein Pixel entsprechend einer Farbtabelle repräsentiert. Auch bedeuten die Escape-Folgen das gleiche wie oben, nur dass jetzt die Anzahl der Bytes angegeben wird, die als Pixel übernommen werden. Auch hier muss evtl. ein 0-Byte angehängt werden, da die Zeiger immer auf 16-Bit-Grenzen verweisen müssen.

Das folgende Beispiel verdeutlicht diese Technik.

Komprimierte Daten Expandierte Daten
06 52 52 52 52 52 52 52
08 1B 1B 1B 1B 1B 1B 1B 1B 1B
00 05 83 14 34 16 21 00 83 14 34 16 21  (letztes Byte für Padding auf 16 Bit-Wort)
00 02 09 06 Schiebe Cursor 9 Positionen nach rechts und 6 Zeilen nach oben
00 00 Zeilenende
04 2A 2A 2A 2A 2A
00 01 End-of-RLE(Bitmap)