von mp-one » Di 12. Jun 2007, 17:28
CharlieChaplin hat geschrieben:Nun, bei den Koala-Bildern scheinen nach den 26 Bytes für den header auch noch einige "Leerzeichen" bzw. mehrere Leerzeilen zu folgen, die man mit weiteren Infos über die Grafik hätte füllen können. Die Anzahl der Leerzeichen scheint bei jedem Koala-Bild genau gleich lang zu sein (habe sie aber nicht gezählt)... wie schonmal erwähnt hätte man dort wohl die grafikstufe, Auflösung in Pixel, Bildbeschreibung (titel oder sowas) und dergleichen unterbringen können - allerdings wurde es nie genutzt und so sind halt in allen Koala-bildern nur diese "Leerzeichen" nach dem header drin...
Hallo Andreas,
bisher konnte ich diese Leerzeilen bei keinem Koala-Bild finden. Mir ist es mittlerweile gelungen, die vertikale sowie die horizontale Kompression zu dekomprimieren und im Pixlator anzuzeigen. Dabei habe ich einiges an Koala-Bildern zum Test benutzt. Der Aufbau ist immer so, dass ab dem 27. Byte die Bilddaten beginnen. Aber vielleicht gibt es ja noch eine weitere Spezifikation für den Koala-Header!?
Was ich bis jetzt rausgefunden habe ist folgendes:
Header (Zählung ab 0!):
=================
- Bytes 0-6: FF 80 C9 C7 1A 00 01
- Byte 7: Modus 0=unkomprimiert, 1=vertikal, 2=horizontal
- Bytes 8-12: 0E 00 28 00 C0
- Bytes 13-17: Farben Register 708,709,710,711,712
- Bytes 18-19: verschiedene Inhalte, unbekannt
- Bytes 20-25: 00 00 9B 9B 9B 9B
- Bytes 26... : Bilddaten in "Blocks"
Daten-Blocks:
=========
Jeder Block wird von einem "Blockbyte" eingeleitet, das die Art und Länge des folgenden Datenblocks angibt:
Bit 6-0: die Länge des Blocks
- steht hier 0, so ist der Datenblock länger als 127 und die
Länge steht in den beiden folgenden Bytes (Hi/Lo)
Bit 7 = 0 : es folgt genau ein Byte, das n-mal kopiert wird
Bit 7 = 1 : es folgen n Datenbytes, die einfach übernommen werden
Dekompression:
===========
Die Kompression eines Koala-Bildes ist also im Grunde recht einfach. Das Verfahren merkt sich einfach, wieviele gleiche Bytes "vertikal in jeder zweiten Zeile" oder "horizontal nacheinander" folgen. Diese werden dann bei der Dekompression aufeinanderfolgend gezeichnet. Ist Bit 7 des Blockbytes=0 bedeutet das also, das mehrere gleiche Bytes im Bild gefunden wurden. Ist das Bit=1 enthält das Bild eine Folge von jeweils verschiedenen Bytes, die sich nicht zusammen fassen lassen.
1. Vertikal: die vertikale Kompression arbeitet spaltenweise. Dabei wird immer jede zweite Zeile gezeichnet. D.h. es werden zuerst die Bytes der Zeilen 0,2,4, ... bearbeitet. Danach folgen die Zeilen 1,3,5,... der gleichen Spalte, so dass schließlich 2x96=192 Zeilen (=eine Spalte) gezeichnet ist. Dann folgt die nächste Spalte, bis der Bildschirmspeicher voll ist.
2. Horizontal: hier werden einfach nur die Bytes entsprechend den Angaben des Blockbytes aufsteigend hintereinander in den Bildschirmspeicher kopiert.
Jetzt fehlt nur noch das unkomprimierte Format. Vermutlich ist es einfach nur der Header von 26 Byte + 7680 Datenbytes für GR. 15. Wäre klasse, wenn mir da noch jemand ein Testbild schicken könnte. PacMan hat sich ja schon ordentlich ins Zeug gelegt und mir mit Bildern sehr geholfen, vielen Dank noch mal dafür!!!
Gruß,
Michael