Xojo 2024r1 incorpora en Mac, Windows e iOS la clase Barcode con la que es posible crear como imágenes códigos de barras y códigos QR con el tamaño deseado… ¡o bien escanear hasta 12 diferentes tipos de códigos mediante cualquiera de las cámaras conectadas a tu equipo Mac, Windows o iOS; o identificarlos a partir de la imagen proporcionada como parámetro!
La capacidad de generar los diferentes tipos de códigos y de identificarlos a partir de las imágenes proporcionadas están disponibles como métodos compartidos para las plataformas indicadas, tanto en aplicaciones Desktop como en aplicaciones de Consola. Esto último es interesante porque también supone la capacidad de que puedas emplear dicha funcionalidad en las aplicaciones Web desplegadas sobre servidores Windows o servidores Mac.
Por otra parte, el escaneo de códigos QR (o cualquiera del resto de tipos soportados) sólo está disponible para las plataformas soportadas en Desktop, puesto que presentan una interfaz de usuario donde puedes previsualizar la imagen capturada por la cámara seleccionada, seleccionar la cámara a utilizar en el escaneo de entre las conectadas al ordenador (incluyendo por ejemplo los dispositivos iOS en el caso de Mac, mediante Continuity; o bien dispositivos Android emparejados con tu equipo Windows). Por otra parte, en el caso de Mac, la capacidad de escanear imágenes sólo está disponible bajo macOS 10.15 o superior.
Generar códigos
Crear códigos QR o Bar128 no puede ser más sencillo; al tratarse de un método compartido ni siquiera es necesario crear previamente una instancia de la clase, tan sólo invocar el método:
Barcode.Image(value As String, width As Integer, height As Integer, type As Barcode.Types = Barcode.Types.QR) As Picture
Donde los parámetros esperados son los siguientes:
- Value: Cadena de texto fuente que será convertida al tipo de código indicado.
- Width: Ancho de la imagen resultante con el código generado.
- Height: Altura que tendrá la imagen resultante con el código generado.
- Type: El tipo de código que deseas generar. Puede ser QR o Bar128; siendo estos valores disponibles en el enumerador Barcode.Types.
Una vez invocado el método obtendrás una imagen (Picture) que podrás utilizar en tu aplicación; o bien recibirás un InvalidArgumentException en el caso de que algunos de los parámetros proporcionados no sea válido, como por ejemplo pasar una cadena de texto vacía como fuente de los datos.
Por ejemplo, la siguiente línea de código genera una imagen de 120 x 120 correspondiente a un código QR con el texto proporcionado:
Var p As Picture = Barcode.Image("Xojo Rocks!", 120, 120, Barcode.Types.QR)
Reconocer códigos en imágenes
Del mismo modo que puedes generar imágenes de códigos a partir del texto indicado, también es posible reconocer hasta 12 diferentes tipos de códigos a partir de la imagen proporcionada. Para ello también utilizarás otro método compartido de la clase Barcode:
Barcode.FromImage(image As Picture) As String()
Como puedes ver, en este caso el método devolverá un array de Strings con los valores de los códigos reconocidos dado que es posible que la imagen contenga más de un código; pero también es posible que no se haya podido reconocer ningún código en la imagen proporcionada, de modo que conviene consultar los límites del array recibido antes de proceder con él.
Por ejemplo, esta línea de código se encargará de reconocer los códigos disponibles en la imagen MyPicture y devolverá los valores en el array RecognizedCodes():
Var RecognizedCodes() As String = Barcode.FromImage(MyPicture)
Escanear códigos
Por último se encuentra la capacidad de escanear códigos directamente mediante cualquiera de las cámaras conectadas al ordenador. En este caso sí es necesario crear previamente una instancia de la clase Barcode (por ejemplo puedes arrastrar la clase desde la Librería del IDE sobre el área de la bandeja en el Editor de Diseño de la ventana):
Al hacerlo se añadirá al Navegador de Proyecto, donde podrás seleccionarlo e implementar cualquiera de los tres Manejadores de Eventos disponibles:
- ScanCancelled: El usuario ha cancelado la operación de escanear códigos, como por ejemplo al cerrar la ventana de la UI presentada.
- ScanCompleted: Aquí recibirás el valor como String correspondiente al código detectado por la cámara seleccionada.
- ScanFailed: Este evento se lanza cuando se ha producido algún tipo de error, como por ejemplo el hecho de que no se detecte ninguna cámara conectada al equipo.
Para presentar la UI de escaneo de códigos tan sólo hay que invocar el método StartScan sobre la instancia de Barcode creada. Por ejemplo:
Barcode1.StartScan
Por otra parte, y dado que la UI no se cierra automáticamente cuando se reconoce un código para favorecer aquellas operaciones en las que la aplicación, por ejemplo, desee escanear una serie de códigos (como puede ser el caso de inventariado), también es posible detener la operación mediante código invocando el método StopScan. Por ejemplo, puedes incluir esta línea de código en el evento ScanCompleted de la instancia Barcode1 una vez que se ha procesado el valor recibido:
me.StopScan
Como es de esperar, al invocar el método StopScan desde código se cerrará la UI de escaneo de códigos.
Conclusión
Como has visto, con Xojo 2024r1 podrás crear con suma facilidad todo tipo de aplicaciones en macOS, Windows e iOS con la capacidad tanto de generar como de escanear códigos QR y otros muchos tipos de códigos de barras, abriendo así un amplio campo de posibilidades.