FreeBasic: Bilddateien speichern


Der einfachste Weg Bearbeiten

Der 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 Bearbeiten

Oft 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