Differenze tra le versioni di "Ottenere una schermata ("screenshot") con Gambas"
(Nuova pagina: Per effettuare una schermata, ossia uno ''screenshot'', mediante il solo codice Gambas, si dovrà utilizzare l'omonimo metodo ''.Screenshot'' della classe ''Desktop''. Si dovrà impos...) |
|||
(23 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | Per effettuare una schermata, ossia uno ''screenshot'', mediante | + | 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 | Dim pc As Picture | ||
+ | |||
+ | <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> | ||
+ | pc = Desktop.Screenshot(100, 100, 100, 100) | ||
+ | |||
+ | <FONT color=gray>' ''...che caricheremo in una "PictureBox" per mostrarla:''</font> | ||
+ | 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() | ||
+ | |||
+ | <FONT color=gray>' ''Se non c'è una schermata nella "PictureBox", viene distrutta:''</font> | ||
+ | If Not IsNull(pc) Then | ||
+ | PictureBox1.Picture.Clear | ||
+ | Endif | ||
+ | |||
+ | <FONT color=gray>' ''Per definire, anche visivamente, l'area utilizzeremo un "Panel":''</font> | ||
+ | pn = New Panel(Me) | ||
+ | |||
+ | <FONT color=gray>' ''Raccogliamo le coordinate iniziali del mouse nel momento del clic:''</font> | ||
+ | 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 <FONT color=gray>' ''le coordinate di partenza sono quelle impostate...''</font> | ||
+ | .Y = yIniz <FONT color=gray>' ''...con il MouseDown.''</font> | ||
+ | End With | ||
+ | |||
+ | End | ||
− | <FONT color= | + | Public Sub Form_MouseUp() |
− | ' '' | + | |
− | + | <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> | ||
+ | With pn | ||
+ | pc = Desktop.Screenshot(.X, .Y, .W, .H) | ||
+ | End With | ||
+ | |||
+ | <FONT color=gray>' ''Mostriamo la picture della schermata nella "PictureBox" posta sul form:''</font> | ||
+ | PictureBox1.Picture = pc | ||
+ | |||
+ | <FONT color=gray>' ''Quindi salviamo da qualche parte la schermata:''</font> | ||
+ | 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 | ||
+ | |||
+ | <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'' e ''MediaControl''. | ||
+ | |||
+ | Mostriamo un semplice esempio: | ||
+ | Private pl As MediaPipeline | ||
+ | |||
+ | |||
+ | Public Sub Form_Open() | ||
+ | |||
+ | Dim src, con, png, snk As MediaControl | ||
+ | |||
+ | 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 | ||
+ | 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(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 | ||
+ | o anche utilizzando 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") | ||
+ | <FONT Color=gray>' ''Imposta, come finestra da riprendere, la superficie del desktop, ossia la scrivania:''</font> | ||
+ | src["xid"] = CLong(0) | ||
+ | <FONT Color=gray>' ''Imposta la dimensione della schermata:''</font> | ||
+ | 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" | ||
+ | |||
+ | <FONT Color=gray>' ''Vengono collegati i vari plug-in di GStreamer utilizzati:''</font> | ||
+ | src.LinkTo(sca) | ||
+ | sca.LinkTo(con) | ||
+ | con.LinkTo(png) | ||
+ | png.LinkTo(snk) | ||
+ | |||
+ | End | ||
+ | |||
+ | Public Sub Button1_Click() | ||
+ | |||
+ | Wait 2 | ||
+ | |||
+ | <FONT Color=gray>' ''Effettua lo "screenshot":''</font> | ||
+ | pl.Play() | ||
+ | <FONT Color=gray>' ''Chiude il flusso:''</font> | ||
+ | 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"] = <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 | ||
+ | |||
+ | |||
+ | 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 | ||
+ | |||
+ | <FONT Color=gray>' ''Crea una "DrawingArea" come oggetto GUI da usare per l'uscita immagine:''</font> | ||
+ | With da = New DrawingArea(Me) | ||
+ | .X = 10 | ||
+ | .Y = 10 | ||
+ | .W = 640 | ||
+ | .H = 480 | ||
+ | <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 | ||
+ | End With | ||
+ | |||
+ | 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") | ||
+ | snk = New MediaControl(pl, "ximagesink") | ||
+ | |||
+ | <FONT Color=gray>' ''Imposta la "DrawingArea" come oggetto GUI da usare per l'uscita immagine:''</font> | ||
+ | snk.SetWindow(da) | ||
+ | |||
+ | <FONT Color=gray>' ''Vengono collegati i vari plug-in di GStreamer utilizzati:''</font> | ||
+ | src.LinkTo(sca) | ||
+ | sca.LinkTo(flt) | ||
+ | flt.LinkTo(con) | ||
+ | con.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 | ||
+ | |||
+ | |||
+ | 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") | ||
+ | <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 | ||
+ | src["<FONT Color=#B22222>xid</font>"] = <FONT Color=gray>''Numero_identificativo_della_finestra''</font> | ||
+ | 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 | + | <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 | ||
− | '''End''' | + | Public Sub Button1_Click() |
+ | |||
+ | <FONT Color=gray>' ''Effettua lo "screenshot":''</font> | ||
+ | pl.Play() | ||
+ | <FONT Color=gray>' ''Chiude il flusso:''</font> | ||
+ | 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 | ||
+ | |||
+ | <FONT Color=gray>' ''Viene individuato il numero identificativo della finestra:''</font> | ||
+ | wid = Desktop.FindWindow(<FONT Color=gray>''titolo_della_finestra''</font>, Null, Null)[0] | ||
+ | |||
+ | pl = New MediaPipeline | ||
+ | |||
+ | src = New MediaControl(pl, "ximagesrc") | ||
+ | <FONT Color=gray>' ''Imposta l'angolo x in alto a sinistra della schermata rispetto alla superficie della finestra:''</font> | ||
+ | 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") | ||
+ | <FONT Color=gray>' ''Imposta il percorso, il nome e il formato del file immagine che sarà creato:''</font> | ||
+ | snk["location"] = "/tmp/foto.png" | ||
+ | |||
+ | <FONT Color=gray>' ''Vengono collegati i vari plug-in di GStreamer utilizzati:''</font> | ||
+ | src.LinkTo(con) | ||
+ | con.LinkTo(png) | ||
+ | png.LinkTo(snk) | ||
+ | |||
+ | |||
+ | <FONT Color=gray>' ''Effettua la schermata:''</font> | ||
+ | pl.Play() | ||
+ | pl.Stop | ||
+ | pl.Close | ||
+ | |||
+ | End |
Versione attuale delle 02:30, 28 set 2024
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 e MediaControl.
Mostriamo un semplice esempio:
Private pl As MediaPipeline Public Sub Form_Open() Dim src, con, png, snk As MediaControl 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 utilizzando 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