Utilizamos cookies propias y de terceros. Al navegar entendemos que aceptas el uso de cookies. +Info.
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Usuario
· Wiki

Nick


Contraseña


Nuevo usuario


English

Programacion: Generar y leer códigos QR Quick Response Barcode con Visual Basic .Net VB.Net
Visual Studio .NET


Explicamos en este artículo cómo desarrollar una aplicación con Microsoft Visual Basic .Net VB.Net para generar códigos QR (Quick Response Barcode ó código de barras de respuesta rápida) usando la librería ThoughtWorks.QRCode.dll. Mostramos también cómo usar esta librería para añadir la opción de reconocer un código QR guardado (capturado en una imagen). Indicamos cómo se hizo la aplicación AjpdSoft Generador y Lector códigos QR.



Videotutorial AjpdSoft Generador y lector códigos QR en VB.NET

AjpdSoft Generador y Lector códigos QR, aplicación desarrollada en Visual Studio .NET 2010 (Visual Basic VB.NET) con código fuente incluido 100% open source totalmente gratuito. AjpdSoft Generador y Lector códigos QR permite generar códigos QR (Quick Response Barcode), permite guardar el código QR en fichero de imagen (PNG, BMP, GIF ó JPEG) o imprimirlo. AjpdSoft Generador y Lector códigos QR también lee o decodifica códigos QR ya generados y guardados en imagen. La aplicación permite generar códigos QR con formatos para envío de SMS, contacto en agenda, evento en calendario, geolocalización, añadir red wifi, texto libre, email, teléfono, etc.

A continuación mostramos un videotutorial donde explicamos el funcionamiento de AjpdSoft Generador y Lector códigos QR:

 

 

Código QR Quick Response Barcode o código de barras de respuesta rápida

Un código QR (Quick Response Barcode ó código de barras de respuesta rápida) es un sistema para almacenar información en una matriz de puntos o un código de barras bidimensional. Fue creado por la compañía japonesa Denso-Wave en el año 1994. Estos códigos se caracterizan por los tres cuadrados que se encuentran en las esquinas y que sirven para que los lectores de códigos QR puedan detectar su posición. Los códigos QR son muy comunes en Japón y de hecho son el código bidimensional más popular en ese país.

Aunque inicialmente se usó para registrar repuestos en el área de la fabricación de vehículos, hoy, los códigos QR se usan para administración de inventarios en una gran variedad de industrias. Recientemente, la inclusión de software que lee códigos QR en teléfonos móviles, ha permitido nuevos usos orientados al consumidor, que se manifiestan en comodidades como el dejar de tener que introducir datos de forma manual en los teléfonos. Las direcciones y las URLs se están volviendo cada vez más comunes en revistas, anuncios, emplazamientos turísticos, etc. El agregado de códigos QR en tarjetas de presentación también se está haciendo común, simplificando en gran medida la tarea de introducir detalles individuales de un nuevo cliente en la agenda de un teléfono móvil.

Los códigos QR también pueden leerse desde PC o smartphone mediante dispositivos de captura de imagen, como puede ser un escáner o la cámara de fotos siempre y cuando estos dispositivos tengan algún software que permita leer los datos QR.

Ejemplo de código QR que guarda la URL de nuestro sitio web (http://www.ajpdsoft.com):

Código QR de la URL del Proyecto AjpdSoft

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

Instalar Microsoft Visual Studio .Net

Instalaremos Microsoft Visual Studio .Net como indicamos en este artículo:

Instalar Microsoft Visual Studio .Net 2010 y desarrollar aplicación con acceso a PostgreSQL

Crear aplicación proyecto VB.Net y diseño AjpdSoft Generador y lector códigos QR

Una vez instalado el IDE de desarrollo que usaremos, crearemos un nuevo proyecto. Para ello pulsaremos en el menú "Archivo" - "Nuevo proyecto" de Microsoft Visual Studio .Net:

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

En "Plantillas instaladas" seleccionaremos "Visual Basic" - "Windows", en la parte derecha seleccionaremos "Aplicación de Windows Forms". Introduciremos un nombre para el nuevo proyecto, por ejemplo "AjpdSoftLectorCodigosQR". Tras introducir los datos básicos de la nueva solución pulsaremos "Aceptar":

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

Añadiremos un componente TabControl con dos fichas, en la primera coloraremos los componentes necesarios para configurar el código QR que se generará: texto que contendrá (sms, url, texto, teléfono, contacto, email, red wifi, geolocalización, evento), nivel de corrección, color de fondo, color del código, escala de los píxeles, forzar UTF-8:

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

Dentro de esta ficha también colocaremos otro TabControl para añadir todos los valores para el QR que queramos generar de forma automática: SMS, URL, Texto, Teléfono, Contacto, Email, Evento, Red Wifi, Geolocalización:

  • Para el SMS:

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

  • Para la URL:

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

  • Para el Texto libre:

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

  • Para llamada a un teléfono:

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

  • Insertar contacto en agenda:

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

  • Enviar correo electrónico (email):

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

  • Insertar evento en calendario:

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

  • Conectar a una red Wifi:

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

  • Geolocalización, abrir mapa con un punto determinado:

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

En el TabControl principal colocaremos un segundo TabControl donde pondremos todos los componentes para la generación del QR:

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

y en otra ficha colocaremos un TextBox para mostrar el texto resultante con el que se generará el QR:

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

En una segunda ficha del TabControl principal colocaremos los componentes necesarios para leer un código QR ya guardado en imagen:

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

Añadiremos también dos componentes no visuales para imprimir los códigos QR generados un PrintDialog y un PrintDocument (componentes del Cuadro de herramientas, ficha "Impresión"):

Desarrollar aplicación Visual Basic .Net VB.Net para generar y leer códigos QR

En la siguiente descarga publicamos el diseño y el código fuente completo de la aplicación AjpdSoft Generador y Lector códigos QR:

AjpdSoft Generador y Lector códigos QR código fuente VB.Net

Librería dll, agregar referencia en VB.Net para generar y leer códigos QR con VB.Net

Para realizar un proyecto software en VB.Net que genere códigos QR y que lea códigos QR generados y previamente guardos en imagen utilizaremos una librería llamada ThoughtWorks.QRCode.dll. Dicha librería está disponible en la descarga gratuita AjpdSoft Generador y Lector códigos QR código fuente VB.Net. Una vez descargada esta librería la colocaremos en una carpeta del proyecto, a continuación agregaremos la correspondiente referencia en nuestra solución VB.Net a esta librería. Para ello accederemos al menú "Proyecto" - "Agregar referencia":

Librería dll, agregar referencia en VB.Net para generar y leer códigos QR con VB.Net

Seleccionaremos el fichero de la librería ThoughtWorks.QRCode.dll:

Librería dll, agregar referencia en VB.Net para generar y leer códigos QR con VB.Net

En el código fuente de nuestra solución, en el fichero .vb del formulario principal añadiremos los imports correspondientes:

Imports ThoughtWorks.QRCode
Imports ThoughtWorks.QRCode.Codec
Imports ThoughtWorks.QRCode.Codec.Data

Librería dll, agregar referencia en VB.Net para generar y leer códigos QR con VB.Net

Código fuente solución Visual Basic .Net para leer y generar códigos QR Quick Response Barcode

A continuación mostramos el listado del código fuente completo (de todos los eventos y componentes) para generar la aplicación AjpdSoft Generador y Lector códigos QR:

Imports ThoughtWorks.QRCode
Imports ThoughtWorks.QRCode.Codec
Imports ThoughtWorks.QRCode.Codec.Data

Public Class formLeerGenerarCodigosQR
    Private colorFondoQR As Integer =
        Color.FromArgb(255, 255, 255, 255).ToArgb
    Private colorQR As Integer =
        Color.FromArgb(255, 0, 0, 0).ToArgb

    Private Function AdjustQRVersion(ByVal TextEncode As String,
             ByVal qrCodeErrCorrect As  _
             Codec.QRCodeEncoder.ERROR_CORRECTION) As Integer
        Dim textb() As Byte =
            System.Text.UTF8Encoding.UTF8.GetBytes(TextEncode)
        Dim ibits As Integer = ((textb.Length + 1) * 8) + 8

        Return -1

        Select Case qrCodeErrCorrect
            'Corrección de errores del 7%
            Case QRCodeEncoder.ERROR_CORRECTION.L
                Select Case ibits
                    Case Is <= 152
                        Return 1
                    Case Is <= 272
                        Return 2
                    Case Is <= 440
                        Return 3
                    Case Is <= 640
                        Return 4
                    Case Is <= 864
                        Return 5
                    Case Is <= 1088
                        Return 6
                    Case Is <= 1248
                        Return 7
                    Case Is <= 1552
                        Return 8
                    Case Is <= 1856
                        Return 9
                    Case Is <= 2192
                        Return 10
                    Case Is <= 2592
                        Return 11
                    Case Is <= 2960
                        Return 12
                    Case Is <= 3424
                        Return 13
                    Case Is <= 3688
                        Return 14
                    Case Is <= 4184
                        Return 15
                    Case Is <= 4712
                        Return 16
                    Case Is <= 5176
                        Return 17
                    Case Is <= 5768
                        Return 18
                    Case Is <= 6360
                        Return 19
                    Case Is <= 6888
                        Return 20
                    Case Is <= 7456
                        Return 21
                    Case Is <= 8048
                        Return 22
                    Case Is <= 8752
                        Return 23
                    Case Is <= 9392
                        Return 24
                    Case Is <= 10208
                        Return 25
                    Case Is <= 10960
                        Return 26
                    Case Is <= 11744
                        Return 27
                    Case Is <= 12248
                        Return 28
                    Case Is <= 13048
                        Return 29
                    Case Is <= 13880
                        Return 30
                    Case Is <= 14744
                        Return 31
                    Case Is <= 15640
                        Return 32
                    Case Is <= 16568
                        Return 33
                    Case Is <= 17528
                        Return 34
                    Case Is <= 18448
                        Return 35
                    Case Is <= 19472
                        Return 36
                    Case Is <= 20528
                        Return 37
                    Case Is <= 21616
                        Return 38
                    Case Is <= 22496
                        Return 39
                    Case Is <= 23648
                        Return 40
                    Case Else
                        Return -1
                End Select

                'Corrección de errores del 15%
            Case QRCodeEncoder.ERROR_CORRECTION.M
                Select Case ibits
                    Case Is <= 128
                        Return 1
                    Case Is <= 224
                        Return 2
                    Case Is <= 352
                        Return 3
                    Case Is <= 512
                        Return 4
                    Case Is <= 688
                        Return 5
                    Case Is <= 864
                        Return 6
                    Case Is <= 992
                        Return 7
                    Case Is <= 1232
                        Return 8
                    Case Is <= 1456
                        Return 9
                    Case Is <= 1728
                        Return 10
                    Case Is <= 2032
                        Return 11
                    Case Is <= 2320
                        Return 12
                    Case Is <= 2672
                        Return 13
                    Case Is <= 2920
                        Return 14
                    Case Is <= 3320
                        Return 15
                    Case Is <= 3624
                        Return 16
                    Case Is <= 4056
                        Return 17
                    Case Is <= 4504
                        Return 18
                    Case Is <= 5016
                        Return 19
                    Case Is <= 5352
                        Return 20
                    Case Is <= 5712
                        Return 21
                    Case Is <= 6256
                        Return 22
                    Case Is <= 6880
                        Return 23
                    Case Is <= 7312
                        Return 24
                    Case Is <= 8000
                        Return 25
                    Case Is <= 8496
                        Return 26
                    Case Is <= 9024
                        Return 27
                    Case Is <= 9544
                        Return 28
                    Case Is <= 10136
                        Return 29
                    Case Is <= 10984
                        Return 30
                    Case Is <= 11640
                        Return 31
                    Case Is <= 12328
                        Return 32
                    Case Is <= 13048
                        Return 33
                    Case Is <= 13800
                        Return 34
                    Case Is <= 14496
                        Return 35
                    Case Is <= 15312
                        Return 36
                    Case Is <= 15936
                        Return 37
                    Case Is <= 16816
                        Return 38
                    Case Is <= 17728
                        Return 39
                    Case Is <= 18672
                        Return 40
                    Case Else
                        Return -1
                End Select

                'Corrección de errores del 25%
            Case QRCodeEncoder.ERROR_CORRECTION.Q
                Select Case ibits
                    Case Is <= 104
                        Return 1
                    Case Is <= 176
                        Return 2
                    Case Is <= 272
                        Return 3
                    Case Is <= 384
                        Return 4
                    Case Is <= 496
                        Return 5
                    Case Is <= 608
                        Return 6
                    Case Is <= 704
                        Return 7
                    Case Is <= 880
                        Return 8
                    Case Is <= 1056
                        Return 9
                    Case Is <= 1232
                        Return 10
                    Case Is <= 1440
                        Return 11
                    Case Is <= 1648
                        Return 12
                    Case Is <= 1952
                        Return 13
                    Case Is <= 2088
                        Return 14
                    Case Is <= 2360
                        Return 15
                    Case Is <= 2600
                        Return 16
                    Case Is <= 2936
                        Return 17
                    Case Is <= 3176
                        Return 18
                    Case Is <= 3560
                        Return 19
                    Case Is <= 3880
                        Return 20
                    Case Is <= 4096
                        Return 21
                    Case Is <= 4544
                        Return 22
                    Case Is <= 4912
                        Return 23
                    Case Is <= 5312
                        Return 24
                    Case Is <= 5744
                        Return 25
                    Case Is <= 6032
                        Return 26
                    Case Is <= 6464
                        Return 27
                    Case Is <= 6968
                        Return 28
                    Case Is <= 7288
                        Return 29
                    Case Is <= 7880
                        Return 30
                    Case Is <= 8264
                        Return 31
                    Case Is <= 8920
                        Return 32
                    Case Is <= 9368
                        Return 33
                    Case Is <= 9848
                        Return 34
                    Case Is <= 10288
                        Return 35
                    Case Is <= 10832
                        Return 36
                    Case Is <= 11408
                        Return 37
                    Case Is <= 12016
                        Return 38
                    Case Is <= 12656
                        Return 39
                    Case Is <= 13328
                        Return 40
                    Case Else
                        Return -1
                End Select

                ' Corrección de error del 30%
            Case QRCodeEncoder.ERROR_CORRECTION.H
                Select Case ibits
                    Case Is <= 72
                        Return 1
                    Case Is <= 128
                        Return 2
                    Case Is <= 208
                        Return 3
                    Case Is <= 288
                        Return 4
                    Case Is <= 368
                        Return 5
                    Case Is <= 480
                        Return 6
                    Case Is <= 528
                        Return 7
                    Case Is <= 688
                        Return 8
                    Case Is <= 800
                        Return 9
                    Case Is <= 976
                        Return 10
                    Case Is <= 1120
                        Return 11
                    Case Is <= 1264
                        Return 12
                    Case Is <= 1440
                        Return 13
                    Case Is <= 1576
                        Return 14
                    Case Is <= 1784
                        Return 15
                    Case Is <= 2024
                        Return 16
                    Case Is <= 2264
                        Return 17
                    Case Is <= 2504
                        Return 18
                    Case Is <= 2728
                        Return 19
                    Case Is <= 3080
                        Return 20
                    Case Is <= 3248
                        Return 21
                    Case Is <= 3536
                        Return 22
                    Case Is <= 3712
                        Return 23
                    Case Is <= 4112
                        Return 24
                    Case Is <= 4304
                        Return 25
                    Case Is <= 4768
                        Return 26
                    Case Is <= 5024
                        Return 27
                    Case Is <= 5288
                        Return 28
                    Case Is <= 5608
                        Return 29
                    Case Is <= 5960
                        Return 30
                    Case Is <= 6344
                        Return 31
                    Case Is <= 6760
                        Return 32
                    Case Is <= 7208
                        Return 33
                    Case Is <= 7688
                        Return 34
                    Case Is <= 7888
                        Return 35
                    Case Is <= 8432
                        Return 36
                    Case Is <= 8768
                        Return 37
                    Case Is <= 9136
                        Return 38
                    Case Is <= 9776
                        Return 39
                    Case Is <= 10208
                        Return 40
                    Case Else
                        Return -1
                End Select
        End Select
    End Function

    Private Sub establecerColorFondoQR()
        Dim dlSeleccionColor As New ColorDialog

        dlSeleccionColor.FullOpen = True
        dlSeleccionColor.Color =
            Color.FromArgb(pColorFondo.BackColor.ToArgb)
        If dlSeleccionColor.ShowDialog =
                Windows.Forms.DialogResult.OK Then
            pColorFondo.BackColor = dlSeleccionColor.Color
            colorFondoQR = pColorFondo.BackColor.ToArgb
        End If
        dlSeleccionColor.Dispose()
    End Sub

    Private Sub establecerColorQR()
        Dim dlSeleccionColor As New ColorDialog

        dlSeleccionColor.FullOpen = True
        dlSeleccionColor.Color =
            Color.FromArgb(pColorQR.BackColor.ToArgb)

        If dlSeleccionColor.ShowDialog =
                Windows.Forms.DialogResult.OK Then
            pColorQR.BackColor = dlSeleccionColor.Color
            colorQR = pColorFondo.BackColor.ToArgb
        End If
        dlSeleccionColor.Dispose()
    End Sub

    Private Sub btColorFondo_Click(sender As System.Object,
            e As System.EventArgs) _
            Handles btColorFondo.Click, pColorFondo.Click
        establecerColorFondoQR()
    End Sub

    Private Sub btColorQR_Click(sender As System.Object,
            e As System.EventArgs) _
            Handles btColorQR.Click, pColorQR.Click
        establecerColorQR()
    End Sub

    Private Sub pColorQR_Click(sender As System.Object,
            e As System.EventArgs)
        establecerColorQR()
    End Sub

    Private Sub pColorFondo_Click(sender As System.Object,
            e As System.EventArgs)
        establecerColorFondoQR()
    End Sub

    Private Sub formLeerGenerarCodigosQR_Load(sender As System.Object,
            e As System.EventArgs) Handles MyBase.Load
        lsNivelCorreccion.SelectedIndex = 1
        txtEscalaPixel.Text = 4

        pColorFondo.BackColor = Color.FromArgb(colorFondoQR)
        pColorQR.BackColor = Color.FromArgb(colorQR)

        tabFormatoQR.SelectedTab = tabQRSMS
        txtSMSMensaje_TextChanged(sender, e)
    End Sub

    Private Sub txtSMSMensaje_TextChanged(sender As System.Object,
            e As System.EventArgs) Handles txtSMSMensaje.TextChanged,
            txtSMSNumeroTelefono.TextChanged
        txtTextoQR.Text = "SMSTO:" + txtSMSNumeroTelefono.Text +
            ":" + txtSMSMensaje.Text
    End Sub

    Private Sub txtURL_TextChanged(sender As System.Object,
            e As System.EventArgs) Handles txtURL.TextChanged
        txtTextoQR.Text = txtURL.Text
    End Sub

    Private Sub txtTextoLibre_TextChanged(sender As System.Object,
            e As System.EventArgs) Handles txtTextoLibre.TextChanged
        txtTextoQR.Text = txtTextoLibre.Text
    End Sub

    Private Sub txtNumeroTelefono_TextChanged(sender As System.Object,
            e As System.EventArgs) Handles txtNumeroTelefono.TextChanged
        txtTextoQR.Text = "TEL:" + txtNumeroTelefono.Text
    End Sub

    Private Sub txtVcardNombre_TextChanged(sender As System.Object,
            e As System.EventArgs) Handles txtVcardNombre.TextChanged,
            txtVcardURL.TextChanged, txtVcardTelefono.TextChanged,
            txtVcardMail.TextChanged, txtVcardEmpresa.TextChanged,
            txtVcardDireccion.TextChanged, txtVcardCargo.TextChanged
        txtTextoQR.Text = "BEGIN:VCARD" + vbCrLf + "N:" + txtVcardNombre.Text + _
            vbCrLf + "TITLE:" + txtVcardCargo.Text + vbCrLf + "ORG:" + _
            txtVcardEmpresa.Text + vbCrLf + "ADDR:" + txtVcardDireccion.Text + _
            vbCrLf + "TEL:" + txtVcardTelefono.Text + vbCrLf + "EMAIL:" + _
            txtVcardMail.Text + vbCrLf + "URL:" +
            txtVcardURL.Text + vbCrLf + "END:VCARD"
    End Sub

    Private Sub txtEMailDestinatario_TextChanged(sender As System.Object,
            e As System.EventArgs) Handles txtEMailDestinatario.TextChanged,
            txtEMailMensaje.TextChanged, txtEMailAsunto.TextChanged
        txtTextoQR.Text = "SMTP:" + txtEMailDestinatario.Text + _
            ":" + txtEMailAsunto.Text + ":" + txtEMailMensaje.Text
    End Sub

    Private Sub txtEventoAsunto_TextChanged(sender As System.Object,
            e As System.EventArgs) Handles txtEventoAsunto.TextChanged,
            txtEventoUbicacion.TextChanged, txtEventoHastaHora.ValueChanged,
            txtEventoHasta.ValueChanged, txtEventoDesdeHora.ValueChanged,
            txtEventoDesde.ValueChanged, txtEventoDescripcion.TextChanged
        txtTextoQR.Text = "BEGIN:VEVENT" + vbCrLf + "SUMMARY:" +
            txtEventoAsunto.Text + vbCrLf +
            "DTSTART:" +
            txtEventoDesde.Value.Year.ToString("0000") +
            txtEventoDesde.Value.Month.ToString("00") +
            txtEventoDesde.Value.Day.ToString("00") +
            "T" + txtEventoDesdeHora.Value.Hour.ToString("00") +
            txtEventoDesdeHora.Value.Minute.ToString("00") +
            "00" + vbCrLf +
            "DTEND:" + txtEventoHasta.Value.Year.ToString("0000") +
            txtEventoHasta.Value.Month.ToString("00") +
            txtEventoHasta.Value.Day.ToString("00") +
            "T" + txtEventoHastaHora.Value.Hour.ToString("00") +
            txtEventoHastaHora.Value.Minute.ToString("00") +
            "00" + vbCrLf +
            "LOCATION:" + txtEventoUbicacion.Text + vbCrLf +
            "DESCRIPTION:" + txtEventoDescripcion.Text +
            vbCrLf + "END:VEVENT"
    End Sub

    Private Sub btGenerarQR_Click(sender As System.Object,
            e As System.EventArgs) Handles btGenerarQR.Click
        If txtEscalaPixel.Text.Trim = "" Then
            MsgBox("Debe indicar la escala de los píxeles del " +
                   "QR que se generará.",
                   MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
            txtEscalaPixel.Focus()
        Else

            If Val(txtEscalaPixel.Text) = 0 Then
                txtEscalaPixel.Text = 4
            End If

            Dim generarCodigoQR As QRCodeEncoder = New QRCodeEncoder
            generarCodigoQR.QRCodeEncodeMode =
                Codec.QRCodeEncoder.ENCODE_MODE.BYTE
            generarCodigoQR.QRCodeScale = Int32.Parse(txtEscalaPixel.Text)

            Select Case lsNivelCorreccion.Text
                Case "Bajo (7%)"
                    generarCodigoQR.QRCodeErrorCorrect =
                        Codec.QRCodeEncoder.ERROR_CORRECTION.L
                Case "Medio (15%)"
                    generarCodigoQR.QRCodeErrorCorrect =
                        Codec.QRCodeEncoder.ERROR_CORRECTION.M
                Case "Alto (25%)"
                    generarCodigoQR.QRCodeErrorCorrect =
                        Codec.QRCodeEncoder.ERROR_CORRECTION.Q
                Case "Muy alto (30%)"
                    generarCodigoQR.QRCodeErrorCorrect =
                        Codec.QRCodeEncoder.ERROR_CORRECTION.H
            End Select

            'La versión "0" calcula automáticamente el tamaño
            generarCodigoQR.QRCodeVersion = 0

            '' --------- Forzar una determinada version -----------
            ''En caso de querer forzar una determinada version 
            '(tamaño) el siguiente código devuelve la
            ''versión mínima para el texto que se quiere códificar:
            'Dim iVersion As Integer = 
            '    AdjustQRVersion(TextBox1.Text, QRCodeEncoder.QRCodeErrorCorrect)
            'If iVersion = -1 Then
            '    MessageBox.Show("El texto es demasiado grande o el " +
            '        "Correction Level (ERROR_CORRECTION) no es el apropiado")
            '    Exit Sub
            'Else
            '    qrCodeEncoder.QRCodeVersion = iVersion
            'End If
            '' -----------------------------------------------------

            generarCodigoQR.QRCodeBackgroundColor =
                System.Drawing.Color.FromArgb(colorFondoQR)
            generarCodigoQR.QRCodeForegroundColor =
                System.Drawing.Color.FromArgb(colorQR)

            Try
                If opForzarUTF.Checked Then
                    'Con UTF-8 podremos añadir caracteres como ñ, tildes, etc.
                    imgQR.Image = generarCodigoQR.Encode(txtTextoQR.Text,
                                    System.Text.Encoding.UTF8)
                Else
                    imgQR.Image = generarCodigoQR.Encode(txtTextoQR.Text)
                End If
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Critical + MsgBoxStyle.OkOnly)
            End Try
        End If
    End Sub

    Private Sub txtRedWifiSSID_TextChanged(sender As System.Object,
            e As System.EventArgs) Handles txtRedWifiSSID.TextChanged,
            txtRedWifiContrasena.TextChanged, lsRedWifiTipo.TextChanged
        Dim tipoWifi As String = "nopass"
        If lsRedWifiTipo.Text = "Sin encriptación" Then
            tipoWifi = "nopass"
        End If
        If lsRedWifiTipo.Text = "WPA/WPA2" Then
            tipoWifi = "WPA"
        End If
        If lsRedWifiTipo.Text = "WEP" Then
            tipoWifi = "WEP"
        End If
        txtTextoQR.Text = "WIFI:S:" + txtRedWifiSSID.Text + ";T:" +
            tipoWifi + ";P:" + txtRedWifiContrasena.Text + ";;"
    End Sub

    Private Sub txtGeoLatitud_TextChanged(sender As System.Object,
            e As System.EventArgs) Handles txtGeoLatitud.TextChanged,
            txtGeoLongitud.TextChanged, txtGeoConsulta.TextChanged
        txtTextoQR.Text = "geo:" + txtGeoLatitud.Text + "," +
            txtGeoLongitud.Text + "?=" + txtGeoConsulta.Text
    End Sub


    Private Sub btGuardarQR_Click(sender As System.Object,
            e As System.EventArgs) Handles btGuardarQR.Click
        Dim dlGuardar As New SaveFileDialog

        If IsNothing(imgQR.Image) Then
            MsgBox("No se ha generado el Código QR. Antes de guardar " +
                   "debe generar un código QR.",
                   MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly)
        Else
            dlGuardar.Filter = "JPEG|*.jpg|Mapa de Bits|*.bmp|Gif|*.gif|PNG|*.png"
            dlGuardar.Title = "Guardar código QR"
            dlGuardar.FileName = "codigo_qr"
            dlGuardar.ShowDialog()
            If (dlGuardar.FileName <> "") Then
                Select Case dlGuardar.FilterIndex
                    Case 1
                        imgQR.Image.Save(dlGuardar.FileName,
                            System.Drawing.Imaging.ImageFormat.Jpeg)
                    Case 2
                        imgQR.Image.Save(dlGuardar.FileName,
                            System.Drawing.Imaging.ImageFormat.Bmp)
                    Case 3
                        imgQR.Image.Save(dlGuardar.FileName,
                            System.Drawing.Imaging.ImageFormat.Gif)
                    Case 4
                        imgQR.Image.Save(dlGuardar.FileName,
                            System.Drawing.Imaging.ImageFormat.Png)
                End Select
            End If
        End If
    End Sub

    Private Sub btImprimirQR_Click(sender As System.Object,
                e As System.EventArgs) Handles btImprimirQR.Click
        If IsNothing(imgQR.Image) Then
            MsgBox("No se ha generado el Código QR. Antes de " +
                   "imprimir debe generar un código QR.",
                   MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly)
        Else
            dlImprimir.Document = imprimirDoc
            If dlImprimir.ShowDialog = Windows.Forms.DialogResult.OK Then
                imprimirDoc.Print()
            End If
        End If
    End Sub

    Private Sub PrintDocument1_PrintPage(sender As System.Object,
          e As System.Drawing.Printing.PrintPageEventArgs) _
              Handles imprimirDoc.PrintPage
        e.Graphics.DrawImage(imgQR.Image, 0, 0)
    End Sub

    Private Sub btSelImagenQR_Click(sender As System.Object,
            e As System.EventArgs) Handles btSelImagenQR.Click
        Dim dlAbrirImagenQR As New OpenFileDialog

        dlAbrirImagenQR.InitialDirectory =
            My.Computer.FileSystem.SpecialDirectories.MyPictures
        dlAbrirImagenQR.Filter = "*.bmp;*.gif;*.jpg;*.png|*.bmp;*.gif;*.jpg;*.png"
        dlAbrirImagenQR.RestoreDirectory = True
        dlAbrirImagenQR.CheckFileExists = True
        dlAbrirImagenQR.CheckPathExists = True
        If dlAbrirImagenQR.ShowDialog = Windows.Forms.DialogResult.OK Then
            txtLeerQRImagen.Text = dlAbrirImagenQR.FileName
        End If
    End Sub

    Private Sub btDecodificarImagenQR_Click(sender As System.Object,
            e As System.EventArgs) Handles btDecodificarImagenQR.Click
        If IsNothing(imgQRExistente.Image) Then
            MsgBox("Antes de decodificar una imagen QR a su texto " +
                   "correspondiente QR Code debe seleccionar la imagen.",
                   MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly)
            btSelImagenQR.Focus()
        Else
            Try
                Dim decoder As QRCodeDecoder = New QRCodeDecoder
                If opLeerForzarUTF8.Checked Then
                    txtLeerQRTexto.Text =
                        decoder.decode(New QRCodeBitmapImage( _
                                       New Bitmap(imgQRExistente.Image)),
                                   System.Text.Encoding.UTF8)
                Else
                    txtLeerQRTexto.Text =
                        decoder.decode(New QRCodeBitmapImage( _
                                       New Bitmap(imgQRExistente.Image)))
                End If
            Catch ex As Exception
                MsgBox(ex.Message,
                       MsgBoxStyle.Critical + MsgBoxStyle.OkOnly)
            End Try
        End If
    End Sub

    Private Sub txtLeerQRImagen_TextChanged(sender As System.Object,
            e As System.EventArgs) Handles txtLeerQRImagen.TextChanged
        If System.IO.File.Exists(txtLeerQRImagen.Text) Then
            imgQRExistente.Image = New Bitmap(txtLeerQRImagen.Text)
        End If
    End Sub

    Private Sub tabFormatoQR_SelectedIndexChanged(sender As System.Object, _
               e As System.EventArgs) Handles tabFormatoQR.SelectedIndexChanged
        If tabFormatoQR.SelectedTab Is tabQRSMS Then
            txtSMSMensaje_TextChanged(sender, e)
        End If

        If tabFormatoQR.SelectedTab Is tabQRURL Then
            txtURL_TextChanged(sender, e)
        End If

        If tabFormatoQR.SelectedTab Is tabQRTexto Then
            txtTextoLibre_TextChanged(sender, e)
        End If

        If tabFormatoQR.SelectedTab Is tabQRNumeroTelefono Then
            txtNumeroTelefono_TextChanged(sender, e)
        End If

        If tabFormatoQR.SelectedTab Is tabQRVcard Then
            txtVcardNombre_TextChanged(sender, e)
        End If

        If tabFormatoQR.SelectedTab Is tabQRMAIL Then
            txtEMailDestinatario_TextChanged(sender, e)
        End If

        If tabFormatoQR.SelectedTab Is tabQREvento Then
            txtEventoAsunto_TextChanged(sender, e)
        End If

        If tabFormatoQR.SelectedTab Is tabQRRedWifi Then
            txtRedWifiSSID_TextChanged(sender, e)
        End If

        If tabFormatoQR.SelectedTab Is tabQRGeolocalizacion Then
            txtGeoLatitud_TextChanged(sender, e)
        End If
    End Sub

    Private Sub linkURL_LinkClicked(sender As System.Object, _
                e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) _
                Handles linkURL.LinkClicked
        System.Diagnostics.Process.Start("http://www.ajpdsoft.com")
    End Sub
End Class

AjpdSoft Generador y lector códigos QR en funcionamiento

Generar códigos QR con AjpdSoft Generador y lector códigos QR

Tras ejecutar AjpdSoft Generador y Lector códigos QR, para generar un código de barras QR pulsaremos en la pestaña "Generar QR". Podremos generar un código QR con un formato determinado para enviar un SMS, indicar una URL (dirección de página web), un texto variable (libre), para hacer una llamada a un número de teléfono, para insertar un contacto en la agenda del teléfono móvil, para enviar un correo electrónico, para insertar un evento o cita en nuestro calendario, para conectarnos a una red wifi, para acceder a un lugar. Para generar un QR con cualquiera de estos formatos pulsaremos en la pestaña apropiada, por ejemplo, para insertar una cita en el calendario del teléfono móvil pulsaremos en la ficha "Evento", introduciremos los datos (asunto, ubicación, desde, hasta, descripción) y, en la pestaña "Texto QR" podremos ir viendo el texto que se generará en el QR:

AjpdSoft Generador y lector códigos QR en funcionamiento

Cuando tengamos el texto introducido pulsaremos en la ficha "QR", podremos elegir el nivel de corrección (por defecto Medio 15%), el color de fondo para el QR, el color del propio QR (no deben ser el mismo ni colores muy "difuminados", de lo contrario no podrá leerse el QR), la escala del pixel (por defecto 4) y si queremos forzar UTF-8. Una vez elegidas las opciones de configuración pulsaremos en el botón "Generar QR":

AjpdSoft Generador y lector códigos QR en funcionamiento

Si todo es correcto se generará el código QR en la parte inferior de AjpdSoft Generador y Lector códigos QR. Si queremos guardar el código QR generado en un fichero de imagen pulsaremos en el botón "Guardar QR":

AjpdSoft Generador y lector códigos QR en funcionamiento

Seleccionaremos la carpeta y el nombre para el fichero de imagen así como el formato en el que queramos guardarlo en "Tipo": JPEG, BMP, GIF ó PNG y pulsaremos "Guardar":

AjpdSoft Generador y lector códigos QR en funcionamiento

Si queremos imprimir el código QR Quick Response Barcode en papel o en una impresora PDF pulsaremos en "Imprimir QR":

AjpdSoft Generador y lector códigos QR en funcionamiento

Seleccionaremos la impresora y pulsaremos "Imprimir":

AjpdSoft Generador y lector códigos QR en funcionamiento

Leer y decodificar código QR de imagen con AjpdSoft Generador y Lector códigos QR

Tras ejecutar AjpdSoft Generador y Lector códigos QR, para decodificar o leer el contenido de un código de barras QR ya generado y guardado en imagen pulsaremos en la pestaña "Leer QR ". Podremos decodificar cualquier tipo de código QR, pulsaremos en el botón de selección de fichero con código QR:

Leer y decodificar código QR de imagen con AjpdSoft Generador y Lector códigos QR

Seleccionaremos el fichero que contiene el código QR y pulsremos "Abrir":

Leer y decodificar código QR de imagen con AjpdSoft Generador y Lector códigos QR

Se mostrará en la parte inferior, para decodificarlo pulsaremos en el botón "Leer QR":

Leer y decodificar código QR de imagen con AjpdSoft Generador y Lector códigos QR

Si es un código QR correcto en la parte inferior, en "Texto resultante" mostrará el texto contenido y decodificado del QR seleccionado:

Leer y decodificar código QR de imagen con AjpdSoft Generador y Lector códigos QR

Escanear códigos QR con smartphone Samsung Galaxy SII y aplicación QR Droid

Para decodificar o leer códigos QR de carteles u otros medios impresos (incluso de pantallas de PC o televisión) con un dispositivo móvil smartphone (Android o iPhone) o Tablet PC instalaremos alguna aplicación de las existentes en el mercado. En este ejemplo usaremos un móvil smartphone Samsung Galaxy SII y un LG Optimux 2x, el procedimiento es el mismo prácticamente para cualquier móvil con Android como sistema operativo y también parecido para móviles con iOS (iPhone). Accederemos a Market (en el caso de móviles con Android) o a App Store (en el caso de iPhone con iOS), buscaremos la aplicación a instalar. En este ejemplo buscaremos QR Droid, aplicación gratutia (con publicidad) para escanear códigos QR:

Escanear códigos QR con smartphone Samsung Galaxy SII y aplicación QR Droid

Pulsaremos en "Aceptar y descargar":

Escanear códigos QR con smartphone Samsung Galaxy SII y aplicación QR Droid

Se iniciará la descarga e instalación de la aplicación para escanear códigos QR desde nuestro móvil:

Escanear códigos QR con smartphone Samsung Galaxy SII y aplicación QR Droid

Tras la instalación, pulsaremos "Abrir" para ejecutar la aplicación QR Droid:

Escanear códigos QR con smartphone Samsung Galaxy SII y aplicación QR Droid

La aplicación para leer códigos QR en Samsung Galaxy SII nos mostrará un mensaje inicial co nel texto:

QR Droid te permite usar tu cámara para escanear un código QR de una revista y mirar un vídeo de inmediato. O crear un código de cun contacto de tu móvil, dejar que un amigo lo escanee y compartir esa información.

Pulsaremos en "Cerrar":

Escanear códigos QR con smartphone Samsung Galaxy SII y aplicación QR Droid

Para escaner un código QR de una revista, cartel, panfleto de publicidad, televisión, monitor de PC o desde la pantalla de otro móvil pulsaremos en la sopala "Escanear" y en "De la cámara":

Escanear códigos QR con smartphone Samsung Galaxy SII y aplicación QR Droid

La aplicación usará la cámara de fotos para leer el código QR. Situaremos el código QR a escanear en el centro del recuadro que se muestra en la cámara de fotos y, cuando lo detecte la aplicación, lo decodificará automáticamente:

Escanear códigos QR con smartphone Samsung Galaxy SII y aplicación QR Droid

En el ejemplo hemos escaneado un código QR de la pantalla del PC para insetar un evento en nuestro calendario del móvil:

Escanear códigos QR con smartphone Samsung Galaxy SII y aplicación QR Droid

En el caso de la aplicación QR Droid, detecta el tipo de código QR (según el texto que contenga) y, como en este caso es un evento o cita, nos mustra el botón "Añadir", si pulsamos podremos añadir una cita en Google Calendar de forma automática:

Escanear códigos QR con smartphone Samsung Galaxy SII y aplicación QR Droid

El evento o cita quedará guardado en nuestro calendario sin haber tecleado nada, todo de forma automática gracias a los códigos QR. De la misma forma podremos añadir contactos, enviar SMS, hacer una llamada, acceder a un lugar, conectarnos a una red wifi, enviar un correo electrónico, etc. usando códigos QR:

Escanear códigos QR con smartphone Samsung Galaxy SII y aplicación QR Droid

Artículos relacionados

Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del Proyecto AjpdSoft.

Artículo en inglés.


Anuncios


Enviado el Viernes, 06 enero a las 14:55:25 por ajpdsoft
Este sitio web NO CONTIENE malware, todos los programas con código fuente aquí. Autor: Alonso Javier Pérez Díaz Google+ Síguenos en Google+