Differenze tra le versioni di "Catturare un'immagine con una webcam mediante il Componente gb.media"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Per catturare un'immagine (come se in sostanza si scattasse una foto) con una webcam mediante il Componente ''gb.media'', si utilizzeranno le Classi ''MediaPipeline'' e ''Medi...")
 
 
(11 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Per catturare un'immagine (come se in sostanza si scattasse una foto) con una webcam mediante il Componente ''gb.media'', si utilizzeranno le Classi ''MediaPipeline'' e ''MediaControl''.
+
Per catturare un'immagine (come se in sostanza si scattasse una foto) con una webcam mediante il Componente ''gb.media'' <B><SUP>&#091;[[#Note|nota 1]]&#093;</sup></b> e salvarla poi in un file immagine, si potranno utilizzare le Classi ''MediaPipeline'' e ''MediaControl''.
  
 
Mostriamo un esempio pratico:
 
Mostriamo un esempio pratico:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
+
 
   Dim pl As MediaPipeline
 
   Dim pl As MediaPipeline
 
   Dim src, enc, snk As MediaControl
 
   Dim src, enc, snk As MediaControl
 
 
  pl = New MediaPipeline
 
 
 
  src = New MediaControl(pl, "v4l2src")
 
<FONT Color=gray>' ''Cattura un fotogramma dalla webcam e lo salva come immagine jpeg:''</font>
 
  src["num-buffers"] = 1
 
  enc = New MediaControl(pl, "jpegenc")
 
  snk = New MediaControl(pl, "filesink")
 
  snk["location"] = "<FONT Color=gray>''/percorso/del/file/immagine.jpg''</font>"
 
 
 
<FONT Color=gray>' ''Colleghiamo fra loro i plugin di "GStreamer":''</font>
 
  src.LinkTo(enc)
 
  enc.LinkTo(snk)
 
 
 
<FONT Color=gray>' ''Effettua la ripresa dell'immagine:''</font>
 
  pl.Play()
 
 
 
<FONT Color=gray>' ''Per consentire la creazione definitiva del file immagine, è necessario impostare un ciclo infinito.''
 
' ''La chiusura del programma dovrà avvenire manualmente da parte dell'utente.''</font>
 
  Do
 
    Wait 0.01
 
  Loop
 
 
 
'''End'''
 
 
Si è visto sopra che risulta necessaria l'impostazione di un ciclo infinito, senza il quale il file immagine, seppur generato, non verrà riempito dei previsti dati immagine del protocollo JPEG. Qualora non si intenda inserire tale ciclo, ma si preferisca far chiudere il programma automaticamente da codice, bisognerà prevedere al termine del codice l'inserimento della funzione esterna "''_exit( )''", dichiarata nel file header "''/usr/include/unistd.h''".
 
<BR>Mostriamo un esempio:
 
<FONT Color=gray>' ''void _exit (int __status)''
 
' ''Terminate program execution with the low-order 8 bits of STATUS.''</font>
 
Private Extern _exit(__status As Integer) In "libc:6"
 
 
   
 
   
 +
  pl = New MediaPipeline
 
   
 
   
'''Public''' Sub Main()
+
   src = New MediaControl(pl, "v4l2src")
 
 
   Dim pl As MediaPipeline
 
  Dim src, enc, snk As MediaControl
 
 
 
  pl = New MediaPipeline
 
 
 
  src = New MediaControl(pl, "v4l2src")
 
 
  <FONT Color=gray>' ''Cattura un fotogramma dalla webcam e lo salva come immagine jpeg:''</font>
 
  <FONT Color=gray>' ''Cattura un fotogramma dalla webcam e lo salva come immagine jpeg:''</font>
  src["num-buffers"] = 1
+
  src["num-buffers"] = 1
  enc = New MediaControl(pl, "jpegenc")
+
  enc = New MediaControl(pl, "jpegenc")
  snk = New MediaControl(pl, "filesink")
+
  snk = New MediaControl(pl, "filesink")
  snk["location"] = "<FONT Color=gray>''/percorso/del/file/immagine.jpg''</font>"
+
  snk["location"] = "/tmp/immagine.jpg"
 
    
 
    
  <FONT Color=gray>' ''Colleghiamo fra loro i plugin di "GStreamer":''</font>
+
  <FONT Color=gray>' ''Collega fra loro i plugin di "GStreamer":''</font>
  src.LinkTo(enc)
+
  src.LinkTo(enc)
  enc.LinkTo(snk)
+
  enc.LinkTo(snk)
 
    
 
    
 
  <FONT Color=gray>' ''Effettua la ripresa dell'immagine:''</font>
 
  <FONT Color=gray>' ''Effettua la ripresa dell'immagine:''</font>
  pl.Play()
+
  pl.Play()
 
    
 
    
  <FONT Color=gray>' ''Si utilizza la funzione esterna "_exit( )" per uscire dal programma con la sicurezza che il file immagine sarà realizzato:''</font>
+
  <FONT Color=gray>' ''Con alcune webcam può essere necessario porre una breve pausa per consentire la ripresa dell'immagine:''</font>
  <FONT Color=#B22222>_exit(0)</font>
+
  Wait 1
 +
 +
  pl.Stop()
 +
  pl.Close()
 +
  Print "Cattura immagine effettuata"
 
    
 
    
  '''End'''
+
  End
 +
 
 +
 
 +
 
 +
=Note=
 +
[1] Vedere al riguardo anche questa pagina della wiki: [[Estrarre e salvare singole immagini da una ripresa video mediante WebCam effettuata con il Componente gb.media]]

Versione attuale delle 07:25, 18 gen 2024

Per catturare un'immagine (come se in sostanza si scattasse una foto) con una webcam mediante il Componente gb.media [nota 1] e salvarla poi in un file immagine, si potranno utilizzare le Classi MediaPipeline e MediaControl.

Mostriamo un esempio pratico:

Public Sub Main()

 Dim pl As MediaPipeline
 Dim src, enc, snk As MediaControl

 pl = New MediaPipeline 

 src = New MediaControl(pl, "v4l2src")
' Cattura un fotogramma dalla webcam e lo salva come immagine jpeg:
 src["num-buffers"] = 1
 enc = New MediaControl(pl, "jpegenc")
 snk = New MediaControl(pl, "filesink")
 snk["location"] = "/tmp/immagine.jpg"
  
' Collega fra loro i plugin di "GStreamer":
 src.LinkTo(enc)
 enc.LinkTo(snk)
  
' Effettua la ripresa dell'immagine:
 pl.Play()
  
' Con alcune webcam può essere necessario porre una breve pausa per consentire la ripresa dell'immagine:
 Wait 1

 pl.Stop()
 pl.Close()
 Print "Cattura immagine effettuata"
  
End


Note

[1] Vedere al riguardo anche questa pagina della wiki: Estrarre e salvare singole immagini da una ripresa video mediante WebCam effettuata con il Componente gb.media