Creare un file immagine dagli oggetti presenti in un Contenitore
Da Gambas-it.org - Wikipedia.
Versione del 20 lug 2024 alle 17:39 di Vuott (Discussione | contributi)
Il caso è quello in cui si intende creare un file immagine da un Contenitore qualsiasi, nel quale siano presenti uno o più Oggetti grafici, magari anche colorati e contenenti del testo.
L'immagine salvata nel file dovrà rappresentare i Controlli presenti nel Contenitore, tenendo conto delle loro proprietà (colore, dimensioni, eventuale testo, etc.) specificate al momento della creazione dagli Oggetti grafici.
Usando la Classe Paint
Nel seguente esempio pratico si hanno sul Form (Contenitore) due Label e un Button. Si intende ottenere un file immagine di quanto appare nel Form, escludendo il Button.
Private lb1 As Label Private lb2 As Label Private Button1 As Button Public Sub _new() With Me .Center .W = 700 .H = 600 End With With lb1 = New Label(Me) .X = 100 .Y = 100 .W = 100 .H = 50 .Background = Color.Red .Foreground = Color.Yellow .Alignment = Align.Center .Text = "Label rossa" End With With lb2 = New Label(Me) .X = 200 .Y = 200 .W = 100 .H = 50 .Background = Color.Yellow .Foreground = Color.Red .Alignment = Align.Right .Text = "Label gialla" End With With Button1 = New Button(Me) As "Button1" .W = 60 .H = 60 .X = Me.W - (Button1.W * 2) .Y = Me.H - (Button1.H * 2) End With End Public Sub Button1_Click() Dim ob As Object Dim im As Image ' Si crea la superficie dell'immagine che dovrà contenere la riproduzione grafica di quanto presente sul Form: im = New Image(600, 400, Color.White, Image.Standard) With Paint .Begin(im) For Each ob In Me.Children If Object.Type(ob) = "Label" Then ' Il colore, con il quale saranno stampati i due oggetti "Label", lo ricaviamo dal colore di sfondo di ciascuna "Label" medesima: .Brush = .Color(ob.Background) ' Sarà stampato il contenuto presente nel rettangolo di coordinate e dimensioni uguali a quelle dell'oggetto da stampare: .Rectangle(ob.X, ob.Y, ob.W, ob.H) .Fill ' Ora viene impostato il colore del testo: .Brush = .Color(ob.Foreground) ' Viene impostato il testo con le caratteristiche originarie della "Label" in questione: .Text(ob.Text, ob.X, ob.Y, ob.W, ob.H, ob.Alignment) .Fill Endif Next .End End With im.Save("/tmp/immagine.png", 100) End
Usando le risorse del Componente gb.media
Otterremo il file immagine di formato PNG di una GridView presente sul Form:
Public Sub Form_Open() Dim r, c As Byte With GridView1 .Rows.Count = 5 .Columns.Count = 5 End With For r = 0 To 4 For c = 0 To 4 GridView1[r, c].Text = "abcde" Next Next End Public Sub Button1_Click() Dim pl As MediaPipeline Dim src, vdc, enc, snk As MediaControl pl = New MediaPipeline src = New MediaControl(pl, "ximagesrc") src["xid"] = GridView1.Id vdc = New MediaControl(pl, "videoconvert") enc = New MediaControl(pl, "pngenc") snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp/immagine.png" src.LinkTo(vdc) vdc.LinkTo(enc) enc.LinkTo(snk) pl.Play() Repeat Wait 0.01 Print pl.State Until Right(File.Load("/tmp/immagine.png"), SizeOf(gb.Integer)) = MkInt(&826042AE) pl.Stop() pl.Close() Print "Cattura immagine effettuata" End