FreeBasic: Bilddateien speichern
Der einfachste Weg
BearbeitenDer einfache Weg ist einfach Bsave zu benutzten. Diese Funktion ist leicht zu benutzen. Man gibt nur den Namen und den Bildpuffer an (0 für den Fensterinhalt) und das Bild wird erstellt. Diese Funktion ist bis jetzt nur mit Bitmaps kompatibel.
Beispiel Code:
screen 20,32 ' Ein Fenster mit der Größe 1024x768 und der Farbtiefe 32Bit wird
' geöffnet (natürlich kann auch screenres benutzt werden)
for i=0 to 255 ' Ein Bild wird in dieses Fenster gezeichnet...
circle(300,50+i),i, RGB(i*10 mod 255,i mod 255,0)
next i
bsave "C:\bild2.bmp", 0 ' Das Bild wird mit BSAVE in gespeichert (Die Null hinter dem Pfad
' steht für den Bildpuffer 0: Den Bildschirm. Ansonsten kann hier der
' Pointer auf einen Puffer angegeben werden... Wenn dieser Parameter
' ausgelassen wird, nimmt FreeBASIC automatisch 0 an). (Bei Vista
' gibt es Probleme, wenn man auf die Boot-Partition speichern
' will, das wird dann nämlich einfach nicht gemacht...[zumindest bei
' mehreren Partitionen])
sleep
Im Normalfall reicht diese Funktion aus. Wenn man nur einen Bildausschnitt haben will muss man mit Put arbeiten. Das ist das nächste Thema.
Bildausschnitte
BearbeitenOft kommt es vor, dass man nur einen bestimmten Teil als Bild speichern will. Hier ein kleines Beispiel wie das Funktioniert:
screen 19,32
circle (50,50),50,rgb(255,0,0)
pset(0,0),rgb(255,0,0)
pset(99,99),rgb(255,0,0)
dim buffer as any ptr
buffer = imagecreate(100,100,rgb(255,0,0))
get (0,0)-(99,99),buffer
bsave "bild.bmp",buffer
Mit Get wird ein Teil des Bildschirms genommen und in einem Imagebuffer gelegt. Dieser wird dann als zweiter Parameter von Bsave benutzt. Zum es sich leichter machen auch hier eine Hilfsfunktion:
declare sub SavePic (byval picname as string, byval x1 as integer, byval y1 as integer, byval x2 as integer, byval y2 as integer)
sub SavePic (byval picname as string, byval x1 as integer, byval y1 as integer, byval x2 as integer, byval y2 as integer)
dim buffer as any ptr
buffer = imagecreate(x2-x1,y2-y1,rgb(255,255,255))
get (x1,y1)-(x2,y2),buffer
bsave picname,buffer
imagedestroy buffer
end sub