Programmiererecke - ...es ist alles so schön bunt hier

In den letzten Monaten haben wir uns intensiv mit dem VDI-Farbsystem beschäftigt. Auch diesmal geht's wieder um Farben.

Derzeit drängen moderne Grafikkarten mit ihren »Direct Color «-Farbdarstellungen auf den Markt. Doch bereits bei konventioneller Farbdarstellung über Lookup-Tables stellen sich dem Programmierer eine Menge Probleme. Zum einen muß das Programm recht umständlich ermitteln, wie viele der VDI-Farbstufen von der Videohardware tatsächlich umgesetzt werden. Ein entsprechendes Beispiel-Listing haben wir in der Juliausgabe vorgestellt [1].

Ein anderes Problem ist die Umrechnung der Hardwaredarstellung ins VDI-Format. Sie ist immer dann von nöten, wenn Bildformate gelesen und dargestellt werden sollen, die sehr stark an die Atari-Hardware angelehnt sind. Dies sind die allermeisten der gebräuchlichen Bildformate, als Beispiele seien Degas- und Degas-Elite-Bilder, Neochrome-Zeichnungen oder Doodle-Ausgaben genannt. Die meisten Zeichenprogramme ignorieren das Problem, indem sie keinen Bilderimport dieser Formate zulassen.

In der Tat ist die Umrechnung nicht einfach: Zunächst einmal muß ermittelt werden, wie die Bilder gespeichert sind. Die allermeisten werden entweder im Geräteformat der ST-Low- oder ST-High-Auflösung vorliegen. Neochrome und Degas z. B. hinterlassen entsprechende Stempel im Datei-Header. Es folgt der aufwendigste Part: Die Bilder müssen vom Atari-Geräteformat ins VDI-Standardformat umkopiert werden. Dazu darf nicht etwa die VDI-Funktion »vr_trnfm()« verwendet werden, denn das Programm kann ja auf einer zur Atari-Hardware völlig unterschiedlichen Karte laufen, deren VDI die »vr_trnfm()« zwangsweise anders interpretiert als das Atari-VDI.

So muß also eine eigene »vr_trnfm()«-Routine entworfen werden, die die Konvertierung des ST-Geräteformats ins VDI-Standardformat vornehmen kann. Solch eine Routine wird nicht immer schnell arbeiten, zumal sie wortweise, also mit 16 Bit Breite, Bildinformationen umpuzzlen muß.

Gemessen am Aufwand, der beispielsweise durch Umrechnen der VDI-Standardraster in ein Pixelpacked-Geräteformat für »vr_trnfm()« anfällt, arbeitet sie jedoch rasend schnell, zumal »vr_trnfm()« schlimmstenfalls bitweise kräftig durcheinanderzuwürfeln hat. Wenn das geschehen ist, bleibt ein weiteres Problem: Die Umrechnung von Hardwarefarben auf VDI-Farben. Alle konventionellen Malprogramme legen nämlich ihre Farbtabellen in Hardwarereihenfolge ab.

Umrechnungstabelle VDI/Hardware
VDI-Farbregister Farb-Hardwareregister
16-Farb-Modus 4-Farb-Modus Monochrom
0 0 0 0
1 15 3 1
2 1 2
3 2 1
4 4
5 6
6 3
7 5
8 7
9 8
10 9
11 10
12 12
13 14
14 11
15 13

Unsere Abbildung zeigt eine Umrechnungstabelle von VDI-Farben in Hardwarefarben für die Atari-ST-Videohardware. Wie die Tabelle zeigt, kann der VDI-Farbe Nr. 1 durchaus das Hardwareregister 15 zugewiesen sein. Hardware von Fremdanbietern verhält sich gänzlich anders. So ordnen z.B. die Matrix-256-Farbgrafikkarten die Hardware-Farben entsprechend der VDI-Farbnummer aufsteigend an, während Ataris eigene 256-Farbauflösung (TT-Low) eine schwer begreifliche Reihenfolge verwendet.

Eine Umrechnungstabelle ist zwar für spezielle Anwendungen recht hilfreich, für eine Allgemeinlösung ist sie jedoch zu speziell. Und da es leider keine VDI-Auskunftsfunktionen gibt, die dem Programmierer genaueres über den Aufbau der Videohardware verraten, bleibt ,wieder nur die Handarbeit.

In unserem Beispiel-Listing zeigen wir, wie eine Lösung aussehen könnte. Das Listing ermittelt die Farbe des Punktes in der linken oberen Ecke und merkt ihn sich. Anschließend setzt er einen Farbklecks in diese Ecke, wobei er sich der Funktion »v_pmarker()« bedient, die zum Setzen einzelner Punkte erheblich schneller arbeitet als »v_pline()«.

Diese Punkte werden nun aus dem Bildschirmspeicher in einen MFDB-Puffer geblittet und dieser anschließend ins Standardformat transformiert. Nun sammelt die Routine aus den Rastern des MFDBs die gesetzten/ungesetzten Bits heraus und ermittelt damit die der VDI-Farbe zugeordnete Hardwarefarbe. Dieser Wert wird in eine Tabelle eingetragen. So verfährt die Routine mit allen, über »work_out[13]« ermittelten VDI-Farben. Die vorgestellte Routine beschränkt sich dabei der Übersichtlichkeit halber auf maximal 256 Farben. Sollte »work_out[13]« den Wert »-1« enthalten, so ist ein Fortfahren sinnlos, da eine Direct-Color-Karte verwendet wird, bei der die Frage nach der Anordnung einer Hardware-Lookup-Table sinnlos ist.

vdi_hard.zip

Laurenz Prüssner/uw

Literatur:

[1] L. Prüssner: »Farbskalierer, die II«. ST-Magazin 7 /Juni 1992, Seiten 74f., Markt &Technik Verlag.



Aus: ST-Magazin 09 / 1992, Seite 54

Links

Copyright-Bestimmungen: siehe Über diese Seite