Differenze tra le versioni di "Ottenere una schermata ("screenshot") con Gambas"

Da Gambas-it.org - Wikipedia.
 
(3 versioni intermedie di uno stesso utente non sono mostrate)
Riga 2: Riga 2:
  
  
==Uso del Metodo ''.Screenshot( )'' della classe ''Desktop''==
+
==Uso del Metodo ".Screenshot()" della classe ''Desktop''==
Il Metodo "''.Screenshot( )''" della Classe ''Desktop'', utilizzabile attivando il Componente "''gb.desktop''", consente di ottenere una schermata della superficie del desktop delimitata dai valori indicati nei parametri del Metodo medesimo.
+
Il Metodo ".Screenshot()" della Classe ''Desktop'', utilizzabile attivando il Componente ''gb.desktop'', consente di ottenere una schermata della superficie del desktop delimitata dai valori indicati nei parametri del Metodo medesimo.
  
 
Vadiamo un paio di esempi pratici:
 
Vadiamo un paio di esempi pratici:
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
   
 
   
 
   Dim pc As Picture
 
   Dim pc As Picture
Riga 17: Riga 17:
 
   PictureBox1.Picture = pc
 
   PictureBox1.Picture = pc
 
    
 
    
  '''End'''
+
  End
 
 
 
Mostriamo ora un esempio più complesso: determineremo con lo spostamento del mouse l'area della schermata da mostrare nella ''PictureBox''.
 
Mostriamo ora un esempio più complesso: determineremo con lo spostamento del mouse l'area della schermata da mostrare nella ''PictureBox''.
 
  Private pn As Panel
 
  Private pn As Panel
Riga 26: Riga 25:
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_MouseDown()
+
  Public Sub Form_MouseDown()
 
   
 
   
 
  <FONT color=gray>' ''Se non c'è una schermata nella "PictureBox", viene distrutta:''</font>
 
  <FONT color=gray>' ''Se non c'è una schermata nella "PictureBox", viene distrutta:''</font>
Riga 40: Riga 39:
 
   yIniz = Mouse.Y
 
   yIniz = Mouse.Y
 
    
 
    
  '''End'''
+
  End
 
   
 
   
   
+
  Public Sub Form_MouseMove()
'''Public''' Sub Form_MouseMove()
 
 
   
 
   
 
   With pn
 
   With pn
Riga 53: Riga 51:
 
   End With
 
   End With
 
    
 
    
  '''End'''
+
  End
 
   
 
   
   
+
  Public Sub Form_MouseUp()
'''Public''' Sub Form_MouseUp()
 
 
    
 
    
 
  <FONT color=gray>' ''Effettuiamo la schermata (ossia lo "screenshot") dell'area individuata dal "Panel" dimensionato con lo spostamento del mouse.''
 
  <FONT color=gray>' ''Effettuiamo la schermata (ossia lo "screenshot") dell'area individuata dal "Panel" dimensionato con lo spostamento del mouse.''
Riga 72: Riga 69:
 
   pn.Delete
 
   pn.Delete
 
      
 
      
  '''End'''
+
  End
  
  
==Ottenere la schermata di una particolare finestra mediante il Metodo ''.GetScreenshot( )'' della Classe ''DesktopWindow''==
+
==Ottenere la schermata di una particolare finestra mediante il Metodo ".GetScreenshot()" della Classe ''DesktopWindow''==
Quast'altra modalità prevede l'uso del Metodo "''.GetScreenshot( )''" della Classe "''DesktopWindow''", attivando il Componente "''gb.desktop''".
+
Quast'altra modalità prevede l'uso del Metodo ".GetScreenshot()" della Classe ''DesktopWindow'', attivando il Componente ''gb.desktop'' .
  
In tal caso, però, bisognerà individuare preliminarmente il numero identificativo della finestra, della quale ottenenre la schermata, e così passarlo all'oggetto ''DesktopWindow'' da creare.
+
In tal caso, però, bisognerà individuare preliminarmente il numero identificativo della finestra, della quale ottenere la schermata, e così passarlo all'Oggetto ''DesktopWindow'' da creare.
  
 
Mostriamo un semplice esempio, nel quale otterremo una schermata della finestra del desktop:
 
Mostriamo un semplice esempio, nel quale otterremo una schermata della finestra del desktop:
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
    
 
    
 
   Dim dw As DesktopWindow
 
   Dim dw As DesktopWindow
Riga 97: Riga 94:
 
   pc.Save("/tmp/screenshot.png", 100)
 
   pc.Save("/tmp/screenshot.png", 100)
 
    
 
    
  '''End'''
+
  End
  
  
 
==Uso delle risorse del Componente ''gb.media''==
 
==Uso delle risorse del Componente ''gb.media''==
Anche il Componente ''gb.media'' può consentire di effettuare una schermata del desktop, in particolare utilizzando le risorse delle Classi "''MediaPipeline''", "''MediaControl''" e "''MediaFilter''".
+
Anche il Componente ''gb.media'' può consentire di effettuare una schermata del desktop, in particolare utilizzando le risorse delle Classi ''MediaPipeline'', ''MediaControl'' e ''MediaFilter''.
  
 
Mostriamo un semplice esempio:
 
Mostriamo un semplice esempio:
Riga 107: Riga 104:
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
   Dim src, sca, con, png, snk As MediaControl
+
   Dim src, con, png, snk As MediaControl
 
   Dim flt As MediaFilter
 
   Dim flt As MediaFilter
 
    
 
    
  pl = New MediaPipeline
+
  pl = New MediaPipeline
 
    
 
    
  src = New MediaControl(pl, "ximagesrc")
+
  src = New MediaControl(pl, "ximagesrc")
 
  <FONT Color=gray>' ''Imposta l'angolo x in alto a sinistra della schermata rispetto alla superficie del desktop:''</font>
 
  <FONT Color=gray>' ''Imposta l'angolo x in alto a sinistra della schermata rispetto alla superficie del desktop:''</font>
  src["startx"] = 0
+
  src["startx"] = 0
  src["use-damage"] = 0
+
  src["use-damage"] = 0
  sca = New MediaControl(pl, "videoscale")
+
  con = New MediaControl(pl, "videoconvert")
  sca["method"] = 0
+
  png = New MediaControl(pl, "pngenc")
<FONT Color=gray>' ''Imposta la dimensione del file immagine finale:''</font>
+
  snk = New MediaControl(pl, "filesink")
  flt = New MediaFilter(pl, "video/x-raw,width=640,height=480")
+
  snk["location"] = "/tmp/screenshot.png"
  con = New MediaControl(pl, "videoconvert")
 
  png = New MediaControl(pl, "pngenc")
 
  snk = New MediaControl(pl, "filesink")
 
  snk["location"] = "/tmp/screenshot.png"
 
 
    
 
    
 
  <FONT Color=gray>' ''Vengono collegati i vari plug-in di GStreamer utilizzati:''</font>
 
  <FONT Color=gray>' ''Vengono collegati i vari plug-in di GStreamer utilizzati:''</font>
  src.LinkTo(sca)
+
  src.LinkTo(con)
  sca.LinkTo(flt)
+
  con.LinkTo(png)
  flt.LinkTo(con)
+
  png.LinkTo(snk)
  con.LinkTo(png)
+
 
  png.LinkTo(snk)
+
  End
 
 
  '''End'''
 
 
 
   
 
   
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
    
 
    
 
  <FONT Color=gray>' ''Attende 3 secondi prima di effettuare lo "screenshot":''</font>
 
  <FONT Color=gray>' ''Attende 3 secondi prima di effettuare lo "screenshot":''</font>
Riga 147: Riga 137:
 
   pl.Stop()
 
   pl.Stop()
 
    
 
    
  '''End'''
+
  End
 
+
o anche eliminando il plug-in "Filter" e utilizzando in sua vece le proprietà "endx" e "endy" del plug-in ''ximagesrc'':
o anche eliminando il plug-in "Filter" e utilizzando in sua vece le proprietà "''endx''" e "''endy''" di "''ximagesrc''":
 
 
  Private pl As MediaPipeline
 
  Private pl As MediaPipeline
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
    
 
    
 
   Dim src, sca, con, png, snk As MediaControl
 
   Dim src, sca, con, png, snk As MediaControl
Riga 181: Riga 170:
 
   png.LinkTo(snk)
 
   png.LinkTo(snk)
 
    
 
    
  '''End'''
+
  End
 
 
   
 
   
  '''Public''' Sub Button1_Click()
+
  Public Sub Button1_Click()
 
    
 
    
 
   Wait 2
 
   Wait 2
Riga 193: Riga 181:
 
   pl.Stop()
 
   pl.Stop()
 
    
 
    
  '''End'''
+
  End
 +
oppure più semplicemente così:
 +
Private pl As MediaPipeline
 +
 +
 +
Public Sub Form_Open()
 +
 +
  Dim src, con, png, snk As MediaControl
 +
 +
  pl = New MediaPipeline
 +
 
 +
  src = New MediaControl(pl, "ximagesrc")
 +
  src["xid"] = <FONT Color=gray>''numero_identificativo_della_finestra (ad esempio della Scrivania)''</font>
 +
  con = New MediaControl(pl, "videoconvert")
 +
  png = New MediaControl(pl, "pngenc")
 +
  snk = New MediaControl(pl, "filesink")
 +
  snk["location"] = "/tmp/screenshot.png"
 +
 +
  src.LinkTo(con)
 +
  con.LinkTo(png)
 +
  png.LinkTo(snk)
 +
 
 +
End
 +
 +
Public Sub Button1_Click()
 +
 +
<FONT Color=gray>' ''Effettua lo "screenshot":''</font>
 +
  pl.Play()
 +
<FONT Color=gray>' ''Chiude il flusso:''</font>
 +
  pl.Stop()
 +
 +
End
  
  
Riga 200: Riga 219:
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
 
   Dim da As DrawingArea
 
   Dim da As DrawingArea
Riga 207: Riga 226:
 
    
 
    
 
  <FONT Color=gray>' ''Crea una "DrawingArea" come oggetto GUI da usare per l'uscita immagine:''</font>
 
  <FONT Color=gray>' ''Crea una "DrawingArea" come oggetto GUI da usare per l'uscita immagine:''</font>
  With da = New DrawingArea(Me)
+
  With da = New DrawingArea(Me)
    .X = 10
+
    .X = 10
    .Y = 10
+
    .Y = 10
    .W = 640
+
    .W = 640
    .H = 480
+
    .H = 480
 
  <FONT Color=gray>' ''E' assolutamente necessario dare un qualsiasi valore alla proprietà ".Background" della "DrawingArea", altrimenti l'immagine non verrà mostrata:''</font>
 
  <FONT Color=gray>' ''E' assolutamente necessario dare un qualsiasi valore alla proprietà ".Background" della "DrawingArea", altrimenti l'immagine non verrà mostrata:''</font>
    .Background = Color.Transparent
+
    .Background = Color.Transparent
  End With
+
  End With
 
    
 
    
  pl = New MediaPipeline
+
  pl = New MediaPipeline
 
    
 
    
  src = New MediaControl(pl, "ximagesrc")
+
  src = New MediaControl(pl, "ximagesrc")
 
  <FONT Color=gray>' ''Imposta l'angolo x in alto a sinistra della schermata rispetto alla superficie del desktop:''</font>
 
  <FONT Color=gray>' ''Imposta l'angolo x in alto a sinistra della schermata rispetto alla superficie del desktop:''</font>
  src["startx"] = 0
+
  src["startx"] = 0
  src["use-damage"] = 0
+
  src["use-damage"] = 0
  sca = New MediaControl(pl, "videoscale")
+
  sca = New MediaControl(pl, "videoscale")
  sca["method"] = 0
+
  sca["method"] = 0
 
  <FONT Color=gray>' ''Imposta la dimensione del file immagine finale:''</font>
 
  <FONT Color=gray>' ''Imposta la dimensione del file immagine finale:''</font>
  flt = New MediaFilter(pl, "video/x-raw,width=640,height=480")
+
  flt = New MediaFilter(pl, "video/x-raw,width=640,height=480")
  con = New MediaControl(pl, "videoconvert")
+
  con = New MediaControl(pl, "videoconvert")
  snk = New MediaControl(pl, "ximagesink")
+
  snk = New MediaControl(pl, "ximagesink")
 
    
 
    
 
  <FONT Color=gray>' ''Imposta la "DrawingArea" come oggetto GUI da usare per l'uscita immagine:''</font>
 
  <FONT Color=gray>' ''Imposta la "DrawingArea" come oggetto GUI da usare per l'uscita immagine:''</font>
  snk.SetWindow(da)
+
  snk.SetWindow(da)
 
    
 
    
 
  <FONT Color=gray>' ''Vengono collegati i vari plug-in di GStreamer utilizzati:''</font>
 
  <FONT Color=gray>' ''Vengono collegati i vari plug-in di GStreamer utilizzati:''</font>
  src.LinkTo(sca)
+
  src.LinkTo(sca)
  sca.LinkTo(flt)
+
  sca.LinkTo(flt)
  flt.LinkTo(con)
+
  flt.LinkTo(con)
  con.LinkTo(snk)
+
  con.LinkTo(snk)
 
    
 
    
  '''End'''
+
  End
 
   
 
   
   
+
  Public Sub Button1_Click()
'''Public''' Sub Button1_Click()
 
 
    
 
    
 
  <FONT Color=gray>' ''Attende 3 secondi prima di effettuare lo "screenshot":''</font>
 
  <FONT Color=gray>' ''Attende 3 secondi prima di effettuare lo "screenshot":''</font>
Riga 251: Riga 269:
 
   pl.Stop()
 
   pl.Stop()
 
    
 
    
  '''End'''
+
  End
  
  
In quest'altro caso individueremo la finestra specifica, della quale ottenere lo ''screenshot'', dal suo numero identificativo che dovrà essere assegnato alla proprietà "''xid''" del plug-in "''ximagesrc''" impostato come oggetto "''MediaControl''":
+
In quest'altro caso individueremo la finestra specifica, della quale ottenere lo ''screenshot'', dal suo numero identificativo che dovrà essere assegnato alla proprietà "xid" del plug-in ''ximagesrc'' impostato come Oggetto ''MediaControl'':
 
  Private pl As MediaPipeline
 
  Private pl As MediaPipeline
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
 
   Dim src, sca, con, png, snk As MediaControl
 
   Dim src, sca, con, png, snk As MediaControl
 
   Dim flt As MediaFilter
 
   Dim flt As MediaFilter
 
    
 
    
  pl = New MediaPipeline
+
  pl = New MediaPipeline
 
    
 
    
  src = New MediaControl(pl, "ximagesrc")
+
  src = New MediaControl(pl, "ximagesrc")
 
  <FONT Color=gray>' ''Imposta l'angolo x in alto a sinistra della schermata rispetto alla superficie del desktop:''</font>
 
  <FONT Color=gray>' ''Imposta l'angolo x in alto a sinistra della schermata rispetto alla superficie del desktop:''</font>
  src["startx"] = 0
+
  src["startx"] = 0
  src["use-damage"] = 0
+
  src["use-damage"] = 0
  src["<FONT Color=#B22222>xid</font>"] = <FONT Color=gray>''Numero_identificativo_della_finestra''</font>
+
  src["<FONT Color=#B22222>xid</font>"] = <FONT Color=gray>''Numero_identificativo_della_finestra''</font>
  sca = New MediaControl(pl, "videoscale")
+
  sca = New MediaControl(pl, "videoscale")
  sca["method"] = 0
+
  sca["method"] = 0
 
  <FONT Color=gray>' ''Imposta la dimensione del file immagine finale:''</font>
 
  <FONT Color=gray>' ''Imposta la dimensione del file immagine finale:''</font>
  flt = New MediaFilter(pl, "video/x-raw,width=640,height=480")
+
  flt = New MediaFilter(pl, "video/x-raw,width=640,height=480")
  con = New MediaControl(pl, "videoconvert")
+
  con = New MediaControl(pl, "videoconvert")
  png = New MediaControl(pl, "pngenc")
+
  png = New MediaControl(pl, "pngenc")
  snk = New MediaControl(pl, "filesink")
+
  snk = New MediaControl(pl, "filesink")
  snk["location"] = "/tmp/screenshot.png"
+
  snk["location"] = "/tmp/screenshot.png"
 
    
 
    
 
  <FONT Color=gray>' ''Vengono collegati i vari plug-in di GStreamer utilizzati:''</font>
 
  <FONT Color=gray>' ''Vengono collegati i vari plug-in di GStreamer utilizzati:''</font>
  src.LinkTo(sca)
+
  src.LinkTo(sca)
  sca.LinkTo(flt)
+
  sca.LinkTo(flt)
  flt.LinkTo(con)
+
  flt.LinkTo(con)
  con.LinkTo(png)
+
  con.LinkTo(png)
  png.LinkTo(snk)
+
  png.LinkTo(snk)
 
+
 
  '''End'''
+
  End
 
   
 
   
   
+
  Public Sub Button1_Click()
'''Public''' Sub Button1_Click()
 
 
    
 
    
 
  <FONT Color=gray>' ''Effettua lo "screenshot":''</font>
 
  <FONT Color=gray>' ''Effettua lo "screenshot":''</font>
Riga 296: Riga 313:
 
   pl.Stop()
 
   pl.Stop()
 
    
 
    
  '''End'''
+
  End
  
  
In quest caso, simile al precedente, la finestra sarà individuata con "''Desktop.FindWindow( )''":
+
In quest caso, simile al precedente, la finestra sarà individuata con il Metodo "Desktop.FindWindow()":
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
    
 
    
 
   Dim pl As MediaPipeline
 
   Dim pl As MediaPipeline
 
   Dim wid As Integer
 
   Dim wid As Integer
   Dim src, sca, con, png, snk As MediaControl
+
   Dim src, con, png, snk As MediaControl
 
    
 
    
  <FONT Color=gray>' ''Passa il nome visibile della finestra prescelta e ne individua il numero identificativo:''</font>
+
  <FONT Color=gray>' ''Viene individuato il numero identificativo della finestra:''</font>
   wid = Desktop.FindWindow(<FONT Color=gray>''titolo_della_finestra_del_programma''</font>, Null, Null)[0]
+
   wid = Desktop.FindWindow(<FONT Color=gray>''titolo_della_finestra''</font>, Null, Null)[0]
 
    
 
    
 
   pl = New MediaPipeline
 
   pl = New MediaPipeline
 
    
 
    
 
   src = New MediaControl(pl, "ximagesrc")
 
   src = New MediaControl(pl, "ximagesrc")
  <FONT Color=gray>' ''Imposta l'angolo x in alto a sinistra della schermata rispetto alla superficie della finestra del programma:''</font>
+
  <FONT Color=gray>' ''Imposta l'angolo x in alto a sinistra della schermata rispetto alla superficie della finestra:''</font>
 
   src["startx"] = 0
 
   src["startx"] = 0
 
   src["use-damage"] = 0
 
   src["use-damage"] = 0
 
   src["xid"] = wid
 
   src["xid"] = wid
  sca = New MediaControl(pl, "videoscale")
 
  sca["method"] = 0
 
 
   con = New MediaControl(pl, "videoconvert")
 
   con = New MediaControl(pl, "videoconvert")
 
   png = New MediaControl(pl, "pngenc")
 
   png = New MediaControl(pl, "pngenc")
Riga 325: Riga 340:
 
    
 
    
 
  <FONT Color=gray>' ''Vengono collegati i vari plug-in di GStreamer utilizzati:''</font>
 
  <FONT Color=gray>' ''Vengono collegati i vari plug-in di GStreamer utilizzati:''</font>
   src.LinkTo(sca)
+
   src.LinkTo(con)
  sca.LinkTo(con)
 
 
   con.LinkTo(png)
 
   con.LinkTo(png)
 
   png.LinkTo(snk)
 
   png.LinkTo(snk)
Riga 336: Riga 350:
 
   pl.Close
 
   pl.Close
 
    
 
    
  '''End'''
+
  End

Versione attuale delle 10:29, 11 giu 2023

Per effettuare una schermata, ossia uno screenshot, di un'area mediante le sole risorse native di Gambas, si potranno utilizzare alcune modalità di seguito riportate.


Uso del Metodo ".Screenshot()" della classe Desktop

Il Metodo ".Screenshot()" della Classe Desktop, utilizzabile attivando il Componente gb.desktop, consente di ottenere una schermata della superficie del desktop delimitata dai valori indicati nei parametri del Metodo medesimo.

Vadiamo un paio di esempi pratici:

Public Sub Button1_Click()

 Dim pc As Picture
 
' Individuiamo il riquadro interessato dallo screenshot secondo i soliti parametri: X, Y, Width, Height.
' Assegnamo, quindi, la schermata in una variabile di tipo "Picture"...:
  pc = Desktop.Screenshot(100, 100, 100, 100)
  
' ...che caricheremo in una "PictureBox" per mostrarla:
  PictureBox1.Picture = pc
  
End

Mostriamo ora un esempio più complesso: determineremo con lo spostamento del mouse l'area della schermata da mostrare nella PictureBox.

Private pn As Panel
Private xIniz As Integer
Private yIniz As Integer
Private pc As Picture


Public Sub Form_MouseDown()

' Se non c'è una schermata nella "PictureBox", viene distrutta:
 If Not IsNull(pc) Then
   PictureBox1.Picture.Clear
 Endif
 
' Per definire, anche visivamente, l'area utilizzeremo un "Panel":
 pn = New Panel(Me)
  
' Raccogliamo le coordinate iniziali del mouse nel momento del clic:
 xIniz = Mouse.X
 yIniz = Mouse.Y
 
End

Public Sub Form_MouseMove()

 With pn
   .Border = Border.Plain
   .Width = Mouse.X - xIniz
   .Height = Mouse.Y - yIniz
   .X = xIniz  ' le coordinate di partenza sono quelle impostate...
   .Y = yIniz  ' ...con il MouseDown.
 End With
 
End

Public Sub Form_MouseUp()
 
' Effettuiamo la schermata (ossia lo "screenshot") dell'area individuata dal "Panel" dimensionato con lo spostamento del mouse.
' L'area interessata, dunque, avrà le medesime coordinate e dimensioni di quel "Panel":
 With pn
   pc = Desktop.Screenshot(.X, .Y, .W, .H)
 End With
 
' Mostriamo la picture della schermata nella "PictureBox" posta sul form:
 PictureBox1.Picture = pc
 
' Quindi salviamo da qualche parte la schermata:
 pc.Save("/tmp/schermata.png")
 
 pn.Delete
   
End


Ottenere la schermata di una particolare finestra mediante il Metodo ".GetScreenshot()" della Classe DesktopWindow

Quast'altra modalità prevede l'uso del Metodo ".GetScreenshot()" della Classe DesktopWindow, attivando il Componente gb.desktop .

In tal caso, però, bisognerà individuare preliminarmente il numero identificativo della finestra, della quale ottenere la schermata, e così passarlo all'Oggetto DesktopWindow da creare.

Mostriamo un semplice esempio, nel quale otterremo una schermata della finestra del desktop:

Public Sub Button1_Click()
 
 Dim dw As DesktopWindow
 Dim wid As Integer
 Dim pc As Picture
 
' Individua il numero identificativo della finestra del desktop...
  wid = Desktop.FindWindow("Scrivania", Null, Null)[0] 
  
' ...e lo passa all'oggetto "DesktopWindow" da creare:
  With dw = New DesktopWindow(wid)
    pc = .GetScreenshot()
  End With
  
  pc.Save("/tmp/screenshot.png", 100)
  
End


Uso delle risorse del Componente gb.media

Anche il Componente gb.media può consentire di effettuare una schermata del desktop, in particolare utilizzando le risorse delle Classi MediaPipeline, MediaControl e MediaFilter.

Mostriamo un semplice esempio:

Private pl As MediaPipeline


Public Sub Form_Open()

 Dim src, con, png, snk As MediaControl
 Dim flt As MediaFilter
 
 pl = New MediaPipeline
  
 src = New MediaControl(pl, "ximagesrc")
' Imposta l'angolo x in alto a sinistra della schermata rispetto alla superficie del desktop:
 src["startx"] = 0
 src["use-damage"] = 0
 con = New MediaControl(pl, "videoconvert")
 png = New MediaControl(pl, "pngenc")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = "/tmp/screenshot.png"
  
' Vengono collegati i vari plug-in di GStreamer utilizzati:
 src.LinkTo(con)
 con.LinkTo(png)
 png.LinkTo(snk)
 
End

Public Sub Button1_Click()
 
' Attende 3 secondi prima di effettuare lo "screenshot":
 Wait 3
 
' Effettua lo "screenshot":
 pl.Play()
' Chiude il flusso:
 pl.Stop()
 
End

o anche eliminando il plug-in "Filter" e utilizzando in sua vece le proprietà "endx" e "endy" del plug-in ximagesrc:

Private pl As MediaPipeline


Public Sub Form_Open()
 
 Dim src, sca, con, png, snk As MediaControl
 
 pl = New MediaPipeline
 
 src = New MediaControl(pl, "ximagesrc")
' Imposta, come finestra da riprendere, la superficie del desktop, ossia la scrivania:
 src["xid"] = CLong(0)
' Imposta la dimensione della schermata:
 src["startx"] = 0
 src["starty"] = 0
 src["endx"] = Screen.W
 src["endy"] = Screen.H
 src["use-damage"] = False
 sca = New MediaControl(pl, "videoscale")
 sca["method"] = 0
 con = New MediaControl(pl, "videoconvert")
 png = New MediaControl(pl, "pngenc")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = "/tmp/screenshot.png"
 
' Vengono collegati i vari plug-in di GStreamer utilizzati:
 src.LinkTo(sca)
 sca.LinkTo(con)
 con.LinkTo(png)
 png.LinkTo(snk)
 
End

Public Sub Button1_Click()
 
 Wait 2
 
' Effettua lo "screenshot":
 pl.Play()
' Chiude il flusso:
 pl.Stop()
 
End

oppure più semplicemente così:

Private pl As MediaPipeline


Public Sub Form_Open()

 Dim src, con, png, snk As MediaControl

 pl = New MediaPipeline
 
 src = New MediaControl(pl, "ximagesrc")
 src["xid"] = numero_identificativo_della_finestra (ad esempio della Scrivania)
 con = New MediaControl(pl, "videoconvert")
 png = New MediaControl(pl, "pngenc")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = "/tmp/screenshot.png"

 src.LinkTo(con)
 con.LinkTo(png)
 png.LinkTo(snk)
 
End

Public Sub Button1_Click()

' Effettua lo "screenshot":
 pl.Play()
' Chiude il flusso:
 pl.Stop()

End


In quest'altro esempio l'immagine della schermata verrà mostrata sulla superficie di una DrawingArea posta sul Form del programma Gambas:

Private pl As MediaPipeline


Public Sub Form_Open()

 Dim da As DrawingArea
 Dim src, sca, con, snk As MediaControl
 Dim flt As MediaFilter
  
' Crea una "DrawingArea" come oggetto GUI da usare per l'uscita immagine:
 With da = New DrawingArea(Me)
   .X = 10
   .Y = 10
   .W = 640
   .H = 480
' E' assolutamente necessario dare un qualsiasi valore alla proprietà ".Background" della "DrawingArea", altrimenti l'immagine non verrà mostrata:
   .Background = Color.Transparent
 End With
  
 pl = New MediaPipeline
  
 src = New MediaControl(pl, "ximagesrc")
' Imposta l'angolo x in alto a sinistra della schermata rispetto alla superficie del desktop:
 src["startx"] = 0
 src["use-damage"] = 0
 sca = New MediaControl(pl, "videoscale")
 sca["method"] = 0
' Imposta la dimensione del file immagine finale:
 flt = New MediaFilter(pl, "video/x-raw,width=640,height=480")
 con = New MediaControl(pl, "videoconvert")
 snk = New MediaControl(pl, "ximagesink")
  
' Imposta la "DrawingArea" come oggetto GUI da usare per l'uscita immagine:
 snk.SetWindow(da)
  
' Vengono collegati i vari plug-in di GStreamer utilizzati:
 src.LinkTo(sca)
 sca.LinkTo(flt)
 flt.LinkTo(con)
 con.LinkTo(snk)
  
End

Public Sub Button1_Click()
 
' Attende 3 secondi prima di effettuare lo "screenshot":
 Wait 3
 
' Effettua lo "screenshot":
 pl.Play()
' Chiude il flusso:
 pl.Stop()
 
End


In quest'altro caso individueremo la finestra specifica, della quale ottenere lo screenshot, dal suo numero identificativo che dovrà essere assegnato alla proprietà "xid" del plug-in ximagesrc impostato come Oggetto MediaControl:

Private pl As MediaPipeline


Public Sub Form_Open()

 Dim src, sca, con, png, snk As MediaControl
 Dim flt As MediaFilter
 
 pl = New MediaPipeline
  
 src = New MediaControl(pl, "ximagesrc")
' Imposta l'angolo x in alto a sinistra della schermata rispetto alla superficie del desktop:
 src["startx"] = 0
 src["use-damage"] = 0
 src["xid"] = Numero_identificativo_della_finestra
 sca = New MediaControl(pl, "videoscale")
 sca["method"] = 0
' Imposta la dimensione del file immagine finale:
 flt = New MediaFilter(pl, "video/x-raw,width=640,height=480")
 con = New MediaControl(pl, "videoconvert")
 png = New MediaControl(pl, "pngenc")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = "/tmp/screenshot.png"
  
' Vengono collegati i vari plug-in di GStreamer utilizzati:
 src.LinkTo(sca)
 sca.LinkTo(flt)
 flt.LinkTo(con)
 con.LinkTo(png)
 png.LinkTo(snk)
 
End

Public Sub Button1_Click()
 
' Effettua lo "screenshot":
 pl.Play()
' Chiude il flusso:
 pl.Stop()
 
End


In quest caso, simile al precedente, la finestra sarà individuata con il Metodo "Desktop.FindWindow()":

Public Sub Form_Open()
 
 Dim pl As MediaPipeline
 Dim wid As Integer
 Dim src, con, png, snk As MediaControl
  
' Viene individuato il numero identificativo della finestra:
 wid = Desktop.FindWindow(titolo_della_finestra, Null, Null)[0]
 
 pl = New MediaPipeline
 
 src = New MediaControl(pl, "ximagesrc")
' Imposta l'angolo x in alto a sinistra della schermata rispetto alla superficie della finestra:
 src["startx"] = 0
 src["use-damage"] = 0
 src["xid"] = wid
 con = New MediaControl(pl, "videoconvert")
 png = New MediaControl(pl, "pngenc")
 snk = New MediaControl(pl, "multifilesink")
' Imposta il percorso, il nome e il formato del file immagine che sarà creato:
 snk["location"] = "/tmp/foto.png" 
 
' Vengono collegati i vari plug-in di GStreamer utilizzati:
 src.LinkTo(con)
 con.LinkTo(png)
 png.LinkTo(snk)
 
 
' Effettua la schermata:
 pl.Play()
 pl.Stop
 pl.Close
 
End