Spanish [Solucionado] Barcode tarda mucho en leer DataMatrix

JMMF

Member
Licensed User
Longtime User
Hola a todos!
Necesito leer códigos dataMatrix y colocarlos en una BD.
He utilizado para esto el ejemplo de alwaysbusy https://www.b4x.com/android/forum/threads/abzxing-barcode-reader.7303/
Hasta aquí todo funciona perfecto pero tarda lo que no esta escrito en leerme el maldito DataMatrix:enojado:.
He probado leerlo con una app llamada i-nigma y rapidísimo.
Es posible realizar lo mismo con i-nigma que con BarcodeScanner?
Me explico, abrir i-nigma desde mi app, leer el DataMatrix, pasar el dato a mi app y cerrar i-nigma.
Muchas gracias por adelantado.
 
Last edited:

JMMF

Member
Licensed User
Longtime User
Gracias, bgsoft.
Pero, he probado la librería que me comentas y nada de nada
No me lee los DataMatrix.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola JMMF

He probado el programa de ejemplo y si que me funciona, te dice en un log lo que ha leido, para que funcione tienes que activar el checkbox, hice una prueba con el propio QR del desarrollador (Johan Schoeman), y el texto que me leyó fue: "Rather be stupid for five minutes of your life than for the rest of your life!"
Cuando lo detecta, se pone en rojo las tres esquinas y hace un beep. El resultado te lo devuelve en el evento: Sub nqrcrv_result_found(retval As String)

Saludos
 

JMMF

Member
Licensed User
Longtime User
Claro que si guapiii.
A mi también me lee los QR, con mucha paciencia.
pero los DataMatrix, como que no.
53785-bac90e044fc154c9ffa383988adc5370.jpg

Gracias, bgsoft.
 

JMMF

Member
Licensed User
Longtime User
Que rabia me da Jesús.
Es una maquina, tiene soluciones para todo.
He probado la librería que me comentaste, y perfecto (Bastante rápida, un 8 de 10)
Muchas gracias.

Solo me funciona de esta manera...
B4X:
Sub BotonQR_Click
     BajasModulo.LeerQR
    zx.BeginScan("myzx")
End Sub
B4X:
Sub LeerQR
    Dim zx As JhsIceZxing1 'Trabajos con libreria JhsIceZxing1 (Lector de codigos DataMatrix)

    zx.isportrait = True
    zx.useFrontCam = False

    'cambie estos factores entre 0 y 1 para cambiar el tamaño del rectángulo del visor
    'la biblioteca limitará el tamaño mínimo a 240 x 240 píxeles y el máximo a (ancho de pantalla) x (altura de pantalla) píxeles
    zx.theViewFinderXfactor = 0.7
    zx.theViewFinderYfactor = 0.5

    zx.theFrameColor = Colors.Red
    zx.theLaserColor = Colors.Green
    zx.theMaskColor = Colors.Black
    zx.theResultColor = Colors.LightGray
    zx.theResultPointColor = Colors.Magenta

    'establecer los mensajes de aviso
    zx.theTopPromptMessage = "Leyendo"
    zx.theTopPromptTextSize = 5%y'tamaño del texto en píxeles
    zx.topPromptColor = Colors.White
    zx.topPromptDistanceFromTop = 1%y'distancia de píxel desde la parte superior

    zx.theBottomPromptMessage = "DataMatrix..."
    zx.theBottomPromptTextSize = 5%y'tamaño del texto en píxeles
    zx.bottomPromptColor = Colors.White
    zx.bottomPromptDistanceFromBottom = 5%y'distancia de píxel desde la parte superior

    'add a bitmap
    zx.theBitMap = LoadBitmap(File.DirAssets,"ImagenQR.png")
    zx.theBitMapLeft = 1%x
    zx.theBitMapTop = 1%y
    zx.theBitMapWidth = 10%x
    zx.theBitMapHeight = 10%x
End Sub

B4X:
Sub myzx_result(atype As String,Values As String)
    myQRResult = Values
    Buscar_Jaula
End Sub

Si lo modifico para controlar el codigo que debe leer.
no funciona.

B4X:
Sub BotonQR_Click

    zx.isportrait = True
    zx.useFrontCam = False
  
    zx.timeoutDuration = 30
  
    'cambie estos factores entre 0 y 1 para cambiar el tamaño del rectángulo del visor
    'la biblioteca limitará el tamaño mínimo a 240 x 240 píxeles y el máximo a (ancho de pantalla) x (altura de pantalla) píxeles
    zx.theViewFinderXfactor = 0.7
    zx.theViewFinderYfactor = 0.5

    zx.theFrameColor = Colors.Red
    zx.theLaserColor = Colors.Green
    zx.theMaskColor = Colors.Black
    zx.theResultColor = Colors.LightGray
    zx.theResultPointColor = Colors.Magenta

    'establecer los mensajes de aviso
    zx.theTopPromptMessage = Activity.Title
    zx.theTopPromptTextSize = 5%y'tamaño del texto en píxeles
    zx.topPromptColor = Colors.White
    zx.topPromptDistanceFromTop = 1%y'distancia de píxel desde la parte superior

    zx.theBottomPromptMessage = "Leyendo el DataMatrix..."
    zx.theBottomPromptTextSize = 5%y'tamaño del texto en píxeles
    zx.bottomPromptColor = Colors.White
    zx.bottomPromptDistanceFromBottom = 5%y'distancia de píxel desde la parte superior

    'add a bitmap
    zx.theBitMap = LoadBitmap(File.DirAssets,"ImagenQR.png")
    zx.theBitmapPosition(1%x,1%y,10%x,10%x)

    zx.mustBeep = True
    zx.ScanMode = zx.FORMATS_DATA_MATRIX
    zx.BeginScan("myzx")
End Sub

Me da este error

** Activity (main) Create, isFirst = false **
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
** Activity (jaula) Create, isFirst = true **
** Activity (jaula) Resume **
** Activity (jaula) Pause, UserClosed = false **
PortraitScreen 1080 1920
DATA_MATRIX:35875###myzx_result
sending message to waiting queue (OnActivityResult)
running waiting messages (1)
jaula$ResumeMessagerun (java line: 300)
java.lang.Exception: Sub myzx_result signature does not match expected signature.
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:188)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:170)
at ice.zxing.b4aZXingLib$1.ResultArrived(b4aZXingLib.java:384)
at anywheresoftware.b4a.BA$4.run(BA.java:547)
at anywheresoftware.b4a.BA.setActivityPaused(BA.java:432)
at b4a.Bajas.jaula$ResumeMessage.run(jaula.java:300)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7230)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
java.lang.Exception: Sub myzx_result signature does not match expected signature.

¿Que estoy haciendo mal?
 

JMMF

Member
Licensed User
Longtime User
Perfecto...
Muchas gracias Johan Schoeman.

Pero cuando cancelo la lectura
me da este error

** Activity (main) Create, isFirst = false **
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
** Activity (jaula) Create, isFirst = false **
** Activity (jaula) Resume **
** Activity (jaula) Pause, UserClosed = false **
Portrait
sending message to waiting queue (OnActivityResult)
running waiting messages (1)
jaula$ResumeMessagerun (java line: 300)
java.lang.Exception: Sub myzx_usercancelled was not found.
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:192)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:170)
at ice.zxing.b4aZXingLib$1.ResultArrived(b4aZXingLib.java:388)
at anywheresoftware.b4a.BA$4.run(BA.java:547)
at anywheresoftware.b4a.BA.setActivityPaused(BA.java:432)
at b4a.Bajas.jaula$ResumeMessage.run(jaula.java:300)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7230)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
java.lang.Exception: Sub myzx_usercancelled was not found.
 

Johan Schoeman

Expert
Licensed User
Longtime User
Perfecto...
Muchas gracias Johan Schoeman.

Pero cuando cancelo la lectura
me da este error

** Activity (main) Create, isFirst = false **
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
** Activity (jaula) Create, isFirst = false **
** Activity (jaula) Resume **
** Activity (jaula) Pause, UserClosed = false **
Portrait
sending message to waiting queue (OnActivityResult)
running waiting messages (1)
jaula$ResumeMessagerun (java line: 300)
java.lang.Exception: Sub myzx_usercancelled was not found.
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:192)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:170)
at ice.zxing.b4aZXingLib$1.ResultArrived(b4aZXingLib.java:388)
at anywheresoftware.b4a.BA$4.run(BA.java:547)
at anywheresoftware.b4a.BA.setActivityPaused(BA.java:432)
at b4a.Bajas.jaula$ResumeMessage.run(jaula.java:300)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7230)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
java.lang.Exception: Sub myzx_usercancelled was not found.
You are missing these events in your B4A project...
B4X:
Sub myzx_timedout(timedOut As Boolean)
    Log("timedOut " & timedOut)

End Sub

Sub myzx_usercancelled(userCancelled As Boolean)
    Log("userCancelled " & userCancelled)
End Sub
 
Top