Differenze tra le versioni di "Leggere codici a barre con una webcam mediante il Componente gb.media"

Da Gambas-it.org - Wikipedia.
Riga 34: Riga 34:
 
  Public Sub Form_Open()
 
  Public Sub Form_Open()
 
   
 
   
   Dim src, zbr, snk As MediaControl
+
   Dim src, con, zbr, snk As MediaControl
 
   
 
   
 
   pl = New MediaPipeline As "Pipeline"
 
   pl = New MediaPipeline As "Pipeline"
 
     
 
     
 
   src = New MediaControl(pl, "v4l2src")
 
   src = New MediaControl(pl, "v4l2src")
 +
  con = New MediaControl(pl, "videoconvert")
 
   zbr = New MediaControl(pl, "zbar")
 
   zbr = New MediaControl(pl, "zbar")
 
   snk = New MediaControl(pl, "xvimagesink")
 
   snk = New MediaControl(pl, "xvimagesink")
 
     
 
     
   src.LinkTo(zbr)
+
   src.LinkTo(con)
 +
  con.LinkTo(zbr)
 
   zbr.LinkTo(snk)
 
   zbr.LinkTo(snk)
 
   
 
   

Versione delle 12:42, 27 apr 2023

Il Componente gb.media offre la possibilità di leggere codici a barre mediante una webcam.

Di seguito mostriamo un codice utile a detto scopo, usando la Classe MediaPipeline del Componente gb.media.

Fasi necessarie:
- collegare una webcam al computer;
- lanciare il codice;
- avvicinare (...non troppo) il codice a barre alla webcam, cercando (...con pazienza) la distanza e l'inclinazione ottimali.

Private pl As MediaPipeline
Private tb As ToggleButton
Private drar As DrawingArea


Public Sub _new()

 With Me
   .W = 600
   .H = 600
 End With
  
 drar = New DrawingArea(Me)
 drar.Background = Color.Transparent
  
 With tb = New ToggleButton(Me) As "Tasto"
   .X = 500
   .Y = 550
   .W = 80
   .H = 40
   .Text = "Avvia"
 End With
  
End

Public Sub Form_Open()

 Dim src, con, zbr, snk As MediaControl

 pl = New MediaPipeline As "Pipeline"
   
 src = New MediaControl(pl, "v4l2src")
 con = New MediaControl(pl, "videoconvert")
 zbr = New MediaControl(pl, "zbar")
 snk = New MediaControl(pl, "xvimagesink")
   
 src.LinkTo(con)
 con.LinkTo(zbr)
 zbr.LinkTo(snk)

 snk.SetWindow(drar)

End

Public Sub Tasto_Click()

 If tb.Value Then
   pl.Play()
   tb.Text = "Chiudi"
 Else
   pl.Stop()
   pl.Close()
   Me.Close
 Endif

End

Public Sub Pipeline_Event(Message As MediaMessage)

 Dim b As Byte

 If Message.Name = "barcode" Then
   For b = 1 To Message.count - 1
     With Message
       Print .Keys[b], Message[.Keys[b]],
     End With
   Next
   Print
 Endif

End