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

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
Per effettuare una schermata, ossia uno ''screenshot'', di un'area mediante il solo codice Gambas, si dovrà utilizzare l'omonimo metodo ''.Screenshot'' della classe ''Desktop''.
+
Per effettuare una schermata, ossia uno ''screenshot'', di un'area mediante il solo codice Gambas, si potranno utilizzare alcune modalità di seguito riportate.
  
Si dovrà impostare nel progetto anche il componente <FONT color=#B22222>gb.desktop</font>.
+
 
 +
==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()
 
  '''Public''' Sub Button1_Click()
 
   
 
   
 
   Dim pc As Picture
 
   Dim pc As Picture
 
   
 
   
  <FONT color=#006400>' ''Individuiamo il riquadro interessato dallo screenshot secondo i soliti parametri: X, Y, Width, Height.''
+
  <FONT color=gray>' ''Individuiamo il riquadro interessato dallo screenshot secondo i soliti parametri: X, Y, Width, Height.''
 
  ' ''Assegnamo, quindi, la schermata in una variabile di tipo "Picture"...:''</font>
 
  ' ''Assegnamo, quindi, la schermata in una variabile di tipo "Picture"...:''</font>
 
     pc = Desktop.Screenshot(100, 100, 100, 100)
 
     pc = Desktop.Screenshot(100, 100, 100, 100)
 
    
 
    
  <FONT color=#006400>' ''...che caricheremo in una "PictureBox" per mostrarla:''</font>
+
  <FONT color=gray>' ''...che caricheremo in una "PictureBox" per mostrarla:''</font>
 
     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''.
Riga 26: Riga 28:
 
  '''Public''' Sub Form_MouseDown()
 
  '''Public''' Sub Form_MouseDown()
 
   
 
   
  <FONT color=#006400>' ''Se non c'è una schermata nella "PictureBox", viene distrutta:''</font>
+
  <FONT color=gray>' ''Se non c'è una schermata nella "PictureBox", viene distrutta:''</font>
 
   If Not IsNull(pc) Then
 
   If Not IsNull(pc) Then
 
     PictureBox1.Picture.Clear
 
     PictureBox1.Picture.Clear
 
   Endif
 
   Endif
 
    
 
    
  <FONT color=#006400>' ''Per definire, anche visivamente, l'area utilizzeremo un "Panel":''</font>
+
  <FONT color=gray>' ''Per definire, anche visivamente, l'area utilizzeremo un "Panel":''</font>
 
   pn = New Panel(Me)
 
   pn = New Panel(Me)
 
    
 
    
  <FONT color=#006400>' ''Raccogliamo le coordinate iniziali del mouse nel momento del clic:''</font>
+
  <FONT color=gray>' ''Raccogliamo le coordinate iniziali del mouse nel momento del clic:''</font>
 
   xIniz = Mouse.X
 
   xIniz = Mouse.X
 
   yIniz = Mouse.Y
 
   yIniz = Mouse.Y
Riga 47: Riga 49:
 
     .Width = Mouse.X - xIniz
 
     .Width = Mouse.X - xIniz
 
     .Height = Mouse.Y - yIniz
 
     .Height = Mouse.Y - yIniz
     .X = xIniz  <FONT color=#006400>' ''le coordinate di partenza sono quelle impostate...''</font>
+
     .X = xIniz  <FONT color=gray>' ''le coordinate di partenza sono quelle impostate...''</font>
     .Y = yIniz  <FONT color=#006400>' ''...con il MouseDown.''</font>
+
     .Y = yIniz  <FONT color=gray>' ''...con il MouseDown.''</font>
 
   End With
 
   End With
 
   
 
   
Riga 56: Riga 58:
 
  '''Public''' Sub Form_MouseUp()
 
  '''Public''' Sub Form_MouseUp()
 
    
 
    
  <FONT color=#006400>' ''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.''
 
  ' ''L'area interessata, dunque, avrà le medesime coordinate e dimensioni di quel "Panel":''</font>
 
  ' ''L'area interessata, dunque, avrà le medesime coordinate e dimensioni di quel "Panel":''</font>
 
   With pn
 
   With pn
Riga 62: Riga 64:
 
   End With
 
   End With
 
   
 
   
  <FONT color=#006400>' ''Mostriamo la picture della schermata nella "PictureBox" posta sul form:''</font>
+
  <FONT color=gray>' ''Mostriamo la picture della schermata nella "PictureBox" posta sul form:''</font>
 
   PictureBox1.Picture = pc
 
   PictureBox1.Picture = pc
 
   
 
   
  <FONT color=#006400>' ''Quindi salviamo da qualche parte la schermata:''</font>
+
  <FONT color=gray>' ''Quindi salviamo da qualche parte la schermata:''</font>
 
   pc.Save("/tmp/schermata.png")
 
   pc.Save("/tmp/schermata.png")
 
    
 
    
 
   pn.Delete
 
   pn.Delete
 
    
 
    
 +
 
 +
'''End'''
 +
 +
 +
==Uso del 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 del desktop e così passarlo all'oggetto ''DesktopWindow'' da creare.
 +
 +
Mostriamo un semplice esempio:
 +
'''Public''' Sub Button1_Click()
 +
 
 +
  Dim dw As DesktopWindow
 +
  Dim wid As Integer
 +
  Dim pc As Picture
 +
 
 +
<FONT Color=gray>' ''Individua il numero identificativo della finestra del desktop...''</font>
 +
  wid = Desktop.FindWindow("Scrivania", Null, Null)[0]
 +
 
 +
<FONT Color=gray>' ''...e lo passa all'oggetto "DesktopWindow" da creare:''</font>
 +
  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, sca, con, png, snk As MediaControl
 +
  Dim flt As MediaFilter
 +
 
 +
  pl = New MediaPipeline
 +
 
 +
  src = New MediaControl(pl, "ximagesrc")
 +
<FONT Color=gray>' ''Imposta l'angolo x in alto a sinistra della schermata rispetto alla superficie del desktop:''</font>
 +
  src["startx"] = 0
 +
  src["use-damage"] = 0
 +
  sca = New MediaControl(pl, "videoscale")
 +
  sca["method"] = 0
 +
<FONT Color=gray>' ''Imposta la dimensione del file immagine finale:''</font>
 +
  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"
 +
 
 +
<FONT Color=gray>' ''Vengono collegati i vari plug-in di GStreamer utilizzati:''</font>
 +
  src.LinkTo(sca)
 +
  sca.LinkTo(flt)
 +
  flt.LinkTo(con)
 +
  con.LinkTo(png)
 +
  png.LinkTo(snk)
 +
 
 +
'''End'''
 +
 +
 +
'''Public''' Sub Button1_Click()
 +
 
 +
<FONT Color=gray>' ''Attende 3 secondi prima di effettuare lo "screenshot":''</font>
 +
  Wait 3
 +
 
 +
<FONT Color=gray>' ''Effettua lo "screenshot":''</font>
 +
  pl.Play()
 +
<FONT Color=gray>' ''Chiude il flusso:''</font>
 +
  pl.Stop()
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione delle 16:11, 20 lug 2017

Per effettuare una schermata, ossia uno screenshot, di un'area mediante il solo codice 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


Uso del 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 del desktop e così passarlo all'oggetto DesktopWindow da creare.

Mostriamo un semplice esempio:

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, 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
  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()
 
' Attende 3 secondi prima di effettuare lo "screenshot":
 Wait 3
 
' Effettua lo "screenshot":
 pl.Play()
' Chiude il flusso:
 pl.Stop()
 
End