Referenz - GET (Grafik)
Syntax: GET [QuellPuffer], [STEP] (x1, y1) - [STEP] (x2, y2), ZielPuffer
Typ: Anweisung
Kategorie: Grafik
GET speichert einen Ausschnitt aus einem Grafikfenster (bzw. vom Bildschirm bei Vollbildmodi) in einem Bildpuffer.
- 'QuellPuffer' ist ein Speicherbereich wie ein mit IMAGECREATE erstellter Puffer oder ein Array. Beide können mit PUT (Grafik) angezeigt werden. Wird 'QuellPuffer' ausgelassen, liest FreeBASIC direkt vom Bildschirm.
- '(x1, y1)' und '(x2, y2)' sind die Koordinaten der Eckpunkte eines Rechtecks, dessen Inhalt kopiert werden soll. Dabei steht die erste Koordinate für die linke obere Ecke und die zweite für die rechte untere Ecke. Wenn der angegebene Bereich (teilweise) außerhalb der Bildschirmgrenzen liegt, wird der Fehler 'unzulässiger Funktionsaufruf' ('illegal function call') ausgelöst. Wird dieser Fehler nicht durch ON ERROR behandelt, führt dies zum Programmabsturz.
- 'STEP' bewirkt, dass die angegeben Koordinaten relativ zur Position des Grafik-Cursors sind. Dabei kann für jedes Koordinatenpaar eine eigene STEP-Klausel gesetzt werden.
- 'ZielPuffer' ist ein Bildpuffer, in dem der Bildschirmausschnitt gespeichert wird. Ebenso wie 'QuellPuffer' handelt es sich hierbei um einen Bildpuffer, wie er mit IMAGECREATE verwendet wird.
GET wird benutzt, um einen Bildschirmausschnitt zu speichern, um ihn später mit PUT (Grafik) zu verwenden. Die Koordinaten werden von den letzten WINDOW- und VIEW-Anweisungen beeinflusst und müssen beide innerhalb der aktuellen Fenstergrenzen (bzw. Bildschirmgrenzen) liegen.
Der angegebene Puffer muss groß genug sein, um den Bildschirmausschnitt speichern zu können. Die dafür benötigte Größe hängt von der Größe des Bildschirmausschnitts und der verwendeten Farbtiefe ab. IMAGECREATE erzeugt automatisch einen Puffer, der ein Bild angegebener Größe aufnehmen kann. Siehe auch Interne Pixelformate zur manuellen Berechnung des Speicherplatzbedarfs.
Beispiel:
Das folgende Beispiel zeichnet einen Spielstein, der mit der Maus über einen mehrfarbigen Hintergrund bewegt wird. GET wird verwendet, um den aktuellen Hintergrund unter der Spielstein-Position zu speichern, um ihn nach einer Bewegung des Steins wieder herstellen zu können.
#DEFINE PI 3.141592653589793
SCREENRES 300, 200, 32 ' Grafikscreen mit 32bit Farbtiefe
DIM AS ANY PTR bild, hg
DIM AS UINTEGER hell = RGB(255, 64, 64) ' heller Farbwert des Steins
DIM AS UINTEGER dunkel = RGB(192, 0, 0) ' dunkler Farbwert des Steins
' Bild in den Puffer schreiben
bild = IMAGECREATE(40, 40)
hg = IMAGECREATE(40, 40)
CIRCLE bild, (20, 25), 15, dunkel, PI, 0, .6
LINE bild, (5, 20)-step (0, 5), dunkel
LINE bild, (35, 20)-step (0, 5), dunkel
CIRCLE bild, (20, 20), 15, dunkel, , , .6
PAINT bild, (20, 30), dunkel, dunkel
PAINT bild, (20, 20), hell, dunkel
' Hintergrund erstellen
LINE (50, 50)-(250, 150), RGB(0,255,0), BF ' gruenes Rechteck ...
LINE (80, 80)-(220, 120), RGB(0,0,255), BF ' ... und darin ein blaues
DIM AS INTEGER mausX = 0, mausY = 0, mausB ' Mausposition und Buttonstatus
DIM AS INTEGER altX = 0, altY = 0 ' zuletzt gemerkte Mausposition
SETMOUSE mausX, mausY, 0, 1 ' Maus auf das Fenster beschraenken
GET (altX, altY)-step(39, 39), hg ' Hintergrund speichern
PUT (mausX, mausY), bild, TRANS
DO
GETMOUSE mausX, mausY, , mausB ' neue Position ermitteln ...
IF mausX > 260 THEN mausX = 260 ' ... und an den Grenzen anpassen
IF mausy > 160 THEN mausY = 160
IF mausX <> altX OR mausY <> altY THEN ' Maus wurde bewegt
SCREENLOCK
PUT (altX, altY), hg, PSET ' alte Position wiederherstellen
GET (mausX, mausY)-step(39, 39), hg ' Hintergrund speichern
PUT (mausX, mausY), bild, TRANS ' neue Position zeichnen
SCREENUNLOCK
altX = mausX ' neue Position merken
altY = mausY
END IF
SLEEP 1
LOOP UNTIL mausB > 0 OR INKEY = CHR(27) ' bei Mausklick oder ESC beenden
IMAGEDESTROY bild ' Bildpuffer freigeben
IMAGEDESTROY hg
Unterschiede zu QB:
- Im Gegensatz zur QB-Version verkleinert sich in FreeBASIC die benötigte Feldgröße nicht, wenn Sie eine geringere Farbtiefe als 8 bpp verwenden.
- Wenn Sie multidimensionale Arrays als Bildpuffer verwenden, achten Sie darauf, dass FreeBASIC die Daten in Zeilen-Reihenfolge speichert (QB speichert in Spalten-Reihenfolge). Was Sie also in QB mit PUT (100, 100), sprites(0, 7) implementiert haben, muss in FreeBASIC PUT (100, 100), sprites(7, 0) lauten.
- FreeBASIC erlaubt neben Arrays auch andere Formen von Bildpuffern.
- Der interne Aufbau eines Bildpuffers in FreeBASIC unterscheidet sich von dem, der in QB genutzt wird.
Unterschiede zu früheren Versionen von FreeBASIC:
- Seit FreeBASIC v0.17 benutzt GET das neue Bildpuffer-Format; siehe dazu Interne Pixelformate.
- Die Möglichkeit, einen Quellpuffer anzugeben, existiert seit FreeBASIC v0.15.
- Seit FreeBASIC v0.13 wird ein Laufzeitfehler ausgelöst, wenn versucht wird, Bereiche einzulesen, die außerhalb der Bildschirmgrenzen liegen.
- Die Möglichkeit, anstelle von Arrays auch Pointer als Puffer anzugeben, existiert seit FreeBASIC v0.12.
Unterschiede unter den FB-Dialektformen:
- In der Dialektform -lang fb wird als 'ZielPuffer' die neue Version des Bildpuffers verwendet, der mit einem 32-Byte Image-Header beginnt und dessen Zeilen auf Vielfache von 16 Bytes aufgestockt werden. Der benötigte Speicherplatz beträgt
speicherplatz = 32 + (((Breite * bpp + &hF) AND NOT &hF) * Hoehe) - In der Dialektform -lang qb und -lang fblite wird als 'ZielPuffer' die alte QB-Version des Bildpuffers verwendet, der mit einem 4-Byte Image-Header beginnt und dessen Zeilen nicht aufgestockt werden. Der benötigte Speicherplatz beträgt:
speicherplatz = 4 + (Breite * Hoehe * bpp)
Siehe auch:
GET (Datei), PALETTE GET, PUT (Grafik), IMAGECREATE, SCREENRES, Grafik
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|