Im Zauberreich der Grafik Heute kommen wir zum dritten Teil des grafischen Lehrganges, der sich unter anderem mit der PEN-Umwandlung beschäftigt. Weiterhin gibt es viele grafische Leckerbissen zum Ausprobieren. 1. Fillunterbrechung im MULTISCREEN Wer mit dem im letzten Heft vorgestellten FILLBREAK-Programm (Fill-unterbrecher, Seite 28) gearbeitet und die fantastisch geformten Füllflächen, die es erzeugen kann, bewundert hat, wird sich oft gewünscht haben, die Möglichkeiten dieses Programms auch innerhalb von MULTISCREEN nützen zu können; dann bräuchte man das entstandene Bild nicht immer wieder erst abzuspeichern, bevor man es weiter bearbeiten kann, man könnte die Füll-fläche sofort isolieren, konvertieren usw. - aber leider ist das FILLBREAK-Programm zu groß, als daß es noch im MULTISCREEN unterzubringen wäre. Aber es gibt einen Weg: Wir können daraus ein Binärprogramm erzeugen, das beim Start von MULTISCREEN mitgeladen wird und vom Hauptprogramm aus aufgerufen werden kann. Gehen Sie dazu folgendermaßen vor: Laden Sie das Programm “Fillunter-brecher“, und verkürzen Sie die Zeile 1080 auf den Befehl MEMORY &A200, anschließend geben Sie als Zeile 1100 folgendes ein: 1100 SAVE"FILLBRK.BIN", B,&A2FA,&1FB Das Programm müßte jetzt so aussehen wie das abgedruckte Listing 1. Speichern Sie diesen “Fillader“ sicherheitshalber erst auf die Diskette, auf der Sie auch MULTISCREEN stehen haben (Sie finden ihn unter dem Namen “FILLADER.BAS“ auf der Databox). Lassen Sie ihn dann laufen. Er erzeugt und speichert ein Binärprogramm unter dem Namen “FILLBRK.BIN“, das immer zusammen mit MULTISCREEN auf der gleichen Diskette stehen sollte. Fügen Sie nun im MULTISCREEN-Programm (Heft 6/89, S.31) die folgenden beiden Zeilen ein: 52 IF PEEK(&A2FE) < > &DD THEN LOAD “FILLBRK.BIN",&A2FA 435 IF INKEY(53)=32 THEN TAG0FF: LOCATE 1,1: PRINT CHR$(23)CHR$(0) : GRAPHICS PEN sf:x0=x:y0=y: MOVE x, y: CALL &A2FA, ff: x=x0:y=y0: GOTO 340 Jetzt können Sie den Fillunterbrecher aufrufen, wenn Sie nach dem Anwählen der Option(10) und der Parametereingabe den Ausfüllvorgang mit < SHIFT > + < f > auslösen. Zweimaliges Drücken von < ESC > bringt das Ausfüllen zum vorübergehenden Anhalten; mit einer anderen Taste kann es fortgesetzt werden. Durch einen weiteren Druck von < ESC > + < Leertaste > wird das Ausfüllen abgebrochen und der erreichte Zustand in den Speicher übernommen. Anschließend kann der Cursor weiterbewegt und woanders weitergefüllt werden. Soll das Bild endgültig übernommen werden, so genügt wieder ein mehrmaliger Leertastendruck, und Sie können sofort anschließend die Füllfläche isolieren (Option 5) und mit ihr weiterar-beiten. Die beiden anderen Füllmög-lichkeiten durch < f > und < CONTROL > + < f > stehen natürlich weiter wie bisher zur Verfügung. 2. Strukturwandel durch andersfarbiges Überzeichnen Alle unseren bisherigen Büder waren in erster Linie von ihrer Struktur bestimmt; die Farbe spielte dabei kaum eine Rolle. Aber die Struktur eines Bildes kann auch von der Farbe umgestaltet werden. Nehmen Sie z.B. das Grundprogramm zur Quadrate-Grafik (Heft 3/89, S. 12) und fügen Sie nur die zwei Zeilen ein: 52 w=0.2: GRAPHICS PEN 0 53 G0SUB 70: GRAPHICS PEN 1 Wer mit dem CPC 464 arbeitet, der den Befehl GRAPHICS PEN nicht kennt, muß statt dessen eingeben: PLOT 1000,1000,0. Dadurch, daß somit (weit außerhalb des Bildschirms) ein Punkt mit PEN 0 gesetzt wird, schaltet der CPC 464 auch alle folgenden grafischen Ausgaben auf den PEN 0 um. Wichtig ist bei solchen Programmen mit Farbwechsel auch das abschließende GRAPHICS PEN 1 (bzw. PLOT 1000,1000,1 beim CPC 464). Es kann Ihnen sonst leicht passieren, daß Sie ein neues Programm starten und überhaupt nichts auf dem Bildschirm erscheint, weil noch der GRAPHICS PEN 0, der ja die gleiche Farbe hat wie der Hintergrund, eingestellt ist. Durch die Zufügung in unserem Programm gehen wir also über das ursprüngliche Bild noch einmal mit einer anderen Farbe darüber; das führt dazu, daß die Wände dieses Raumes allmählich zerfallen und sich nach allen Seiten hin öffnen. Probieren Sie das mit verschiedenen Werten von w! Jedes Mal ergeben sich dabei andere Zerfallstrukturen. In der folgenden Grafik, die ebenfalls nur aus Quadraten aufgebaut ist, schafft der Farbwechsel Platz für das Erscheinen des “Morgensterns“ — ein Beispiel für Grafiken, bei denen das Zuschauen beim Entstehen ebenso reizvoll ist wie das fertige Bild: 10 'Das Erscheinen des Morgensterns 20 MODE 2:DEG 30 a=290:b=200:f=1.04:n=78:r=20:w=-5:GOSUB 90 40 a=350:w=5:G0SUB 90 50 GRAPHICS PEN 0:n=57:GOSUB 90: a=290: w=-5: GOSUB 90 60 GRAPHICS PEN 1:PRINT CHR$(23)CHR$(1) 70 a=320:f=1.009:n=77:r=10: w=45:GOSUB 90 80 f=1.01 :n=13:r=55:GOSUB 90:CALL &BB18: END 90 ORIGIN a,b 100 x=r:y=r 110 FOR i=1 TO n 120 PLOT x,y 130 DRAW -y,x 140 DRAW -x,-y 150 DRAW y, -x 160 DRAW x,y 170 xx=x*COS(w)-y*SIN(w): y=x*SIN(w)+y*COS(w) 180 x=xx*f:y=y*f 190 NEXT i: RETURNFür ein letztes Beispiel wollen wir Ihnen eine neue Art der Grafik vorführen, die nicht aus Quadraten, sondern aus der Bogenraute aufgebaut ist. Für die interessante Figur der Bogenraute gilt als Grundform die mathematische Relation: x=rx*COS(w)^3 y=rY*SIN(w)^T3 Ihre zeichnerische Darstellung auf dem CPC sieht folgendermaßen aus: 10 'Bogenraute 20 MODE 2: DEG: ORIGIN 320,200 30 a=320:b=200:rx=250:ry=140:G0SUB 60 50 CALL &BB18:END 60 ORIGIN a,b 61 FOR w=0 TO 360 70 x=rx*COS(w)^3 80 y=ry#SIN(w)^3 90 IF d=0 THEN PLOT x,y ELSE DRAW x,y 100 d=1:NEXT w 110 d=0: RETURN3.Grundzüge der Farbdarstellung im CPC Mit der Farbe läßt sich aber die Bildstruktur noch weit nachhaltiger beeinflussen. Dafür müssen zunächst die nötigen Befehle kurz dargestellt werden. 3.1. Die Unterscheidung von PEN und INK Wie Sie ja wohl wissen, werden im CPC Farben durch zwei verschiedene Befehle erzeugt: PEN und INK. Im MODE 2 stehen nur zwei PENs zur Verfügung, im MODE 1 aber schon vier, im MODE 0 dagegen 16. Man kann einen PEN mit einem Pinsel ver- gleichen, der nun in ein Tuschgläschen mit einem ganz beliebigen Farbton getaucht werden kann und und nun seine Punkte, Linien und Pinselspuren in diesem Farbton zeichnet. Dieser Farbton wird mit INK bezeichnet, und es gibt 27 davon. Die Anweisung INK 0,3 taucht also den PEN 0 in die rote Farbe (=3); alles, was mit PEN 0 gezeichnet wird, erscheint in Rot. Freilich endet hier die Vergleichsmöglichkeit mit Pinsel und Farbe; denn es ist nicht möglich, dadurch, daß man dem gleichen PEN nacheinander verschiedene INKs zuweist, ein mehrfarbiges Bild zu zeichnen. Die Anweisung “INK pinsel, färbe“ bezieht sich immer auf das ganze Bild, ändert also auch die Farbe der schon gezeichneten Teile. Aber was geschieht nun, wenn verschiedene PENs mit verschiedenen Farben sich überlagern? Man könnte meinen, daß sich dann die Farben eben mischen, daß z.B. Blaugrün (10) und Purpur (7) irgendeinen Braunlilaton ergeben. Aber sehen Sie sich das folgende Beispiel an, bei dem die schrägen Türme dadurch zustande kommen, daß in Zeile 120 der Printabstand immer dann verkleinert wird, wenn y durch 24 ohne Rest teilbar ist (sollten Ihnen Begriffe wie “Printabstand“ nicht mehr geläufig sein, so sehen Sie nochmal in Heft 3/89, S. 14 nach). Auf dem CPC 464 müssen Sie bei diesem Programm wieder die Anweisungen GRAPHICS PEN 0 bezw. 1 durch die Befehle PLOT 1000,1000,0 bzw.l ersetzen: 10 ' Gotische Turmfassade 20 INK 0,0:INK 1,10: INK 2,7:INK 3,26 30 MODE 1: PRINT CHR$(23)CHR$(l):TAG 40 f$=STRING$(5,0) 50 FOR a=40 T0 520 STEP 160 60 d=d+1: IF d MOD 2=0 THEN GRAPHICS PEN 1 ELSE GRAPHICS PEN 2 70 b=20:p=40:s=4:y2=320:GOSUB 90: NEXT a 80 CALL &BB18: END 90 ORIGIN a,b:FOR y=0 T0 y2 STEP s 100 MOVE x,y:PRINT f$; :MOVE x+p,y:PRINT f$; 110 MOVE x-p,y:PRINT f$; 120 IF y MOD 24=0 THEN p=p-3 130 NEXT y: RETURNDieser Wechsel von blaugrünen und purpurnen Türmen, hervorgerufen durch den regelmäßigen PEN-Wechsel in Zeile 60 und auf einem Grün-Moni-tor nur als trübe Spur erkennbar, sieht allerdings noch nicht nach einer “gotischen Turmfassade“ aus. Aber rücken Sie nun einfach die Türme näher zusammen, indem Sie die STEP-Angabe in Zeile 50 ändern in STEP 80! Und da entsteht an den Überschneidungsstellen kein Braunlilaton, sondern in leuchtendem Weiß wachsen zierlich strukturierte Türmchen wie an der Bekrönung einer gotischen Fassade empor. Geben Sie nun im Direktmodus ein: INK 1,0: INK 2,0 Jetzt haben Sie die “Gotische Turmfassade“ allein auf dem Bildschirm. Bei solchen INK-Experimenten, bei dem Sie den PENs alle möglichen Farben zuweisen, um die beste Wirkung auszuprobieren, kann es leicht passieren, daß Sie nicht mehr zurückfinden und vielleicht plötzlich gar nichts mehr auf dem Bildschirm zu sehen ist. Da hilft ein Trick: der Befehl CALL &BC02 stellt die ursprüngliche Farb-zuweisung des CPC auf dem ganzen Bildschirm wieder her; diese Eingabe werden Sie zur Not auch bei schwarzem Bildschirm noch blind hinkriegen, und mit einem Schlag erscheint Ihr ganzes Bild wieder. 3.2. Farbcodierung intern Wie nun der merkwürdige Farbeffekt bei unseren Türmen zustande kommt, klärt ein Blick in das Innenleben des CPC-Bildschirmspeichers. Die Bildpunkte auf dem Monitor werden ja nicht einzeln codiert, sondern es werden jeweils mehrere zu einem sogenannten Byte zusammengefaßt, das aus 8 Bit, also acht kleinsten Einheiten besteht. Im MODE 2 ergibt jedes dieser einzelnen Bits einen Punkt; im MODE 1 dagegen wirken jeweils zwei Bits für einen Punkt zusammen, aber nicht die zwei nebeneinanderliegenden, sondern die, die in einem Abstand von vier Bit nebeneinander stehen: Bit 0 und 4 zusammen ergeben also den Punkt 1, Bit 1 und 5 den Punkt 2, usw. Dabei gilt folgende Codierung: Die Bitfolge 00 ergibt PEN 0, 01 ergibt Pen 1,10 ergibt PEN 2,11 ergibt PEN 3 (in binärer Schreibweise ist ja 11 soviel wie dezimal 3). Nun ist der Farbeffekt bei unserer “Turmfassade“ klar: PEN 1 XOR PEN 2 ergibt nicht lila (das wäre ja nur eine augenblickliche INK-Zuweisung), sondern PEN 3 (binär: 01 XOR 10 = 11), und dem PEN 3 wurde ja das helle Weiß zugewiesen. Nun wird auch klar, warum bei einem Bild im MODE 1, das Sie waagerecht spiegeln, die Farbe wechselt (nehmen Sie dafür z.B. den “Mosaikstern“ aus Heft 6/89). Aus dem Byte 00001111 wird eben beim Spiegeln 11110000 - und das ergibt PEN 2. Klar wird jetzt auch ein anderer Effekt, den Ihnen MULTISCREEN ermöglicht. Wenn Sie ein Bild im MODE 2 eingeladen haben (z.B. den “Eiglobus“ aus Heft 6/89), dann unterbrechen Sie doch einmal den Programmlauf, und geben Sie im Direktmodus ein: m = 1. Dadurch werden alle im Speicher befindlichen Bilder auf MODE 1 gesetzt. Drücken Sie jetzt die kleine ENTER-Taste - ein völlig anderer Eiglobus erscheint! Auf dem Grünmonitor ist er dünn und löchrig geworden, auf dem Farbmonitor entfaltet sich ein wirres Farbenspiel. Die einzelnen Bits im Bildschirmspeicher werden jetzt eben ganz anders interpretiert, als Farbco-dierung wie oben dargestellt. Oder versetzen Sie das “Brötchenbild“ (Heft 6/89), nachdem es im Mode 2 eingeladen wurde, in den MODE 1 — da wird die ganze Struktur verändert, durch die Farbe ist ein neues Bild entstanden. Geben Sie jetzt im Direktmodus ein: INK1,0:INK2,0: INK 3,26. Wieder haben Sie ein ganz neues Strukturmuster auf dem Bildschirm! Freilich: Das alte Bild ist trotzdem noch vorhanden, nur mit teilweise nicht sichtbaren Farben. Verwenden Sie eine Hardcopyroutine, die, wie viele solcher Routinen, alles ausdruckt, was auf dem Bildschirm sichtbar ist, so bekommen Sie mit ihr alles, auch die Teile, die Sie gerade beseitigt haben, aufs Papier. Und wenn Sie versuchen, das “Grabkreuz“ (Heft 6/89) zu spiegeln und die beiden Bilder über AND zu kombinieren, ergibt sich gar nichts — PEN 1 (=01) und PEN 2 (==10) haben eben nichts gemeinsam. 3.3. PENs umwandeln Ja, wenn man die PENs auch so umwandeln könnte wie die INKs! Nun, über BASIC geht das leider nicht. Aber ein kleines Maschinenprogramm (das uns später auch noch andere Dienste leisten wird) kann hier helfen! Es verschafft Ihnen die völlig neuartige Möglichkeit, im MODE 1 jeden beliebigen PEN in jeden anderen umzuwandeln. Tippen Sie den Datalader dafür ab ( = “PENLADER.BAS“, Listing 2), speichern Sie ihn auf Ihre MULTI-SCREEN-Diskette bzw. -Kassette, und lassen Sie ihn laufen. Er erzeugt und speichert ein Maschinenprogramm, das beim ersten Aufruf von MULTISCREEN mitgeladen wird. Fügen Sie dann in MULTISCREEN die folgenden Zeilen ein: 54 IF PEEK(&a4FE) < > &CB THEN LOAD"PENBYTES.BIN",&A4F5 152 PRINT"(13) Pen umwandeln“ 520 MODE m: CALL s 530 INPUT"Alter PEN, neuer PEN: “,ap,np 540 IF ap=1 THEN ap=2 ELSE IF ap=2 THEN ap=1 550 IF np=1 THEN np=2 ELSE IF np=2 THEN np=1 560 P0KE &A4F6,ap:P0KE &A4F8,np:CALL s: CALL &A4F5 570 IF INKEY (27) =0 THEN LOCATE 1,1: CALL b: GOTO 530 580 IF INKEY(47)=0 THEN 250 590 GOTO 570Nun können Sie im MODE 1 jeden PEN umwandeln; wollen Sie noch einen weiteren PEN ändern, so brauchen Sie nur auf < p > zu drücken. Die lästige Erscheinung, daß dabei zunächst immer ein “p“ auf dem Bildschirm erscheint, das erst weggelöscht werden muß, können Sie beim CPC 664/6128 vermeiden, indem Sie in Zeile 530 am Beginn noch einfügen: CLEAR INPUT (der CPC 464 kennt diesen Befehl nrcht). Zweimaliger Leertastendruck übernimmt das umgewandelte Ergebnis und führt zurück zum Menü. 4. Farben und Ausfüllen Für die Grafik ist wichtig, daß die verschiedenen FILL-Befehle sich gegenüber den PENs ganz verschieden verhalten. Manche (wie der des mehrfach erwähnten COPYSHOP-Programms sowie der des Emulators für den CPC 464) betrachten jeden anderen PEN außer dem, auf dem sie zu laufen beginnen, als Sperrfarbe, andere (wie der des AMSTRAD-BASIC oder unser Exotic-Fill) erkennen nur eine einzige Sperrfarbe, die man angeben muß. Versetzen Sie den “Eiglobus“ in den MODE 1, und starten Sie das Ausfüllen von dem Loch in der Bildmitte aus, so wird fast das ganze Bild ausgefüllt (dabei entstehen interessante Zwischenstadien, die Sie durch den FILL-Unterbrecher für großartige Stadtsilhouetten hernehmen können); wandeln Sie aber vorher PEN 3 in PEN 1 um, so frißt sich der Ausfüllvorgang in ganz anderem Muster über die Fläche und bricht dann ab. So können Sie jede Grafik in MULTISCREEN in wechselnden Modes untersuchen und durch PEN-UmWandlung die unterschiedlichsten Effekte hervorrufen. Probieren Sie das PEN-Umwandeln auch einmal im MODE 2 an einem reichstrukturierten Bild, etwa dem Eiglobus, aus! Da ergeben sich merkwürdige Strukturveränderungen. Mit noch ganz anderen Strukturveränderungen, die durch die Umwandlung bestimmter Bytes entstehen, werden wir uns im nächsten Heft beschäftigen. Friedrich Belzner/cd, CPCAI |