|
Hauptseite - Welches System? - Hardware - Software - Emulatoren - |
Internet MausNet Programmieren Verweise Über |
siehe auch: ST Computer 12/1988, Bilderspiele
Extension: .IC1 (low) .IC2 (med) .IC3 (high)
Länge variabel
Header
4 BYTEs | "IMDC" |
1 WORD | Auflösung (0=low, 1=medium, 2=high) |
16 WORDs | Palette im ST-Format (siehe @{"Palette" link "Palette"}) |
1 WORD | Datum der Erstellung im GEMDOS-Format |
1 WORD | Uhrzeit der Erstellung im GEMDOS-Format |
8 BYTEs | Name des Basisbildes (für Differenzkomprimierung), oder 0 |
1 WORD | Länge der komprimierten Packdaten |
1 LONG | Registriernummer (des Erzeugers, kann 0 sein) |
8 BYTEs | reserviert |
1 BYTE | komprimiert? (0=nein, 1=ja) |
Ist das Bild komprimiert, folgen weitere Angaben:
1 BYTE | Deltakomprimierung? (-1=nein, >-1=ja) |
1 BYTE | ? |
1 BYTE | Escape-Byte |
Bilddaten
variabel Bilddaten komprimiert. Das Bild kann direkt komprimiert oder Differenzkomprimiert sein. Bei der Differenzkomprimierung werden nur die Unterschiede zu einem Referenzbild gespeichert. Dies kann benutzt werden, um Animationen effektiv zu packen.
Komprimierung, stand-alone:
Für jedes Byte x aus den Bilddaten:
x=Escapebyte | Lies ein weiteres Byte n. (n ist unsigned).
Ist n>=2, wiederhole das nächste Byte n mal. Ist n=1, lies Bytes bis ein Byte k ungleich 1 gelesen wird. Lies das nächste Byte d. Sei o die Anzahl der gelesenen 1 Bytes, wiederhole d (256 * o + k) mal. In Pseudocode (an C angelehnt): if (n == 1) { o = 0; while (n == 1) { o++; n = next byte; } k = n; d = next byte; Use d (256 * o + k) times. } else { d = next byte; Use d (n) times. } |
x!=Escapebyte | Verwende x direkt. |
Komprimierung, Differenzkomprimierung:
Für jedes Byte x aus den Bilddaten:
x=Escapebyte | Lies ein weiteres Byte n. (n ist unsigned).
Ist n>=3, wiederhole das nächste Byte n mal. Ist n=1, fahre fort wie in der stand-alone Komprimierung oben. Ist n=2, Lies ein weiteres Byte n. Ist n=0, Bildendeend. Ist n>=2, nimm n Bytes des Basisbildes. Ist n=1, fahre fort wie für n=1 in der stand-alone Komprimierung oben, aber nimm (256 * o + k) Bytes des Basisbildes. |
x!=Escapebyte | Verwende x direkt. |
English version not yet available. |