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.
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