Catturare singole immagini da una ripresa video di una webcam mediante il Controllo MediaView del Componente gb.media.form

Da Gambas-it.org - Wikipedia.

Per catturare singole immagini da una ripresa video di una webcam mediante il Controllo MediaView del Componente gb.media.form, 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 ripreso da una webcam mediante il Controllo MediaView.
Si creerà una immagine di formato PNG:

Public Sub Form_Open()

 MediaView1.URL = "v4l2:///dev/video0"
 MediaView1.Play()

End


Public Sub Button1_Click()    ' Ad 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" &/ 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 di più singole immagini con la frequenza di 1 secondo di quanto ripreso da una webcam mediante il Controllo MediaView

Private bo As Boolean


Public Sub Form_Open()

 MediaView1.URL = "v4l2:///dev/video0"
 MediaView1.Play()

End


Public Sub Button1_Click()

 Dim pl As MediaPipeline
 Dim xis, con, enc, snk As MediaControl
 Dim ob1, ob2, ob3 As Object
 Dim DrawingArea1 As DrawingArea

 pl = New MediaPipeline

 While Not bo
   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
 Wend

 pl.Close

End


Public Sub Button2_Click()

 bo = True

End


Note

[1] Vedere anche queste pagine: