Licht ins Dunkel - Bildformate Teil 1: Neochrome, Degas Elite und Spectrum 512

Zum Gestalten farblicher Grafik-Meisterwerke haben sich drei Programme durchgesetzt: Neochrome, Degas Elite und Spectrum 512. Doch wer seine Bilder nicht nur bewundern, sondern in Programme beispielsweise als Titelbild einbinden will, der steht vor einem Problem: Das Bildformat ist ein Buch mit sieben Siegeln. Aber verzweifeln Sie nicht: TOS lüftet das Geheimnis der Bildformate, und auf Diskette finden Sie alle notwendigen Listings.

Von Frederic Mutter, Michael Bernards und Martin Backschat

Das erste anspruchsvollere Farb-Malprogramm auf dem ST war »Neochrome«. Vor allem wegen seiner durchdachten und leicht zu bedienenden Lupenfunktion eignet sich Neochrome ideal dazu, Bilder bis ins kleinste Detail auszuarbeiten. Neochrome verwendet zum Speichern der Bilder ein einfaches Format, das die Daten nicht komprimiert. Vorteil: Die Lade- und Speicherroutinen sind nicht aufwendig. Nachteil: Auch für ein leeres Bild benötigen Sie immer genau 32128 Byte Speicherplatz.

Doch nun zum Aufbau des Neochrome-Bildformates (siehe Bild 1): Die ersten zwei Worte (Byteoffset 0-3) eines Neochrome-Bildes haben den Wert Null und sind bedeutungslos. Daran schließen sich die 16 Farben des Bildes (Byteoffset 4-36) an. Jede Farbe belegt dabei ein Speicherwort (16 Bit), das den gleichen Aufbau wie ein Farbregister des STs besitzt (siehe Bild 2). Laden Sie ein Neochrome-Bild, so können Sie die Bildfarben direkt in die Farbregister ab der Basisadresse $ff8240 schreiben.

Byte Bedeutung
$0-$3 unbelegt
$4-$23 Farbpalette (16 Farben)
$24-$30 unbelegt
$31 wenn Farbrotation: Bit 7-4 linke Farbnummer (Start) Bit 3-0 rechte Farbnummer (Ende) wenn keine Rotation: Bit 7-4 Zweitfarbe
$32 wenn $80, dann Farbrotation
$33 Rotationsgeschwindigkeit in 1/50 s wenn positiv von links nach rechts, wenn negativ von rechts nach links
$34-$7f unbelegt
$80-$7d7f Bilddaten

Bild 1. Neochrome verwendet ein einfaches Bildformat

Auf die Bildfarben folgt von Byteoffset 36 bis einschließlich 47 ein freier Bereich, der für Erweiterungen des Formats gedacht ist. Byteoffset 48 enthält immer den Wert hexadezimal $80. Der Wert des Byteoffsets 49 hat eine ambivalente Bedeutung: Verwendet das Bild eine Farbpalettenrotation, so definieren die oberen 4 Bit (Bits 4-7) das linke Farbregister und die unteren vier Bit (Bits 0-3) das rechte Farbregister. Um die Farbregisternummern zu definieren, reichen 4 Bit aus, da der ST nur über 16 Farbregister verfügt. Enthält das Byte beispielsweise den Wert $48, so rotieren die Farbregister 4, 5, 6, 7 und 8. Besitzt das Bild keine Palettenrotation, so stellen die oberen 4 Bit die Zweitfarbe dar.

Der Wert in Byteoffset 50 entscheidet, ob das Bild Palettenrotation verwendet ($80) oder nicht (0). Im nächsten Byte (Byteoffset 51) ist festgehalten, mit welcher Geschwindigkeit die Rotation durchzuführen ist. Die kürzeste Zeit zwischen zwei Rotationen beträgt 0.02 s; sie findet also minimal 50 Mal pro Sekunde statt. Dies liegt daran, daß Neochrome eine Farbpalettenrotation während des VBIs (Vertical Blank Interrupt) durchführt. Ist der Wert der Rotationsgeschwindigkeit negativ, so ist die Richtung der Rotation von rechts nach links (siehe Bild 3).

Alle weiteren Byte bis einschließlich Byteoffset 127 sind unbelegt. Der wichtigste Teil der Bilddatei - das Bild - liegt von Byteoffset 128 bis 32128 und besitzt somit immer die volle Länge von 32000 Byte.

Bild 2. Ab Adresse $ff8240 finden sich 16 Farbregister mit dem dargestellten Aufbau

Um Ihnen das Einbinden von Neochrome-Bilder in eigene Programme zu vereinfachen, finden Sie auf Diskette alle dafür notwendigen Quelltexte. Assembler-Programmierer verwenden die beiden Dateien »BLOADNEO.S« und »NEO.S«. Das Hauptprogramm ist »BLOADNEO.S«. Es bindet die zweite Datei »NEO.S« mit der »INCLUDE«-Direktive ein. Das Programm ist darauf vorbereitet, das Neochrome-Bild »ULTIMA_V.NEO« nachzuladen. Um ein anderes Bild anzuzeigen, ersetzen Sie einfach in der Datei »BLOADNEO.S« in der letzten Zeile den Bildnamen. GFA-Basic-Programmierer finden das Listing »BLOAD-NEO.GFA« auf Diskette. Dieses besteht aus acht Programmzeilen. Es lädt mittels dem »BLOAD«-Befehl zunächst das Assembler-Modul »NEO.BIN« und anschließend ein Neochrome-Bild in den Speicher. Über die XBIOS-Funktion »Supexec« ruft das GFA-Basic-Programm die Routine zum ordnungsgemäßen Darstellen des Bildes auf.

Bild 3. Die Bytes $30 und $32 bestimmen die Animationsfarben und Animationsgeschwindigkeit

C- und Modula-2-Programmierer können die Datei »NEO.S« als Modul verwenden. Der Aufruf der Darstellungsroutine erfolgt folgendermaßen:

Supexec(show_N EOch rome, bi Id_ad resse);

Flexibel: Das Degas Elite-Bildformat

Kommen wir nun zu dem etwas ausgereifteren Bildformat des Malprogrammes »Degas Elite« (siehe Bild 4). Da Degas in allen drei Auflösungen 320x200 in 16 Farben (Dateiendung .PI1), 640x200 in 4 Farben (.PI2) und 640x400 in monochrom (.PI3) arbeitet, hält es im ersten Wort der Bilddatei ein entsprechendes Flag. Für die Auflösung verwendet Degas die unteren beiden Bit (%01 = Low, %10 = Mid, %11 = Hi). Ist im ersten Wort zusätzlich das oberste Bit (Bitnummer 15) gesetzt, so sind die Bilddaten komprimiert abgelegt.

Der Komprimieralgorithmus arbeitet nach einem einfachen Schema. Dabei packt er die Bitplanes getrennt voneinander und legt sie hintereinander ab, d.h. erst Bitplane 0, dann Bitplane 1 usw.: Folgen in der zu komprimierenden Bitplane mehrere gleiche Byte aufeinander, so faßt er maximal 128 gleiche Byte zu einem 2-Byte-Kode zusammen. Dabei enthält das erste Byte den negativen Wert »1-AnzBytes« und das zweite Byte das zusammengefasste Byte. Beispiel: Folgen beispielsweise zehn $42-Bytes aufeinander, so komprimiert Degas diese zur Bytefolge $f7,$42. Vom zweiten Wort bis zum einschließlich dem 17. Wort (Byteoffset 2-33) finden Sie die Farbpalette. Diese enthält immer alle 16 Farbregister. Ab Byteoffset 34 folgen die Bilddaten in komprimierter bzw. unkomprimierter Form. In unkomprimierter Form sind das stets 32000 Byte.

Daran schließen sich 32 Byte Informationen für Farbpalettenrotationen an. Diese sind in 4 mal 4 Worte unterteilt (siehe Bild 5). Statt nur eine Palettenrotation wie Neochrome, erlaubt Degas Elite vier voneinander unabhängige Rotationen zur gleichen Zeit. Die ersten vier Worte enthalten die vier linken Farbregisternummern, darauf folgen vier Worte, welche die rechten Farbregisternummern festlegen. Die nächsten vier Worte bestimmen die Richtung der vier Rotationen: Der Wert 0 läßt die Farbpalette von rechts nach links und der Wert 2 von links nach rechts rotieren. Der Wert 1 steht für Stillstand. Die letzten vier Worte enthalten die Geschwindigkeit in der Auflösung von 0.02s.

Byteoffset Bedeutung
$0-$1 Header (siehe Bild 5)
$2-$21 Farbpalette (16 Farben)
$22—X Bilddaten X = $7d21 in unkomprimierter Form
X = Datenlänge-66 in komprimierter Form
X-(X+32) Rotationsinformationen siehe Bild 6

Bild 4. Das Degas Elite-Format erlaubt zusätzlich das Komprimieren der Bilddaten

Dabei rotiert der Wert 0 die Palette 50 Mal pro Sekunde. Der maximale Wert 128 läßt die Farbpalette alle 2.5 s einmal rotieren.

Auf der Diskette finden Assembler-Programmierer die Datei »DEGAS.S«. Diese enthält eine optimierte Routine zum Entpacken komprimierter monochromer Bilder. C-Programmierer können »DEGAS.S« als Modul assemblieren und die Routine als void decompress(long count, void *source, void *destbuffer); deklarieren. Der Parameter »count« gibt dabei die Länge (Dateilänge-66) der komprimierten Daten an. Zum Entpacken farbiger Bilder eignet sich die im folgenden unter dem Spectrum-512-Format vorgestellte Routine »dec_picture«.

Wort Bedeutung
0-3 linke Palettenfarbe für Rotationskanal 1-4 (Wort 0 = Kanal 1...Wort 3 = Kanal 4)
4-7 Rechte Palettenfarbe für Rotationskanal 1-4
8-11 Richtung für Rotationskanal 1-4 0
12-15 Geschwindigkeit für Rotationskanal 1-4 (Abstand zw. zwei Farbrotationen ist x/50 Sekunden)

Bild 5. Degas erlaubt gleichzeitig vier unabhängige Farbanimationen

Farbenfroh: Das Spectrum 512-Bildformat erlaubt 512 Farben

Das Malprogramm »Spectrum 512« hebt sich von seinen Konkurrenten dadurch ab, daß es statt nur 16 alle 512 Farben gleichzeitig verwendet. Das hat natürlich zur Folge, daß es ein besonderes, komplexeres Bildformat benötigt (siehe Bild 6). Spectrum verwendet pro Bildschirmzeile drei Farbpaletten a 16 Farben. Statt der 200 in Farbe zur Verfügung stehenden Zeilen benutzt Spectrum nur 199, da es die oberste Zeile zum Synchronisieren nutzt.

Spectrum verwendet die Extension ».SPC« für komprimierte und ».SPU« für unkomprimierte Bilder. Das unkomprimierte Format ist erschlagend simpel: Die ersten $7d00 Byte sind die Bilddaten, darauf folgen in $4aa0 Byte die 199x3 Farbpaletten.

Kompliziert wird es bei komprimierten Bilder. In diesem Fall sind die ersten 4 Byte der Datei nicht von Bedeutung, sie enthalten lediglich die Kennung »SP00«. Anschließend folgt von Byteoffset 4 bis 7 die Länge der komprimierten Bilddaten (Langwort) und von Byteoffset 8 bis 11 die Länge der komprimierten Farbpaletten (Langwort).

Ungepackt (.SPU)

Byte Bedeutung
$0-$7cff Bilddaten
$7d00-$c79f 199x3 Farbpaletten

Gepackt (.SPC)

Byte Bedeutung
$0-$3 Kennung ’SP’$0$0
$4-$7 Bilddatenlänge in komprimierter Form (X-$c)
$8-$b Palettenlänge in komprimierter Form (Y-X)
$c-X komprimierte Bilddaten
X-Y komprimierte Farbpalette

Bild 6. Das Spectrum 512-Bildformat komprimiert Bilddaten und auch die Farbpalette

Ab Byteoffset 12 stehen die Bilddaten. Diese sind nach der Methode gepackt, wie sie auch Degas verwendet: Sie komprimiert jede Bitplane von 0 bis 3 getrennt. Dabei faßt sie gleiche Bytefolge zu einem Code zusammen. Genaueres finden Sie unter dem Degas-Format. Auf die Bilddaten folgen unmittelbar die gepackten Farbpaletten. Jeder Palette geht ein Informationswort voraus, in dem jedes Bit eine Palettenfarbe repräsentiert - Bit 1 entspricht Farbe 1 und Bit 14 Farbe 14 (Bild 7). Nur Palettenfarben, deren Bit gesetzt ist, sind gespeichert. Ein Entpackprogramm muß deswegen, jedes Bit - mit Bit 1 beginnend - durchtesten. Ist das Bit gesetzt, so liest es die Palettenfarbe aus, ansonsten macht es direkt mit dem nächsten Bit weiter. Sind alle Bits durch getestet, muß Ihr Programm das nächste Informationswort auslesen. Das wiederholt sich, bis alle 199x3 Paletten entpackt sind.

Um Ihnen das Einbinden von Spectrum 512-Bildern in eigene Programme zu vereinfachen, finden Sie auf Diskette alle dafür notwendigen Quelltexte. Für Assembler-Programmierer haben wir die beiden Dateien »BLOADSPC.S« und »SPC.S« vorbereitet. Das Hauptprogramm ist in der Datei »BLOADSPC.S«. Es bindet die zweite Datei »SPC.S« mit der »INCLUDE«-Direktive ein. Das Programm ist darauf vorbereitet, das Spectrum-Bild »ALIENS.SPC« nachzuladen und anzuzeigen. Um ein anderes Bild anzuzeigen, ersetzen Sie in der Datei »BLOADSPC.S« den Bildnamen. GFA-Basic-Programmierer finden das Listing »BLOAD-SPC.GFA« auf Diskette. Es lädt mittels des »BLOAD«-BefehIs zunächst das Assembler-Modul »SPC.BIN« und anschließend ein Spectrum-Bild in den Speicher. Über die XBIOS-Funktion »Supexec« ruft das GFA-Basic-Programm die Routine zum ordnungsgemäßen Darstellen des Bildes mit allen 512 Farben auf.

C- und Modula-2-Programmierer können die Datei »SPC.S« als Modul verwenden. Der Aufruf der Darstellungsroutine erfolgt folgendermaßen:

Supexec(show_SPeCtrum, bild_adresse);

(ba)

Bild 7. Jede Bit 1 bis 14 des Informationswort repräsentieren die Palettenfarben 1 bis 14.


Aus: TOS 06 / 1990, Seite 99

Links

Copyright-Bestimmungen: siehe Über diese Seite