.NET

9 dez, 2014

VB .NET – Gerando, salvando e lendo QRCode

Publicidade

Neste artigo vou mostrar como gerar, salvar e decodificar código QR (Quick Response) ou QRCode usando a linguagem VB .NET.

O Código QR (sigla do inglês Quick Response) é um código de barras bidimensional que pode ser facilmente escanerizado usando a maioria dos telefones celulares equipados com câmera. Esse código é convertido em texto (interativo), um endereço URI, um número de telefone, uma localização georreferenciada, um e-mail, um contato ou um SMS.

Inicialmente empregado para catalogar peças na produção de veículos, hoje o QR Code é usado no gerenciamento de inventário e controle de estoque em indústrias e comércio. Desde 2003, foram desenvolvidas aplicações que ajudam usuários a inserir dados em telefone celular usando a câmera do aparelho. Os códigos QR são comuns também em revistas e propagandas, para registrar endereços e URLs, bem como informações pessoais detalhadas. Em cartões de visita, por exemplo, o código QR facilita muito a inserção desses dados em agendas de telefones celulares. Programas de captura ou PCs com interface RS-232C podem usar um escâner para capturar as imagens.

O padrão japonês para o código QR, JIS X 0510, foi lançado em janeiro de 1999 e corresponde ao padrão internacional ISO/IEC 18004, tendo sido aprovado em junho de 2000. Segundo o site da Denso-Wave, o “código QR é aberto para uso e sua patente, pela Denso-Wave, não é praticada” (fonte: http://pt.wikipedia.org/wiki/C%C3%B3digo_QR).

O QR Code também pode ser usado para adicionar dados num formato de cartão de visita em aparelhos celulares. Para criar o seu próprio QR Code, você pode baixar programas prontos ou pode usar serviços gratuitos disponibilizados em sites. Existem diversos sites que tratam QRCode como este QR Code Monkey ou o E-lemento.

Neste artigo eu vou gerar, salvar e decodificar códigos QR usando a linguagem Visual Basic .NET e mostrando também a versão para a linguagem C#.

Recursos usados:

  • Visual Studio Express 2013 for Windows desktop
  • Biblioteca Qr Code Library (via Nuget)

Criando o projeto no Visual Studio 2013 Express

Abra o VS Express 2013 for Windows desktop e clique em New Project. A seguir, selecione a linguagem Visual Basic e o template Windows Forms Application.

Informe o nome Geranciado_QRCode e clique no botão OK:

vbn_qrcd11

Vamos incluir uma referência a biblioteca Qr Code Library em nosso projeto usando o Nuget.

Para isso, clique no menu TOOLS e a seguir selecione Library Package Manager -> Manage Nuget Packages for Solution.

vbn_qrcd12

A seguir, vamos procurar localizar a biblioteca Qr Code library e a seguir clicar no botão Install:

vbn_qrcd13

Confirme a instalação e após o término do processo, clique no botão Close.

Na janela Solution Explorer você deverá ver a referência a biblioteca : MessagingToolkit.QRCode:

vbn_qrcd14

A seguir vamos definir a interface com o usuário.

A partir da ToolBox, inclua os seguinte controles no formulário form1.vb:

  • 1 PictureBox – Name=picImage, SizeMode=CenterImage
  • 1 Label – Text=URL
  • 1 TextBox – Name=txtUrl
  • 5 TextBox – btnSair, btnLerQRCode, btnSalvarQRCode, btnCarregarQRCode e btnGerarQRCode
  • 1 TextBox – Name= txtQRCode

Disponha os controles conforme o leiaute da figura abaixo:

vbn_qrcd16

Precisamos definir as declarações ao namespaces da biblioteca Qr Code library no formulário. Para isso vamos declarar:

Imports MessagingToolkit.QRCode.Codec
 Imports MessagingToolkit.QRCode.Codec.Data

Agora vamos definir o código no evento Click de cada um dos botões de comando do formulário:

1. Gerar QRCode

Private Sub btnGerarQRCode_Click(sender As Object, e As EventArgs) Handles btnGerarQRCode.Click
        If Not String.IsNullOrWhiteSpace(txtUrl.Text) Then
            Try
                tamanhoNormaldoForm()
                Dim url As String = txtUrl.Text
                Dim qrencod As New QRCodeEncoder()
                Dim qrcode As Bitmap = qrencod.Encode(url)
                picImagem.Image = TryCast(qrcode, Image)
            Catch ex As Exception
                MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        Else
            MessageBox.Show("Informe uma texto para gerar o QRCode", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    End Sub

O código cria uma instância da classe QRCodeEncoder() e usa o método Encode() para gerar o QRCode, exibindo-o no controle PictureBox- picImagem.

2. Salvar QRCode

Private Sub btrnSalvarQRCode_Click(sender As Object, e As EventArgs) Handles btrnSalvarQRCode.Click
        If Not IsNothing(picImagem.Image) Then
            Try
                tamanhoNormaldoForm()
                Dim sfd As New SaveFileDialog()
                sfd.InitialDirectory = "c:\QrCode\"
                sfd.Filter = "PNG | *.png| JPEG| *.jpg | BMP| *.bmp"
                If sfd.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
                    picImagem.Image.Save(sfd.FileName)
                End If
            Catch ex As Exception
                MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        Else
            MessageBox.Show("Não existem imagem QRCode", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    End Sub

O código apenas salva a imagem QRCode gerada.

3. Carregar QRCode

Private Sub btnCarregarQRCode_Click(sender As Object, e As EventArgs) Handles btnCarregarQRCode.Click
        Try
            tamanhoNormaldoForm()
            Dim ofd As New OpenFileDialog()
            ofd.InitialDirectory = "c:\QrCode\"
            If ofd.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
                picImagem.ImageLocation = ofd.FileName
            End If
        Catch ex As Exception
            MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

Neste código podemos carregar uma imagem de um QRCode gerado na pasta c:\QRCode.

4.\Q Ler QRCode

Private Sub btnLerQRCode_Click(sender As Object, e As EventArgs) Handles btnLerQRCode.Click
        If Not IsNothing(picImagem.Image) Then
            Try
                Me.Width = 692
                Me.Height = 352
                Dim decoder As New QRCodeDecoder()
                txtQrCode.Text = decoder.Decode(New QRCodeBitmapImage(TryCast(picImagem.Image, Bitmap)))
            Catch ex As Exception
                MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
            End Try
        Else
            MessageBox.Show("Selecione a imagem QRCode para decodificar", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    End Sub

O código cria uma instância da classe QRCodeDecoder() e usa o método Decode() para interpretar a imagem QRCode, exibindo o resultado.

5. Sair

Private Sub btnSair_Click(sender As Object, e As EventArgs) Handles btnSair.Click
        Me.Close()
    End Sub

6. Rotina tamanhoNormaldoForm() que define o tamanho normal do formulário form1.vb:

Private Sub tamanhoNormaldoForm()
        Me.Width = 499
        Me.Height = 352
    End Sub

Agora podemos executar o projeto e verificar o resultado.

Gerando e salvando QRCode:

vbn_qrcd17

Carregando e lendo um QRCode existente:

vbn_qrcd18

Pegue o projeto completo aqui: