Farbe aufs Papier Ausdruck von DEGAS-Bildern mit HP DeskJet 500C Die Beliebtheit des DeskJet 50OC von Hewlett Packard ist sp„testens seit der CeBIT '92 stark angestiegen. Doch leider ist die mitgelieferte Software nicht sehr ST-Benutzer-freundlich. Mit folgendem Programm lassen sich Bilder vom DEGAS.PI1-Format in Farbe ausdrucken. Kaum hat man den Drucker ausge- packt, schon geht das Problem los. Die Handbcher verweisen den Benutzer, der nun gleich einen Farbaus- druckmachen m”chte, auf die mitgeliefer- te Software. Doch leider wird diese nur fr DOS- bzw. Microsoft Windows angebo- ten. Lediglich einen mden Dreizeiler als Testfarbdruck kann man sofort erzeugen. Oder man strapaziert sein Farbband und erzeugt mittels Druckerdsenreinigung einen mehrzeiligen Dreifarbausdruck. Der Nicht-nur-Anwender wirft natrlich so- fort einen Blick in das Handbuch und entdeckt folgende Steuercodes, um die Farbpalette Cyan-Yellow-Magenta einzu- stellen: 027, 042, 114, 045, 051, 055 Doch leider fhren anschliežende Grafik- ausgaben nicht zum Erfolg. Um es kurz zu machen: Die Befehlsfolge ist leider falsch angegeben, und das Umschalten zwischen den Farben in einer Zeile ist erst berhaupt nicht erw„hnt. Aber solche Fehler finden sich leider in vielen Druckerhandbchern. Doch abgesehen von diesem Manko hat man einen hervorragenden Drucker vor sich, der, hat man seine Funktionsweise erst einmal durchschaut, wundersch”ne Mehrfarbbilder erzeugen kann. Farbe auf dem DeskJet 500 Jeder Grafikausgabe sollte eine Initiali- sierung vorausgehen, die den Drucker auf die folgenden Grafikdaten vorbereitet. Zun„chst erfolgt das Umschalten auf die Cyan-Yellow-Magenta-Farbpalette (CYM-Palette): 027, 042, 114, 045, 051 ,085 Die Grafikaufl”sung kann zwischen 75, 100, 150 und 300 Punkten pro Zoll betra- gen. Dazu muž die Anzahl der Punkte pro Zoll in ASCII-Werte umgerechnet werden. ,75':,7' (ASCII = 55) ,,5' (ASCII = 53) ->055, 053 ,300': ,3' (ASCII = 51) ,,0' (ASCII = 48) -> 051, 048, 048 Die allgemeine Einstellung lautet: 027, 042, 116, #...#, 082, wobei #...# die ASCII- Werte der Aufl”sung sind, also stellt die Befehlsfolge: 027, 042, 116, 051, 048, 048, 082 den Drucker auf 300 Punkte pro Zoll ein. Der relative vertikale Pixel-Versatz nach jeder Grafikzeile (frher Y-Offset) muž auf ,0' (ASCII = 48) gesetzt werden 027, 042, 098, 048, 089 Die eigentliche Grafikausgabe erfolgt zei- lenweise. Es gibt dafr zwei Grafikbefeh- le. Der eine veranlažt den Drucker, in der gerade aktuellen Farbe zu drucken, bleibt aber anschliežend in der Zeile, um ein erneutes Drucken mit der n„chsten Farbe zu erm”glichen. Der Befehl lautet: 027, 024, 098, #...#, 118 (#...# = Anzahl der Bytes) Der andere druckt in der aktuellen Farbe, fhrt anschliežend aber zu einem Sprung in die n„chste Grafikzeile, quasi einem Carriage-Return bei normalem Textaus- druck vergleichbar. Er lautet: 027, 042, 098, #...#, 087 Zuerst druckt man in Cyan, dann in Ma- genta, schliežlich in Yellow, darauf er- folgt die n„chste Zeile. Dies erreicht man durch folgende Befehlsfolge: 027, 042, 098, #...#, 118 + Grafikdaten fr Farbe Cyan 027, 042, 098, #...#, 118 + Grafikdaten fr Farbe Magenta 027, 042, 098, #...#, 087 + Grafikdaten fr Farbe Yellow Durch šbereinanderdrucken der drei Grundfarben erh„lt man weitere vier Far- ben. Cyan und Yellow ergeben Grn, Cyan und Magenta ergeben Blau, Yellow und Magenta ergeben Rot, alle drei Farben zusammen ergeben Schwarz. Mit Weiž sind es somit acht ,echte' Farben. Vor dem Ausdruck jeder Grafikzeile muž dem Com- puter die Anzahl der Bytes mitgeteilt wer- den, die gedruckt werden sollen, wobei jedes Byte acht Punkten nebeneinander entspricht. Bit 7 entspricht dem linken, Bit 0 dem rechten Punkt. Dabei muž die An- zahl der Bytes zun„chst wieder so in ASCII- Werte umgerechnet werden, wie dies be- reits oben beschrieben wurde, also z.B. : 40 Punkte nebeneinander entsprechen 5 Bytes. DerASCII-Wertvon ,5' ist 53. DerBefehl wrde lauten: 027, 042, 098, 053, 118 + 5 weitere Bytes Um 320 Punkte zu drucken, hieže dies: 320 Punkte entsprechen 40 Bytes. ASCII- Wert von ,4' ist 52, ASCII-Wert von ,0' ist 48. 027, 042, 098, 052, 048, 118 + 40 weitere Bytes An einem Beispiel soll diese Theorie nun noch einmal verdeutlicht werden. Es sol- len alle acht Farben nebeneinander in der niedriegsten Aufl”sung gedruckt werden und zwar in folgender Reihenfolge: Weiž, Cyan, Magenta, Yellow, Blau, Grn, Rot, Schwarz. Zum Drucken von acht Punkten reicht ein Grafik-Byte. Zuerst wird in Cyan gedruckt, welche in den Farben Cyan (lo- gisch), Blau, Grn und Schwarz enthalten ist. Es mssen also die Bits 6, 3, 2 und 0 gesetzt werden (siehe Bild 3). Man erh„lt den Dezimalwert ,77'. Magenta ist in den Farben Magenta, Blau, Rot und Schwarz enthalten,also sind die Bits 5, 3, 1 und 0 zu setzen (siehe Bild 3), man erh„lt den Dezi- malwert ,43'.Yellow schliežlich ist in den Farben Yellow, Grn, Rot und Schwarz enthalten. Dies entspricht den Bits 4, 2, 1 und 0 (siehe Bild 3), der Dezimalwert betr„gt ,23'. Somit fhren zusammenfas- send folgende Befehle zu dem Gewnschten: 027, 042, 114, 045, 051, 085 CYM-Farbpalette 027, 042, 1 1 6, 055, 053, 082 75 Punkte pro Zoll 027, 042, 098, 048, 089 Y-Offset auf ,0' 027, 042, 098, 049, 118, 077 Farbe Cyan 027, 042, 098, 049, 118, 043 Farbe Magenta 027, 942, 098, 049, 087, 023 Farbe Yellow Hat man einmal die Sucht nach Farbe berhaupt befriedigt, entsteht schnell der Wunsch nach mehr Farben. In diesem Fall hilft es nur, durch geschicktes Nebenein- andersetzen und Mischen der acht Grund- farben das menschliche Auge zu berli- sten. Um einen farbigen Bildschirmpunkt auzudrucken, verwende ich daher eine Matrix aus 6x6 Punkten, in der die acht Grundfarben so angeordnet sind, daž man den Eindruck einer neuen Farbe erh„lt. Der ATARI-ST stellt seine 512 Farben aus den drei Farben Rot, Grn und Blau mit je acht Helligkeitsstufen zusammen (8*8*8=512). Den Wert einer Farbenenne ich RGB-Wert, der somit Werte von 000 bis 777 annehmen kann. Doch wie k”nnen diese Farben jetzt mit Hilfe der Drucker- farben Cyan, Magenta und Yellow darge- stellt werden? Am einfachsten ist es, wenn man sich zun„chst den Ausdruck der acht Grundfar- ben Weiž, Cyan, Magenta, Yellow, Blau, Grn, Rot und Schwarz berlegt. Farbe Weiž (RGB-Wert 777) wrde bedeuten, daž der Drucker keine Farbe druckt, d.h. die Grafikdaten fr Cyan, Magenta und Yellow bestnden also nur aus Nullen. Diese Druckerfarbanweisung nenne ich CMY-Wert (Cyan-Magenta-Yellow- Wert), also in diesem Falle: CMY-Wert= 000. Reines Rot hat den RGB-Wert 700, auf dem Drucker mžten die Farben Yel- low und Magenta gedruckt werden. Der CMY-Wert erh„lt den Wert 077. Dabei bedeutet ,0', daž kein Cyan enthalten ist. Die erste ,7' steht vorerst fr Magenta drucken, die zweite ,7' fr Yellow druk- ken. Schwarz hat den RGB-Wert 000; da alle Druckerfarben miteinander gemischt werden mssen, um Schwarz zu erhalten, ist der CMY-Wert 777. Daraus folgt, daž sich die Farben Rot-Cyan, Grn-Magenta sowie Blau-Yellow komplement„r zuein- ander verhalten, d.h. ist die Farbe Grn auf dem Bildschirm vorhanden, mssen Cyan und Yellow, nicht aber Magenta gedruckt werden. (Daher auch die Bezeichnung CMY und nicht CYM!). Damit sind bisher nur die acht Grundfarben bercksichtigt; wie sieht es aber mit den anderen 504 Farben aus? Analog zu obiger Feststellung k”nnte man annehmen, daž eine Bildschirmfarbe, die Rot ganz, Grn zur H„lfte und kein Blau enth„lt, also den RGB-Wert 730 hat, den CMY-Wert 047 haben mžte, und tat- s„chlich liegt man mit dieser šberlegung goldrichtig. Doch was bedeutet ein CMY- Wert von 047 fr den Drucker? Wie kann man,wenn,0'bedeutet: ,keine Farbedruk- ken' und ,7' bedeutet: ,Farbe drucken', den Wert ,4' drucken? Die L”sung heižt: man erstelle sich eine Matrix (oh Gott, schon wieder Mathematik), die die Werte 1 bis 7 enth„lt, z.B. 1742653 5317426 2653174 7426531 3174265 6531742 4265317 Diese Matrix (die allgemeine Drucker- maske) gilt fr jede der drei Druckerfar- ben. Hat Cyan wie im obigen Beispiel (CMY-Wert 047) den Wert ,0', bedeutet das, daž an keiner Stelle dieser Matrix die Farbe Cyan gedruckt werden soll. Magen- ta hat den Wert ,4', d.h. an allen Stellen der Matrix mit den Werten 1 bis 4 soll Magen- ta gedruckt werden. Yellow schliežlich hat den Wert ,7', d.h. an allen Stellen der Matrix wird Yellow gedruckt. Anhand zweier grafischer Beispiele sei das Ver- fahren noch einmal verdeutlicht (siehe Bild 4). Jeweils links befindet sich die Origi- nalfarbe mit zugeh”rigem RGB-Wert. Rechts daneben sieht man in abnehmen- der Aufl”sung die Farbe, wie sie vom Drucker anhand der Matrix erstellt wird. Man erkennt, wie nach und nach die vom Drucker erstellte ,Mischfarbe' den Ein- druck der linken Originalfarbe annimmt. Je kleiner ein Druckerpunkt, d.h. je besser die Druckeraufl”sung dabei ist, desto bes- ser das Ergebnis. Zun„chst muž das Degas-PI1-Bild ab Spei- cheradresse filepos geladen werden. Die- se Routine ist im Listing nicht enthalten. Sie kann auch von einem anderen Pro- gramm aus erfolgen, wichtig ist nur, daž am Ende ab Speicheradresse filepos das Bild im Speicher steht. Die ersten 32034 KBytes eines jeden Degas-PI1-Bildes sind fr uns von Interesse. Die zwei ersten Bytes geben die Aufl”sung und die Spei- cherart (compressed oder uncompressed) an. Die folgenden 32 Bytes enthalten In- formationen zu den 16 Farben, gefolgt von den 32000 Bytes fr das eigentliche Bild. Listing 1 enth„lt das Hauptprogramm. Da nicht jeder ST-Besitzer ohne weiteres knapp 1 MByte zur Verfgung stellen kann, die ein komplettes Bild belegen wrde, wird immer eine Bildschirmzeile berech- net (bestehend aus 320 Bildpunkten, die aus jeweils 6x6 Druckerpunkten bestehen, das ganze fr alle drei Druckerfarben) und diese ausgedruckt. Dadurch belegt das ge- samte Programm nur maximal 70 KByte. Zun„chst werden die Grundfarbmasken fr die 16 Farben erstellt. Das sind jene Masken, die fr jede der 16 Farben eine Matrix fr jede der drei Druckerfarben enthalten. Somit braucht der Computer anschliežend nur noch den Bildschirm Punkt fr Punkt abzufragen und kann den Bildschirmpunkt entsprechend dieser Masken ausgeben (ab m2 stehen die allge- meinen Druckermasken, ab filepos2 die 16 Farben des Bildes, abfilepos3 das ei- gentliche B i Id, ab4die fertigen Masken im Speicher). Dies geschieht ab schleife 11. Da der Drucker immer 8 Bits auf einmal ausgibt, die Druckermatrix fr einen Bild- schirmpunkt jedoch 6x6 Pixel enth„lt, mssen Teile der Punkte auf die zu druk- kenden Bytes verteilt werden. D.h. das erste gedruckte Byte enth„lt 6 Pixel des ersten Bildschirmpunktes und zwei Pixel des zweiten, das zweite Byte enth„lt die restlichen 4 Pixel des zweiten Bildschirm- punktes und die ersten vier Pixel des drit- ten Punktes, das dritte Byte enth„lt die letzten zwei Pixel des dritten Bildschirm- punktes und alle 6 Pixel des vierten Punk- tes. Danach wiederholt sich alles von vor- ne. Die Routinen, die dieses Verschieben berechnen, wiederholen sich zum Teil und sind daher gesondert abgedruckt (Listing 2 + 3). Sie sind an die entsprechende Stelle in das Hauptprogramm (siehe Listing 1) einzufgen. Hierzu gehe man wie folgt vor: Man gebe zun„chst Listing 1 ein. An der Stelle, wo man auf die Listings 2 und 3 verwiesen wird, fahre man mit der Ein- gabe von Listing 2 fort. Dieses Listing 2 wird insgesamt viermal hintereinander be- n”tigt. Die jeweiligen Unterschiede kann man dem Listing 3 entnehmen. D.h. an den Stellen A-G sind beim ersten Mal die Be- fehle von A1-G1 aus Listing 3 einzuset- zen, beim zweiten Mal die Befehle A2-G2 usw. Am Ende fahre man mit der Eingabe von Listing 1 ab weiter8: fort. Ab Schleife_8 schliežlich wird die ent- sprechende Bildschirmzeile ausgedruckt. Listing 4 enth„lt die Unterprogramme, um das Bild zu zentrieren (ab leer), um eine bestimmte Anzahl von Zeichen zu druk- ken (ab druck) und um die Grundfarbmas- ken zu erstellen (ab mask). Die entsprechenden Labels/Zeiger fr verschiedene Zwischenspeicher, das ei- gentliche Bild (abfilepos), die Grundfarb- masken (ab f), Druckermasken fr Cyan (d_0), Magenta (d_1) und Yellow (d_2) sowie die allgemeine Druckermaske (ab m2) sind in Listing 5 definiert. Ich habe bewužt mehr Wert darauf gelegt, das Verfahren zu beschreiben als das As- sembler-Listing. Auf GEM-Einbindung wurde verzichtet, um das Programm nicht unn”tig in die L„nge zu ziehen. Durch die Einbindung eines Drucker- Spoolers k”nnte der Druckvorgang, der momentan bei ca. 15 Minuten/Bild liegt, im Hintergrund stattfinden. Noch interes- santer w„re allerdings das Ausdrucken von Grafiken mit 512 Farben (z.B. Spektrum 512). Aufgrund der L„nge des vollst„ndi- gen Listings wurden hier nur die wichti- gen Routinen abgedruckt. Das fertige Pro- gramm und das gesamte Listing findet sich auf der Monatsdiskette zur ST-Computer. Oliver Gimm