Lauflängenkodierung

Bei vielen Kompressionsarten kommt, als Filter, die Lauflängenkodierung zum Einsatz. Sie ist sehr einfach, sehr schnell aber auch sehr spezialisiert, da bei ihr gleiche aufeinander folgende Symbole zusammengefasst werden. Diese Kodierung ist anzutreffen bei vielen Grafikformaten (inklusive JPEG).

Beispiel (Quellcode): rle.cpp
Download (Quellcode): rle.zip

Beschreibung

Lauflängenkodierung Schaubild Wie schon erwähnt, werden gleiche aufeinander folgende Symbole zusammengefasst. Dies geschieht oft durch einen Marker, ein Spezialsymbol oder durch eine andere Art von Metadaten innerhalb des Ausgabedatenstroms. Bei Kodierungsverfahren mit Codewörtern, lassen sich extra Codes verwenden. Die Länge der Symbolwiederholungen, die benötigt wird, um eine Datenkompression zu erreichen hängt vom Kodierungsverfahren ab. Bei einfachsten Implementationen, lohnt sich der Aufwand oft erst, wenn mindestens vier oder fünf gleiche aufeinander folgende Symbole möglich sind.

Wie bei eigentlich allen Kompressionsverfahren, kann auch bei RLE unter Umständen über die Datenfeldlänge hinaus komprimiert werden, wenn es sich lohnt und alle Teile diese Operation beherrschen (Kodierer und Dekodierer). Ein Grund hierfür wäre ein Codewort welches kürzer ist, als jenes für den eigentliche Treffer.

Codeanmerkungen

  1. Die Zeichen der Aufrufparameter des Programms, werden als Eingabedatenstrom verwendet.

    for(int n=1; n<argc; n++)
        for(size_t m=0; m<strlen(argv[n]); m++)
            data.push_back((uint8_t)argv[n][m]);
    93
    94
    95
    
  2. So ergibt

    ./rle testaaaaatest
    

    die Ausgabe

    Run length encoding test...
    
    Orginal:
     (13) 74 65 73 74 61 61 61 61 61 74 65 73 74
    Compressed:
     (12) 05 74 65 73 74 61 84 04 74 65 73 74
    Uncompressed:
     (13) 74 65 73 74 61 61 61 61 61 74 65 73 74