Gambas: Bilder

Aus Wikibooks


zurück zu Gambas


Picture,Image,Drawingarea,Picturebox etc[Bearbeiten]

Was ist der Unterschied zwischen einem Image und einem Picture ?[Bearbeiten]

Unter Linux werden Bilder und Grafiken mit X11 dargestellt. Das X System hat dabei eine Netzkomponenete. Ein Bild, welches von einem Programm bearbeitet wird, kann auf einem ganz anderen Rechner im Netz gezeigt werden.

Ein Image in Gambas ist ein Bild, das auf ein Programm beschränkt bleibt. So kann man schneller darauf zugreifen und mehr mit dem Bild anstellen. ( Strecken, drehen etc)

Ein Picture in Gambas ist ein Bild das unter X dargestellt wird, ob das nun auf derselben Maschine oder sonst wo im Netz passiert , ist dabei offen. Jede Veränderung an dem Bild geht also den Umweg über einen Netzaufruf oder eine lokale pipe. Deswegen funktioniert das deutlich langsamer.

In Programmen mit intensiver Bildernutzung, wird man je nach Bedarf von einem in das andere Format wechseln und konvertieren, wenn es nützlich erscheint.

Das Image Bildformat ist also gut für Bildmanipulationen, das Picture Bildformat ist besser geeignet für reine Darstellungszwecke.

Grafikfeld ( DrawingArea)[Bearbeiten]

siehe Gambas:_Grafik

Bildfeld (Picturebox)[Bearbeiten]

Scrollviewfeld[Bearbeiten]

Um mit Bilder oder Grafiken zu arbeiten ist das Steuerelement ScrollView ganz praktisch. Man findet es in der Werkzeugkiste (F6) neben der DrawingArea.

Mit dem Scrollviewfeld kann man auch größere Bilder anschauen, denn es stellt eine vertikale und horizontale Schiebeleiste bereit.

Wenn man das Scrollviewfeld nutzen will, dann plaziert man es als erstes auf der Form. Man macht es etwas größer. Dazu zieht man es an der rechten unteren Ecke größer auf. Dann läßt man es markiert. Man erkennt dies an den kleinen weißen Rechtecken am Rand des Steuerelementes. Jetzt plaziert man in das Scrollviewfeld hinein eine DrawingArea oder eine Picturebox. Auch diese zieht man etwas größer.

Mittels Code muß man dann beide Steuerelemente aneinander anpassen. Wie das geht zeigt das Programmbeispiel in Laden Sie ein Bild in eine Picturebox. weiter unten.

Laden Sie ein Bild in eine Picturebox[Bearbeiten]

Mit diesem kleinen Programm wird ein Screenshot in eine Picturebox geladen.

Wenn Sie nicht wissen, was ein Screenshot ist, dann schauen Sie hier nach:

http://de.wikipedia.org/wiki/Screenshot

Um das Programm in Gang zu bringen, brauchen Sie eine Form, einen Befehlsbutton, ein Scrollviewfeld. In dieses Scrollviewfeld platzieren Sie eine Picturebox.

Code:

PUBLIC SUB Button1_Click()
 bild AS NEW Picture
 bild = Desktop.Grab()
 'Screenshot wird gemacht
 PictureBox1.Picture = bild
END

Sie können diesen Code verbessern, wenn Sie die Picturebox an das Scrollviewfeld anpassen:

PUBLIC SUB Button1_Click()
 bild AS NEW Picture
 'Form1.Hide 
 'Form wird ausgeblendet 
 bild = Desktop.Grab()
 'Screenshot wird gemacht
 Picturebox1.Resize(bild.Width, bild.Height)
 'Picturebox so groß machen wie das Bild
 Picturebox1.X = 0
 Picturebox1.y = 0
 'Picturebox an Scrollview anpassen
 PictureBox1.Picture = bild
 'Form1.Show
END

Umwandeln eines Pictures in ein Image[Bearbeiten]

Im folgenden Beispiel wird eine Screenshot erzeugt. Dieser wird in ein Image umgewandelt und in einer DrawingArea angezeigt.

Um das Programm in Gang zu bringen brauchen Sie:

  • Eine Form
    • Einen Commandbutton = Befehlsknopf
    • Ein ScrollViewfeld = Feld mit vertikaler und horizontaler Verschiebemöglichkeit
      • Im Scrollviewfeld eine Drawingarea

Der Code:

PUBLIC SUB Button1_Click()
 bild AS NEW Picture
 i AS NEW Image 
 bild = Desktop.Grab()
 'hier wird ein Screenshot gemacht 
 i = bild.image 
 'hier wird das bild in ein image umgewandelt
 Drawingarea1.Cached = TRUE 
 DrawingArea1.Resize(i.Width,i.Height)
 DrawingArea1.Clear()
 Draw.Begin(DrawingArea1)
  Draw.Image(i, 0, 0)
 Draw.End
 DrawingArea1.Visible = TRUE
 DrawingArea1.Refresh
END

Laden Sie ein Bild mit Dialog in eine Picturebox[Bearbeiten]

Mit dem folgenden Programm können Sie ein Bild mit folgendem Format: jpg; jpeg; png; bmp mit einem Dialogfenster in eine Pictureboxladen.

Um das Programm in Gang zu bringen brauchen Sie

  • eine Picturebox aus der Werkzeugkiste
  • einen Befehlsbutton in der Picturebox

Code:

PUBLIC SUB Button1_Click()
 p AS picture
 Dialog.Path = "/usr/share/wallpapers"
 IF NOT Exist(Dialog.Path) THEN
   Dialog.Path = System.Home
 ENDIF
 Dialog.Filter = [ "Picture files (*.jpg; *.jpeg; *.png; *.bmp)", "All files (*.*)" ]
 IF Dialog.OpenFile() THEN RETURN
 p = NEW picture
 p.Load(Dialog.Path)
 Picturebox1.Resize(p.Width, p.Height)
 Picturebox1.Picture = p
 PictureBox1.Move(0, 0, ME.ClientW, ME.ClientH)
 Picturebox1.Visible = TRUE
CATCH
 Message.Warning(Error.Text & " !")
END

Bei diesem Programm stört noc, das das Bild beim Laden 2 mal angezeigt wird. Wie kann man diese vermeiden ?

Laden Sie ein Bild ohne Dialog in die Picturebox[Bearbeiten]

Vorsicht. Dieses Beispiel ist etwas kompliziert.

Mit dem folgenden Programm kann man ein Bild in die Picturebox laden. Das Programm beruht auf dem Beispiel Programm blights, welches mit Gambas mitgeliefert wird.

Starten sie ein neues Projekt . Holen Sie sich eine neue Form mit der Rechten Maustaste auf Form im Projekt. Nennen Sie die Form wie sie wollen. Platzieren sie auf der Form 2 Befehlstasten und eine Picturebox . Speichern Sie in das Programmverzeichnis 2 Bilddateien blon.xpm und bloff.xpm, die sie unter blights in den Beispielen von Gambas finden.

Wenn Sie die Bilder nicht finden, nehmen sie andere Bilddateien oder schauen Sie einmal in folgendem Verzeichnis nach: /opt/gambas/share/gambas/examples/Basic

Mit den Befehlstasten An und Aus laden Sie nun verschiedene Bilder in die PictureBox1.

Der Programmcode schaut so aus :

' Gambas class file
PUBLIC SUB Button1_Click()
PictureBox1.Picture = Picture["bloff.xpm"]
END
'--------------
PUBLIC SUB Button2_Click()
PictureBox1.Picture = Picture["blon.xpm"]
END

Bild speichern ohne Dialog[Bearbeiten]

Dim P as picture Dim A as string Dim B as string P = picture.box1.picture B = "hallo.png" A = ("/home/name/bilder" & B) P.save(A) Eine einfache methode picture abzuspeichern.

Bild speichern mit Dialog[Bearbeiten]

Bild aus dem Clipboard holen[Bearbeiten]

Bild in den Zwischenspeicher laden[Bearbeiten]

Resize[Bearbeiten]

Mehrere grafische Elemente von Gambas kennen die Resizemethode. Wie der Name schon sagt kann man damit die Größe eines grafischen Objektes auf dem Bildschirm verändern.

Wie das geht zeigt folgendes Beispiel:

PUBLIC SUB Form_Open()
 Textbox2.Text = "200"  
 Textbox3.Text = "200"
 Button1.Text = "Resize Button1"
 Button1.Width = 200
 Button1.Height = 50
END
PUBLIC SUB Button1_Click()
 Button1.Resize(Val(textbox1.text),Val(textbox2.text))
END

Um das Programm in Gang zu bringen brauchen Sie 2 Textboxen und einen Befehlsbutton auf Ihrer Form. Drückt man auf den Befehlsbutton nach Start des Programmes, dann wird seine Größe an Hand der Werte in den 2 Textboxen verändert. Bereits beim Start des Programmes wird das Unterprogramm Form_Open abgearbeitet und macht ein paar sinnvolle Voreinstellungen. Im Unterprogramm Button1.Click wird dann geresized d.h die Größe verändert. Als Alternative kann man natürlich auch eingeben:

 Button1.Width = Val(textbox1.text)
 Button1.Height = Val(textbox2.text)

Man kann also auch ohne Resizemethode resizen.

Beispiel 2: Automatisches Resize einer Textarea an eine Form:

PUBLIC SUB Form_Resize()
 TextArea1.Move(0, 0, ME.ClientWidth, ME.ClientHeight) 
END

Sie brauchen eine Form und eine Textarea um das Programm in Gang zu bringen. Ganz egal wo die Textarea steht, sie wird an die Form angepasst. Auch wenn man die Form verschiebt bleibt, die Textarea an der Form kleben.

Cached[Bearbeiten]

Refresh[Bearbeiten]

Screenshot[Bearbeiten]

Mit diesem kleinen Programm wird ein Screenshot in eine Picturebox geladen.

Wenn Sie nicht wissen, was ein Screenshot ist, dann schauen Sie hier nach:

http://de.wikipedia.org/wiki/Screenshot

Um das Programm in Gang zu bringen, brauchen Sie eine Form, einen Befehlsbutton, ein Scrollviewfeld. In dieses Scrollviewfeld platzieren Sie eine Picturebox.

Code:

PUBLIC SUB Button1_Click()
 bild AS NEW Picture
 bild = Desktop.Grab()
 'Screenshot wird gemacht
 PictureBox1.Picture = bild
END