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

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
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''.
+
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
   Dim appoggio As String
+
   Dim temporaneo As String
 
    
 
    
   appoggio = Temp
+
   temporaneo = Temp
 
    
 
    
 
   pl = New MediaPipeline  
 
   pl = New MediaPipeline  
Riga 17: Riga 17:
 
   enc = New MediaControl(pl, "jpegenc")
 
   enc = New MediaControl(pl, "jpegenc")
 
   snk = New MediaControl(pl, "filesink")
 
   snk = New MediaControl(pl, "filesink")
   snk["location"] = appoggio
+
   snk["location"] = temporaneo
 
    
 
    
 
  <FONT Color=gray>' ''Collega fra loro i plugin di "GStreamer":''</font>
 
  <FONT Color=gray>' ''Collega fra loro i plugin di "GStreamer":''</font>
Riga 29: Riga 29:
 
   Wait 1
 
   Wait 1
 
    
 
    
   Copy appoggio To "<FONT Color=gray>''/percorso/del/file/immagine.jpg''</font>"
+
   Copy temporneo To "<FONT Color=darkgreen>''/percorso/del/file/immagine.jpg''</font>"
 
    
 
    
 
   pl.Stop()
 
   pl.Stop()
Riga 35: Riga 35:
 
   Print "Cattura immagine effettuata"
 
   Print "Cattura immagine effettuata"
 
    
 
    
  '''End'''
+
  End
 
Si è visto sopra che risulta necessario l'uso dell'istruzione ''Copy'', la quale copia il primo file immagine generato ed ancora contenente gli utili dati immagine del protocollo JPEG, in un altro file .jpg. Questa procedura è necessaria, poiché risulta che il primo file immagine generato - alla chiusura del programma - perde i suoi dati.
 
Si è visto sopra che risulta necessario l'uso dell'istruzione ''Copy'', la quale copia il primo file immagine generato ed ancora contenente gli utili dati immagine del protocollo JPEG, in un altro file .jpg. Questa procedura è necessaria, poiché risulta che il primo file immagine generato - alla chiusura del programma - perde i suoi dati.
  
Riga 44: Riga 44:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
   Dim pl As MediaPipeline
 
   Dim pl As MediaPipeline
Riga 56: Riga 56:
 
   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"] = "<FONT Color=darkgreen>''/percorso/del/file/immagine.jpg''</font>"
 
    
 
    
 
  <FONT Color=gray>' ''Collega fra loro i plugin di "GStreamer":''</font>
 
  <FONT Color=gray>' ''Collega fra loro i plugin di "GStreamer":''</font>
Riga 71: Riga 71:
 
   <FONT Color=#B22222>_exit(0)</font>
 
   <FONT Color=#B22222>_exit(0)</font>
 
    
 
    
  '''End'''
+
  End
  
  

Versione delle 13:41, 22 dic 2023

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
 Dim temporaneo As String
 
 temporaneo = Temp
  
 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"] = temporaneo
  
' 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
  
 Copy temporneo To "/percorso/del/file/immagine.jpg"
  
 pl.Stop()
 pl.Close()
 Print "Cattura immagine effettuata"
  
End

Si è visto sopra che risulta necessario l'uso dell'istruzione Copy, la quale copia il primo file immagine generato ed ancora contenente gli utili dati immagine del protocollo JPEG, in un altro file .jpg. Questa procedura è necessaria, poiché risulta che il primo file immagine generato - alla chiusura del programma - perde i suoi dati.

Qualora non si intenda utilizzare la funzione Copy, si potrà utilizzare un'altra modalità che prevede al termine del codice l'inserimento della funzione esterna "_exit()", dichiarata nel file header "/usr/include/unistd.h ".

' 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"
  
' 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
  
' Si utilizza la funzione esterna "_exit( )" per uscire dal programma con la sicurezza che il file immagine sarà realizzato:
 _exit(0)
  
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