AES | Deflate | 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*)




nocookies html5
Impressum