Catturare singole immagini da quanto mostrato dal Controllo MediaView del Componente gb.media.form
Con le risorse del Componente gb.media.form è possibile catturare singole immagini da quanto mostrato dal Controllo MediaView.
Indice
Catturare singole immagini dall'esecuzione di un file video
Per catturare singole immagini dall'esecuzione di un file video in un Controllo MediaView si possono usare alcune modalità. [nota 1]
Uso delle Classi MediaPipeline e MediaControl del Componente gb.media
Cattura di una sola immagine di quanto ripreso da una webcam
Mostriamo un esempio pratico, nel quale si catturerà una sola immagine di quanto mostrato dal Controllo MediaView.
Si creerà una immagine di formato PNG:
Public Sub Form_Open() Me.Show ' Crea una cartella, ove salvare i singoli file immagine che saranno creati dal programma: Mkdir "/tmp/immagini_WebCam" MediaView1.URL = "/percorso/del/file/video" ' Resta in attesa finché la registrazione non viene avviata dall'utente, premendo il tastino di avvio sul Controllo "MediaView": Repeat Wait 0.01 Until MediaView1.State = Media.Playing End Public Sub Button1_Click() ' A ogni clic viene catturata una singola immagine di quanto mostrato nel Controllo "MediaView": Dim pl As MediaPipeline Dim xis, con, enc, snk As MediaControl Dim ob1, ob2, ob3 As Object Dim DrawingArea1 As DrawingArea ob1 = MediaView1.Children[0] ob2 = ob1.Children[0] ob3 = ob2.Children[0] DrawingArea1 = ob3.Children[0] pl = New MediaPipeline xis = New MediaControl(pl, "ximagesrc") xis["xid"] = DrawingArea1.Id con = New MediaControl(pl, "videoconvert") enc = New MediaControl(pl, "pngenc") snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp/immagini_WebCam" &/ Format(Now, "dd_mm_yyyy-hh_nn_ss") & ".png" ' Collega fra loro i plugin di "GStreamer": xis.LinkTo(con) con.LinkTo(enc) enc.LinkTo(snk) ' Effettua la cattura di quanto mostrato dalla "DrawingArea" costitutiva del Controllo "MediaView": pl.Play() pl.Stop pl.Close End
Cattura in sequenza automatica di più singole immagini di quanto ripreso da una webcam mediante il Controllo MediaView
Public Sub Form_Open() Me.Show ' Crea una cartella, ove salvare i singoli file immagine che saranno creati dal programma: Mkdir "/tmp/immagini_WebCam" MediaView1.URL = "/percorso/del/file/video" ' Resta in attesa finché la registrazione non viene avviata dall'utente, premendo il tastino di avvio sul Controllo "MediaView": Repeat Wait 0.01 Until MediaView1.State = Media.Playing Dim pl As MediaPipeline Dim xis, con, enc, snk As MediaControl Dim ob1, ob2, ob3 As Object Dim DrawingArea1 As DrawingArea pl = New MediaPipeline Repeat ob1 = MediaView1.Children[0] ob2 = ob1.Children[0] ob3 = ob2.Children[0] DrawingArea1 = ob3.Children[0] xis = New MediaControl(pl, "ximagesrc") xis["xid"] = DrawingArea1.Id con = New MediaControl(pl, "videoconvert") enc = New MediaControl(pl, "pngenc") snk = New MediaControl(pl, "filesink") snk["location"] = "/tmp" &/ Format(Now, "dd_mm_yyyy-hh_nn_ss") & ".png" xis.LinkTo(con) con.LinkTo(enc) enc.LinkTo(snk) ' Effettua la cattura di quanto mostrato dalla "DrawingArea" costitutiva del Controllo "MediaView": pl.Play ' L'inserimento del Metodo ".Stop()" è necessario, per consentire la registrazione dei dati immagine nel file immagine finale: pl.Stop ' La cattura delle singole immagini avviene in sequenza con la frequenza di 1 secondo: Wait 1 Until MediaView1.State = Media.Ready ' Il ciclo dura, finché la registrazione non viene interrotta dall'utente pl.Close End
Catturare singole immagini da una ripresa video di una webcam
Per catturare singole immagini da una ripresa video di una webcam mediante il Controllo MediaView del Componente gb.media.form, si avrà cura, riprendendo gli esempi pratici sopra descritti, di assegnare alla Proprietà ".URL" dell'Oggetto MediaView il percorso del dispositivo video del sistema:
MediaView1.URL = "v4l2:///dev/video0" '[nota 2]
Note
[1] Vedere anche queste pagine:
[2] Al riguardo vedere anche la seguente pagina della wiki: Mostrare la ripresa video di una webcam mediante l'oggetto MediaView del componente gb.media.form