Differenze tra le versioni di "Catturare un'immagine con una webcam mediante il Componente gb.media"
Riga 8: | Riga 8: | ||
Dim primofile As String | Dim primofile As String | ||
− | primofile = | + | primofile = Temp |
pl = New MediaPipeline | pl = New MediaPipeline | ||
Riga 36: | Riga 36: | ||
'''End''' | '''End''' | ||
− | Si è visto sopra che risulta necessario l'uso dell'istruzione | + | 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 | + | 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'' ". |
<FONT Color=gray>' ''void _exit (int __status)'' | <FONT Color=gray>' ''void _exit (int __status)'' | ||
' ''Terminate program execution with the low-order 8 bits of STATUS.''</font> | ' ''Terminate program execution with the low-order 8 bits of STATUS.''</font> |
Versione delle 04:18, 2 mag 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 primofile As String primofile = 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"] = primofile ' 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 primofile 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