Ahora intento ejemplificar la Lectura de un QR usando la aplicación ZBar que es Open Source, y contiene unos ejecutables dentro de la carpeta BIN que en particular utilizo para este ejemplo el zbarimg.exe
Para este ejemplo, se supone que previamente se tiene "copiada" en portapapeles el QR a decodificar, usando GDI+ lo almaceno en un archivo temporal para decodificarlo.
El código es el siguiente:
SET DEFAULT TO SYS(5)+ADDBS(SYS(2003)) * --- Creamos una imagen desde el portapapeles para validar el QR --- * --- Código de Luis María Guayan, Gracias por tus aportaciones. --- Do System.App loBmp = _Screen.System.Drawing.Bitmap.FromClipboard() IF ISNULL(loBmp) MESSAGEBOX("Debe copiar antes la imagen del CBB al portapapeles!!",16,"Lector QR") RETURN ENDIF uidImagen = ADDBS(SYS(2023)) + SYS(2015)+".png" loBmp.Save(uidImagen, _Screen.System.Drawing.Imaging.ImageFormat.Png) * --- Creamos el comando de DOS para ejecutar ZBar excelente herramienta open source --- * --- http://zbar.sourceforge.net/ --- lpComando = SYS(5)+ADDBS(SYS(2003))+"ZBar\zbarimg.exe -D "+uidImagen+ " > "+uidImagen+".txt" TEXT TO xBAT NOSHOW ADDITIVE TEXTMERGE PRETEXT 7 echo off <<lpComando>> ENDTEXT uidBat = ADDBS(SYS(2023)) + SYS(2015) + [.bat] STRTOFILE(xBAT,uidBat) zCommando = uidBat Ejecuta(zCommando, 0) BorraArchivo(uidBat) * --- Ahora cargamos el contenido del QR --- cContenidoQR = "" IF FILE(uidImagen+".txt") cContenidoQR = FILETOSTR(uidImagen+".txt") ENDIF BorraArchivo(uidImagen) BorraArchivo(uidImagen+".txt") * --- Lo mostramos a pantalla --- Messagebox(IIF(EMPTY(cContenidoQR),"ERROR: No se pudo leer el QR",cContenidoQR),64,"Lector QR") *--------------------------------------------------- FUNCTION BorraArchivo(pFile) *--------------------------------------------------- * Esta funcion elimina el archivo indicado como parametro * si es que existe en Disco *--------------------------------------------------- IF FILE(pFile) DELETE FILE (pFile) ENDIF ENDFUNC *--------------------------------------------------- *--------------------------------------------------- FUNCTION Ejecuta(cComando, iStatus) *--------------------------------------------------- *!* Esta funcion ejecuta un comando de DOS indicado *!* como primer parámetro, el segundo es el estilo *!* de la ventana a utilizar, ver el sig. listado *!* entEstiloVentana Descripción *!* 0 Oculta la ventana y activa otra. *!* 1 Activa y muestra una ventana. Si la ventana está minimizada o maximizada, el sistema la restaura con su posición y tamaño originales. *!* Una aplicación debe especificar este indicador cuando muestre la ventana por primera vez. *!* 2 Activa la ventana y la muestra minimizada. *!* 3 Activa la ventana y la muestra maximizada. *!* 4 Muestra una ventana con su tamaño y posición más recientes. La ventana activa permanece activa. *!* 5 Activa la ventana y la muestra con su tamaño y posición actuales. *!* 6 Minimiza la ventana especificada y activa la siguiente ventana de mayor nivel en orden Z. *!* 7 Muestra la ventana minimizada. La ventana activa permanece activa. *!* 8 Muestra la ventana en su estado actual. La ventana activa permanece activa. *!* 9 Activa y muestra la ventana. Si la ventana está minimizada o maximizada, el sistema la restaura con su posición y tamaño originales. *!* Una aplicación debe especificar este indicador cuando se restaure una ventana minimizada. *!* 10 Establece el estado de presentación a partir del estado del programa que inició la aplicación. *---------------------------------------------------- TRY oShell = createobject("WScript.Shell") oShell.Run(cComando,iStatus,.T.) CATCH TO xEcepcion lsErrorEcepcion = "No se pudo ejecutar: "+cComando+ " RS:"+TRANSFORM(xEcepcion.ErrorNo) + CHR(13)+CHR(10)+ "Mensaje: " + xEcepcion.Message Messagebox(lsErrorEcepcion,16,"Lector QR") FINALLY * ENDTRY ENDFUNC *----------------------------------------------------
Pueden descargar el ejemplo completo, con librerias y ejecutables adicionales desde aqui
Baltazar Moreno
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.