Programmers Corner 7/91 ----------------------- von Carsten Strotmann Hallo Freaks, willkommen zu einer neuen Ausgabe der Programmers Corner. Diesmal im Angebot: Bilder-Hardcopy in Turbo-Basic für Epson/IBM Drucker. Ein Malprogramm ist schon ok. Man malt so seine Bilder, erfreut sich an der eigenen Kreativität, fühlt sich schon als Pixel-van-Gogh. Doch was macht man mit der ganzen Pixelpracht ? Immer nur die Kunstwerke auf der Mattscheide zu betrachten, ist mit der Dauer ziemlich unbefriedigend. Schöner wäre es schon, diesen Picasso im Wohnzimmer zu er- setzen, die eigenen Bilder passen eh besser zur modernen Einrichtung und, ... sind ein Blickfang der besonderen Art auf der nächsten Heimparty: self- made "Digi-Moderne"! Worauf ich hinaus will? Na, hast Du schon mal versucht, eines deiner Bilder so auszudrucken, daß es in den Rahmen (des Picassos) passt? Naja, Hardcopy- und Druckprogramme gibt's schon genug, doch meist ist die Auswahl der Druck- formate auf drei oder vier beschränkt. Da gibt's nur eins: Selbst ist der Künstler. Doch, wie bekommt man die Pixel auf's Papier? Zunächst muss man wissen, wie das Bild im Computer abgespeichert ist. Der Bildschirmspeicher eines Graphics 8 Bildes besteht aus 40 Bytes mal 192 Zeilen, also 7680 Bytes. Jedes gesetz- tes Bit in einem der Bytes stellt einen gesetzten Punkt auf dem Bildschirm dar, ein gelöschtes Bit einen Punkt in Hin- tergrundfarbe. Einen ähnlichen Aufbau findet man bei der Ansteuerung des Druckkopfes, Nur sind her die Bits senkrecht statt waagerecht angeordnet: B i t Zeile 01 02 .. - 0 0 1 B 1 1 0 y 2 0 1 t 3 1 1 e 4 1 0 5 1 1 0 6 0 1 - 7 0 0 . . - Für unser Ziel, eine Druckausgabe in Turbo-Basic zu realisieren, ist es sinnvoll, die Bytes aus dem Bildschirm- speicher direkt an den Druckkopf zu übergeben. Hierdurch wird das Bild zwar gekippt und seitwärts ausgedruckt, doch eine bitweise Umrechnung des Bildes waehrend des Druckens würde in Turbo- Basic eine kleine Ewigkeit dauern. Solches lässt sich nur in Assembler, oder in einer Hochsprachen, die Ma- schinensprache erzeugen, realisieren. Also ans Werk: Den Drucker auf Grafikdruck vorbereiten: Bevor wir den Grafikausdruck starten, sollte der Drucker zurückgesetzt wer- den, um zu verhindern, daß andere Druk- kerbefehle den Drucker stören. Der Drucker wird mit der den Steuerbefehlen 27/64 initialisiert. Diese Drucker- befehle lassen sich am Besten über den PUT-Befehl an den Drucker schicken, also PUT #%1,27,64. Natürlich muss vor- her ein Kanal (hier Kanal 1) zum Druk- ker geöffnet werden (OPEN #%1,8,%0,"P1:"). Nun muß dem Drucker mitgeteilt werden, daß die Zeilen zusammenhängend gedruckt werden sollen, ohne die Zwischenräume, die beim normalen Textausdruck eingefügt werden. Der neue Zeilenabstand muß 8/72 oder 16/144 Zoll betragen. Die Befehlsfolge hierfür lautet 29/01/27/51/16 (PUT #%1,29,1,27,51,16) was einen Zeilen- abstand von 16/144" einstellt. Um die- sen Zeilenabstand einzustellen, gibt es noch andere Befehlsfolgen, doch nur diese funktioniert bei EPSON und IBM Druckern gleichermassen. Eine Grafikzeile drucken: In jeder Zeile muß dem Drucker angege- ben werden, in welcher Dichte man drucken möchte, und wieviel Grafik- punkte in der Zeile gedruckt werden sollen. Die Befehlsfolge lautet 27/42/m/n1/n2, wobei m die Grafikdichte ist und n1 und n2 die Anzahl der Grafikpunkte in LowByte/Highbyte Folge (z.B. 1000 Grafikpunkte : n1=232 / n2 = 3 : 3*256+232 = 1000). Die Grafik- dichte, die man mit m einstellt, kann man aus folgender Tabelle entnehmen: m Pixel Hor. Punkte- Hor./Vert. pro Zeile abstand Verhältnis --------------------------------------- 0 480 1/60" 1:1.2 1 960 1/120" 1:0.6 2 960 1/120" 1:0.6 3 1920 1/240" 1:0.3 4 640 1/80" 1:0.9 5 576 1/72" 1:1 6 720 1/90" 1:0.8 7 1152 1/144" 1:0.5 --------------------------------------- Nach der Wahl der Druckdichte kommen die Grafikdaten. Die Grafikdaten werden aus dem Bildschrimspeicher ausgelesen und mittels PUT an den Drucker über- mittelt. ACHTUNG: Bis nicht die angegebene An- zahl an Grafikdaten uebermittelt wurde beachtet der Drucker keine Steuerbe- fehle, da er alle eigehenden Werte als Grafikdaten interpretiert ! Als Praxisbeispiel befindet sich auf dieser Diskette das Programm HARDCOPY.TUR, welches ein Bild einläd und mittels der hier besprochenen Rou- tinen auf's Papier bringt. Das Programm COPYMAST.TUR ist schon ein kleines Druckprogramm, mit dem man die ein- zelnen Dichten ausprobieren kann. Die Werte des Parameters Druckdichte beziehen sich auf obige Tabelle. Am Besten, Ihr probiert einfach die Kom- binationen aus Druckhöhe und Druck- dichte aus, die für Euren Drucker die besten Ergebnisse zu erzielen.