Catturare un'immagine con una webcam mediante il Componente gb.media

Da Gambas-it.org - Wikipedia.
Versione del 6 ago 2017 alle 07:23 di Vuott (Discussione | contributi) (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...")

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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.

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"] = "/percorso/del/file/immagine.jpg"
  
' Colleghiamo fra loro i plugin di "GStreamer":
  src.LinkTo(enc)
  enc.LinkTo(snk)
  
' Effettua la ripresa dell'immagine:
  pl.Play()
  
' Per consentire la creazione definitiva del file immagine, è necessario impostare un ciclo infinito.
' La chiusura del programma dovrà avvenire manualmente da parte dell'utente.
  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".
Mostriamo un esempio:

' void _exit (int __status)
' Terminate program execution with the low-order 8 bits of STATUS.
Private Extern _exit(__status As Integer) In "libc:6"


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"] = "/percorso/del/file/immagine.jpg"
  
' Colleghiamo fra loro i plugin di "GStreamer":
  src.LinkTo(enc)
  enc.LinkTo(snk)
  
' Effettua la ripresa dell'immagine:
  pl.Play()
  
' Si utilizza la funzione esterna "_exit( )" per uscire dal programma con la sicurezza che il file immagine sarà realizzato:
  _exit(0)
  
End