AES |
Deflate |
GIF |
X-Face |
Games
X-Face
Auf diesen Seiten möchte ich mit einem praktischen Beispiel eine kleine Einführung in die arithmetische
Datenkompression liefern.
Eins vorweg: Das Bildformat X-Face hat heute so gut wie keine praktische Bedeutung mehr.
Trotzdem ist es ein ausgezeichnetes Beispiel dafür, wie Bilddaten mit arithmetischer Datenkompression kodiert
werden.
Die originale Software des Entwicklers
wurde in den 80ern geschrieben und ist deswegen nach den heutigen Maßstäben alles andere als leicht verständlicher
Programmcode. Zum Einen wurde die Software in einem veralteten C-Syntax (K&R) geschrieben.
Dieser Syntax wird schon seit Jahrzehnten nicht mehr verwendet und wirkt deswegen auf die meisten Leser
mit durchschnittlichen C-Kenntnissen eher abschreckend. Zum anderen benötigt man für die Arithmetische
Datenkompression Integerwerte, die weit außerhalb der Zahlenbereiche liegen, die sich mit herkömmlichen
Integern (die mit 16, 32 oder 64 Bit kodiert werden) darstellen lassen. Aus diesem Grund muss man in einer
Sprache wie C Rechenoperationen für Integer in "beliebiger" länge implementieren, was den Programmcode
vergrößert und zusätzlich unverständlich macht.
Um den Mängeln dieser Original-Software entgegen zu treten, habe ich ein alternatives Programm in der Skriptsprache
Python geschrieben. Diese ist nicht nur um weiten einfacher und übersichtlicher sondern bietet auch ein extrem
nützliches Feature: Integer beliebiger Länge. Hier kann man ganzzahlige Werte speichern, die nicht begrenzt sind
durch eine feste Bitzahl. Python erlaubt es also, dass wir uns bei dem Code auf das Wesentliche konzentrieren
können.
Hier gibt es den Python Sourcecode als Download.
(zuletzt aktualisiert am 17.07.2019)
Zur Veranschaulichung der Dekompression habe ich eine Simulation in Javascript geschrieben, die jeden einzelnen
Schritt des Dekomprimierens grafisch darstellt: (*klick*)
Eine Zweite Simulation veranschaulicht die gen()-Funktion, die die Bilddaten in eine Bitmaske umwandelt, welche
mit einem höheren Grad komprimiert werden kann. (*klick*)
Impressum