Differenze tra le versioni di "Estrarre e salvare singole immagini da una ripresa video mediante una WebCam con il Componente gb.media"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
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''". <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
 
 
 
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]]
 

Versione attuale delle 20:09, 23 set 2022