← ST-Computer 03 / 1990

Bilddaten-Konverter

Programmierpraxis

Das hier vorgestellte Programm ist in der Lage, Bilder als Ganzes oder nur Bildausschnitte in Datazeilen umzuwandeln. Dadurch hat man die Möglichkeit, kleine Grafiken in eigene Programme einzubauen, ohne vorher noch ein Bild laden zu müssen.

Das Herz des Programms ist der Befehl POINT (X,Y), mit dem abgefragt wird, ob ein Bildpunkt (Pixel) vorliegt oder nicht. Mit der FOR-NEXT-Schleife wird dann der gewünschte Bildausschnitt durchlaufen und nach obigem Prinzip abgefragt. Hat das Programm einen Punkt gefunden, schreibt es sofort eine DATA-Zeile auf Diskette. In einer DATA-Zeile befinden sich max. neun Koordinaten mit den x- und y-Werten. Werden noch mehr Koordinaten gefunden, eröffnet das Programm eine neue DATA-Zeile auf Diskette. Ferner wird noch eine kleine Routine mit abgespeichert, mit der die abgespeicherten DATA- Zeilen sofort als Programm gestartet werden können.

Einladen und fertig

Natürlich muß man das abgespeicherte Programm vorher erst mit MERGE im Interpreter laden, sonst tut sich gar nichts. Lädt man das Programm DATA.LST dann in den Interpreter, braucht man es nur noch zu starten, und man bekommt die vorher eingegrenzten Grafikzeilen. Wie man die Bildpunkte vorher eingrenzt? Nun, das ist eigentlich recht einfach.

Zunächst tippt man das Programm BILDDATA.BAS ab (möglichst fehlerfrei), und wenn man will und kann, hat man sogar die Möglichkeit, es zu compilieren. Der nächste Schritt ist dann der, das Programm zu starten. Anschließend erscheint eine Fileselectorbox, mit der Sie das gewünschte Bild auswählen sollen, aus der Sie die Grafik entnehmen wollen. Ist auch dies geschehen, wird das Bild geladen. Jetzt kommt der eigentliche Akt: Mit einem Fadenkreuz ziehen Sie bei gedrückter linker Maustaste eine Box um den gewählten Bereich. Das Programm beginnt dann mit der schon oben beschriebenen Arbeit. Nach Beendigung wird es sofort verlassen.

Das war’s. Im Moment ist das Programm nur in der Lage, SCREEN-Bildformate (Doodle) zu laden, aber das kann natürlich geändert oder erweitert werden, ganz wie man möchte. Weiterhin möchte ich noch anmerken, daß der gewählte Bildinhalt nicht zu groß sein sollte, da sonst der Rechner später seine Zeit damit vertrödelt, mit der ohnehin sehr langsamen MERGE-Laderoutine Unmengen von Daten zu laden. Wenn dann der RAM-Speicher auch noch knapp wird, hat man vielleicht umsonst eine Kaffeepause eingelegt.

Nun bleibt mir nur noch. Ihnen viel Erfolg bei der Gestaltung Ihrer Programme mit hübschen Grafiken zu wünschen.

' Bildausschnitte umwandeln in Datazeilen ' ' Von Hardy Illsinger, Birkenweg 16, 6110 Dieburg ' ' (c) MAXON Computer GmbH 1990 ' CLS SETCOLOR 0,1 BOX 149,10,490,52 DEFTEXT 1,0,0,13 TEXT 156,32,"Bitte wählen Sie das zu bearbeitende Bild" DEFTEXT 1,0,0,6 TEXT 360,46,"Doodle-Format" FILESELECT "\*.PIC","",bild$ IF bild$="" CLS ALERT 1,"ABBRUCH gedrückt !!!",2,"weiter|ENDE",wahl% IF wahl%=1 CLS RUN ENDIF IF wahl%=2 CLS EDIT ENDIF ENDIF CLS BLOAD bild$,XBIOS(2) ' DEFMOUSE 5 !Routine zur Wahl des Bildausschnitts DO MOUSE x1%,y1%,k% GRAPHMODE 3 DEFLINE 2,1,0,0 WHILE MOUSEK=1 MOUSE xr%,yr%,k% BOX x1%,y1%,xr%,yr% REPEAT UNTIL MOUSEK=0 OR MOUSEX<>xr% OR MOUSEY<>yr% BOX x1%,y1%,xr%,yr% IF MOUSEK-O @data ENDIF WEND LOOP ' PROCEDURE data ! Routine zur Abtastung der Bildpunkte OPEN "O",#1,"DATA.LST" PRINT #1,"@Zaehlauswertung" PRINT #1,"For I=1 To Zaehler" PRINT #1,"Read X, Y" PRINT #1,"Plot X, Y" PRINT #1,"Next I" PRINT #1,"Void Inp(2)" zeile=0 zaehler=0 FOR y=y1% TO yr% FOR x=x1% TO xr% IF POINT(x,y)=1 INC zaehler IF zeile=0 PRINT #1,"Data "; ENDIF PRINT #1,x;",";y; INC zeile IF zeile<9 PRINT #1,","; ENDIF IF zeile=9 PRINT #1,"" zeile=0 ENDIF ENDIF IF y=yr% AND x=xr% PRINT #1,"" ENDIF NEXT x NEXT y PRINT #1,"Procedure Zaehlauswertung" PRINT #1,"Zaehler=",zaehler PRINT #1,"Return" CLOSE #1 EDIT RETURN
Hardy Illsinger