Gambas: Bilder
zurück zu Gambas
Picture,Image,Drawingarea,Picturebox etc
BearbeitenWas ist der Unterschied zwischen einem Image und einem Picture ?
BearbeitenUnter 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)
Bearbeitensiehe Gambas:_Grafik
Bildfeld (Picturebox)
BearbeitenScrollviewfeld
BearbeitenUm 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
BearbeitenMit 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
BearbeitenIm 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
BearbeitenMit 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
BearbeitenVorsicht. 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
BearbeitenDim 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
BearbeitenBild aus dem Clipboard holen
BearbeitenBild in den Zwischenspeicher laden
BearbeitenResize
BearbeitenMehrere 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
BearbeitenRefresh
BearbeitenScreenshot
BearbeitenMit 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