Creare un file immagine dagli oggetti presenti in un Contenitore

Da Gambas-it.org - Wikipedia.

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.

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