Differenze tra le versioni di "Catturare singole immagini da una ripresa video di una webcam mediante il Controllo MediaView del Componente gb.media.form"

Da Gambas-it.org - Wikipedia.
 
(7 versioni intermedie di uno stesso utente non sono mostrate)
Riga 2: Riga 2:
  
 
==Uso delle Classi ''MediaPipeline'' e ''MediaControl'' del Componente gb.media==
 
==Uso delle Classi ''MediaPipeline'' e ''MediaControl'' del Componente gb.media==
Mostriamo un esempio pratico:
+
===Cattura di <U>una sola</u> immagine di quanto ripreso da una webcam===
 +
Mostriamo un esempio pratico, nel quale si catturerà <U>una sola</u> immagine di quanto ripreso da una webcam mediante il Controllo ''MediaView''.
 +
<BR>Si creerà una immagine di formato PNG:
 
  Public Sub Form_Open()
 
  Public Sub Form_Open()
 
   
 
   
   MediaView1.URL = "v4l2:///dev/video0"
+
   MediaView1.URL = "v4l2:///dev/video<FONT Color=red>0</font>" <FONT Color=gray>'</font><SUP>&#091;[[#Note|nota 2]]&#093;</sup>
 
   MediaView1.Play()
 
   MediaView1.Play()
 
   
 
   
Riga 11: Riga 13:
 
   
 
   
 
   
 
   
  Public Sub Button1_Click()
+
  Public Sub Button1_Click()   <FONT Color=gray>' ''Ad ogni clic viene catturata una singola immagine di quanto mostrato nel Controllo "MediaView":''</font>
 
   
 
   
 
   Dim pl As MediaPipeline
 
   Dim pl As MediaPipeline
 
   Dim xis, con, enc, snk As MediaControl
 
   Dim xis, con, enc, snk As MediaControl
  Dim temporaneo As String
 
 
   Dim ob1, ob2, ob3 As Object
 
   Dim ob1, ob2, ob3 As Object
 
   Dim DrawingArea1 As DrawingArea
 
   Dim DrawingArea1 As DrawingArea
Riga 23: Riga 24:
 
   ob3 = ob2.Children[0]
 
   ob3 = ob2.Children[0]
 
   DrawingArea1 = ob3.Children[0]
 
   DrawingArea1 = ob3.Children[0]
 
  temporaneo = Temp
 
 
   
 
   
 
   pl = New MediaPipeline  
 
   pl = New MediaPipeline  
Riga 33: Riga 32:
 
   enc = New MediaControl(pl, "pngenc")
 
   enc = New MediaControl(pl, "pngenc")
 
   snk = New MediaControl(pl, "filesink")
 
   snk = New MediaControl(pl, "filesink")
   snk["location"] = temporaneo
+
   snk["location"] = "/tmp" &/ Format(Now, "dd_mm_yyyy-hh_nn_ss") & ".png"
 
    
 
    
 
  <FONT Color=gray>' ''Collega fra loro i plugin di "GStreamer":''</font>
 
  <FONT Color=gray>' ''Collega fra loro i plugin di "GStreamer":''</font>
Riga 43: Riga 42:
 
   pl.Play()
 
   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''===
 +
Private bo As Boolean
 +
 +
 +
Public Sub Form_Open()
 +
 +
  Me.Show
 +
 +
  MediaView1.URL = "v4l2:///dev/video<FONT Color=red>0</font>" <FONT Color=gray>'</font><SUP>&#091;[[#Note|nota 2]]&#093;</sup>
 +
 
 +
<FONT Color=gray>' ''Resta in attesa finché la registrazione non viene avviata dall'utente, premendo il tastino di avvio sul Controllo "MediaView":''</font>
 
   Repeat  
 
   Repeat  
 
     Wait 0.01
 
     Wait 0.01
   Until Stat(temporaneo).Size > 0
+
   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
 
   
 
   
  <FONT Color=gray>' ''Salva il file immagine di formato "png" nella cartella "/tmp":''</font>
+
  pl = New MediaPipeline
  Copy temporaneo To "/tmp" &/ Format(Now, "dd_mm_yyyy-hh_nn_ss") & ".png"
+
 +
  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)
 +
 +
  <FONT Color=gray>' ''Effettua la cattura di quanto mostrato dalla "DrawingArea" costitutiva del Controllo "MediaView":''</font>
 +
    pl.Play
 +
<FONT Color=gray>' ''L'inserimento del Metodo ".Stop()" è necessario, per consentire la registrazione dei dati immagine nel file immagine finale:''</font>
 +
    pl.Stop
 +
<FONT Color=gray>' ''La cattura delle singole immagini avviene in sequenza con la frequenza di 1 secondo:''</font>
 +
    Wait 1
 +
  Until MediaView1.State = Media.Ready  <FONT Color=gray>' ''Il ciclo dura, finché la registrazione non viene interrotta dall'utente''</font>
 
   
 
   
  pl.Stop
 
 
   pl.Close
 
   pl.Close
 +
 +
End
 +
 +
 +
Public Sub Button2_Click()
 +
 +
  bo = True
 
   
 
   
 
  End
 
  End
Riga 61: Riga 110:
 
* [[Generare un file immagine da una DrawingArea]]
 
* [[Generare un file immagine da una DrawingArea]]
 
* [[Ottenere una schermata ("screenshot") con Gambas]]
 
* [[Ottenere una schermata ("screenshot") con Gambas]]
 +
 +
[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]]

Versione attuale delle 03:14, 3 lug 2024

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" '[nota 2]
 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 in sequenza automatica di più singole immagini di quanto ripreso da una webcam mediante il Controllo MediaView

Private bo As Boolean


Public Sub Form_Open()

 Me.Show

 MediaView1.URL = "v4l2:///dev/video0" '[nota 2]
 
' 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


Public Sub Button2_Click()

 bo = True

End


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