|
|
(2 versioni intermedie di uno stesso utente non sono mostrate) |
Riga 1: |
Riga 1: |
− | A volte può essere necessario estrarre e salvare in appositi file singole immagini di una ripresa video effettuata mediante una WebCam con il Componente ''gb.media'' . Per fare ciò, si raccoglierà mediante il metodo "''.GetScreenshot( )''" della Classe ''DesktopWindow'' quanto appare sulla superficie video utilizzata. Per individuare utilmente tale superficie video, è necessario individuare il suo ''handle''.
| + | #REDIRECT [[Estrarre e salvare singole immagini da una ripresa video mediante WebCam effettuata con il Componente gb.media]] |
− | <BR>E' necessario attivare nell'applicazione Gambas i Componenti "''gb.desktop''" e "''gb.desktop.x11''".
| |
− | | |
− | Mostriamo di seguito un esempio pratico, nel quale si salverà in un vettore di tipo ''Picture[ ]'' ogni 300 millesimi di secondo un'immagine del video, mostrato all'interno di una ''DrawingArea''. Al termine della ripresa video si provvederà a salvare ciascuna immagine, salvata nel predetto vettore, in un file immagine di tipo ''png''.
| |
− | Private dr As DrawingArea
| |
− | Private pl As MediaPipeline
| |
− | Private pc As New Picture[]
| |
− |
| |
− |
| |
− | '''Public''' Sub Form_Open()
| |
− |
| |
− | Dim src, tim, snk As MediaControl
| |
− | Dim ftr As MediaFilter
| |
− |
| |
− | With dr = New DrawingArea(Me)
| |
− | .X = 10
| |
− | .Y = 10
| |
− | .W = 640
| |
− | .H = 480
| |
− | <FONT Color=gray>' ''Affinche la "DrawingArea" mostri il video, è assolutamente necessario attribuire un colore qualsiasi alla sua proprietà ".Background":''</font>
| |
− | .Background = Color.Black
| |
− | End With
| |
− |
| |
− | pl = New MediaPipeline
| |
− |
| |
− | src = New MediaControl(pl, "v4l2src")
| |
− | ftr = New MediaFilter(pl, "video/x-raw,width=640,height=480,framerate=30/1")
| |
− | <FONT Color=gray>' ''Mostra nel video anche il tempo trascorso dall'avvio della ripresa:''</font>
| |
− | tim = New MediaControl(pl, "timeoverlay")
| |
− | snk = New MediaControl(pl, "xvimagesink")
| |
− |
| |
− | <FONT Color=gray>' ''Colleghiamo i quattro plug-in di "GStreamer":''</font>
| |
− | src.LinkTo(tim)
| |
− | tim.LinkTo(ftr)
| |
− | ftr.LinkTo(snk)
| |
− | snk.SetWindow(dr)
| |
− |
| |
− | '''End'''
| |
− |
| |
− |
| |
− | '''Public''' Sub Button1_Click()
| |
− |
| |
− | Dim dw As DesktopWindow
| |
− |
| |
− | <FONT Color=gray>' ''Avvia la ripresa video della WebCam:''</font>
| |
− | pl.State = Media.Playing
| |
− | pl.Play()
| |
− |
| |
− | <FONT Color=gray>' ''Resta in attesa che la WebCam avvi effettivamente la ripresa video:''</font>
| |
− | Wait 2
| |
− |
| |
− | While pl.State = Media.Playing
| |
− | With dw = New DesktopWindow(dr.Handle)
| |
− | <FONT Color=gray>' ''Cattura una schermata del contenuto video mostrato in quel momento dalla "DrawingArea":''</font>
| |
− | pc.Push(.GetScreenshot(True))
| |
− | End With
| |
− | <FONT Color=gray>' ''La cattura della schermata avviene ogni 300 millisecondi:''</font>
| |
− | Wait 0.3
| |
− | Wend
| |
− |
| |
− | '''End'''
| |
− |
| |
− |
| |
− | '''Public''' Sub Button2_Click() <FONT Color=gray>' ''Questo evento arresta la ripresa video e salva ogni picture in un file .png''</font>
| |
− |
| |
− | Dim i As Integer
| |
− | Dim drc, s As String
| |
− |
| |
− | drc = "/tmp/imago"
| |
− |
| |
− | pl.Stop
| |
− |
| |
− | If Not Exist(drc) Then
| |
− | Mkdir drc
| |
− | Else
| |
− | For Each s In Dir(drc, "picture_*", gb.file)
| |
− | Kill drc &/ s
| |
− | Next
| |
− | Endif
| |
− |
| |
− | For i = 0 To pc.Max
| |
− | pc[i].Save(drc &/ "picture_" & CStr(i) & ".png", 100)
| |
− | Next
| |
− |
| |
− | '''End'''
| |
− | | |
− | | |
− | | |
− | | |
− | =Note=
| |
− | [1] Vedi anche questa pagina della WIKI: [[Generare_un_file_immagine_da_una_DrawingArea#1a_modalit.C3.A0|Generare un file immagine da una DrawingArea]]
| |