Bilddaten-Konverter

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
Links

Copyright-Bestimmungen: siehe Über diese Seite