C# Gerador de código QR Application

This article was translated from English: Does it need improvement?
Translated
View the article in English

Bem-vindo ao nosso guia sobre como criar códigos QR usando C#! Os códigos QR e as DLLs de código de barras .NET tornaram-se formas populares de compartilhar informações de maneira rápida e eficiente. Seja para desenvolver um aplicativo, gerenciar um site ou simplesmente encontrar uma maneira prática de compartilhar links, esses códigos podem ser incrivelmente úteis. Neste guia, demonstraremos como gerar códigos QR de forma eficiente usando o IronQR , garantindo que você possa gerar códigos QR personalizados para suas necessidades. Esta biblioteca facilita a criação de códigos QR para qualquer pessoa que trabalhe com C#, sem a necessidade de se aprofundar em lógica complexa. Vamos orientá-lo(a) em cada etapa, garantindo que você tenha tudo o que precisa para começar. Se você deseja adicionar a funcionalidade de geração de código QR ao seu aplicativo ou apenas tem curiosidade de saber como isso é feito, você está no lugar certo. Vamos começar.

Install Gerador de código QR Library in C

!{--010011000100100101000010010100100100000101010010010110010101111101010011010101000100000101010010010101000101111101010001010010010010010010100000101001100010111110100001001001100010011110100001101001011--}


Antes de começarmos, precisamos instalar o pacote NuGet IronQR.

Install-Package IronQR

IronQR: Biblioteca QR em C

IronQR é uma biblioteca C# para códigos QR que permite integrar a funcionalidade de códigos QR em aplicações .NET . O IronQR oferece suporte a uma ampla variedade de versões do .NET e tipos de projeto, incluindo C#, VB .NET, F#, .NET Core, .NET Standard, .NET Framework e muito mais, garantindo compatibilidade com diversos ambientes de desenvolvimento, como Windows, Linux, macOS, iOS e Android.

O IronQR se destaca por seus recursos avançados, incluindo a capacidade de ler e gerar códigos QR , suporte a múltiplos formatos de imagem e opções de personalização como redimensionamento, estilização e adição de logotipos aos códigos QR.

Algumas características principais do IronQR

O IronQR amplia sua funcionalidade além da geração básica de códigos QR, oferecendo diversos recursos projetados para atender a uma ampla gama de tarefas relacionadas a códigos QR. Vamos analisar esses recursos e verificar seus exemplos de código, que você poderá integrar em qualquer tipo de modelo de aplicativo .NET, como um aplicativo de console.

Leia os códigos QR

O IronQR se destaca na decodificação de códigos QR, proporcionando aos usuários uma maneira simples de acessar as informações contidas neles. Você pode extrair dados de códigos QR de forma rápida e precisa, desde URLs simples até informações complexas incorporadas.

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-1.cs
using IronQr;
using IronSoftware.Drawing;
using System;
using System.Collections.Generic;

IronQr.License.LicenseKey = "License-Key";

// Load the image file that contains the QR Code
var inputImage = AnyBitmap.FromFile("QRCode.png");

// Prepare the image for QR code detection
QrImageInput qrInput = new QrImageInput(inputImage);

// Initialize the QR Code reader
QrReader qrReader = new QrReader();

// Execute QR Code reading on the provided image
IEnumerable<QrResult> qrResults = qrReader.Read(qrInput);

// Assuming you have the QR results in qrResults as before
foreach (var result in qrResults)
{
    Console.WriteLine(result.Value); // Print the QR code content to the console
}
Imports IronQr
Imports IronSoftware.Drawing
Imports System
Imports System.Collections.Generic

IronQr.License.LicenseKey = "License-Key"

' Load the image file that contains the QR Code
Dim inputImage = AnyBitmap.FromFile("QRCode.png")

' Prepare the image for QR code detection
Dim qrInput As New QrImageInput(inputImage)

' Initialize the QR Code reader
Dim qrReader As New QrReader()

' Execute QR Code reading on the provided image
Dim qrResults As IEnumerable(Of QrResult) = qrReader.Read(qrInput)

' Assuming you have the QR results in qrResults as before
For Each result In qrResults
	Console.WriteLine(result.Value) ' Print the QR code content to the console
Next result
$vbLabelText   $csharpLabel

O processo começa com a incorporação dos namespaces necessários: IronQr e IronSoftware.Drawing, com menção específica de Color do namespace IronSoftware.Drawing para lidar com manipulações de imagem.

Antes de iniciar o processo de leitura do código QR, é essencial ativar o software com sua chave de licença, atribuindo-a a IronQr.License.LicenseKey. O código então procede ao carregamento da imagem do código QR de um arquivo usando AnyBitmap.FromFile("QRCode.png").

Com a imagem carregada, o próximo passo envolve prepará-la para a detecção do código QR. Essa preparação é feita através da criação de um objeto QrImageInput, que serve como um contêiner para a imagem.

O núcleo dessa funcionalidade reside na classe QrReader, que é instanciada e usada para realizar a operação de leitura do código QR. O leitor analisa a imagem preparada, procurando por quaisquer códigos QR que ela contenha. O resultado dessa operação é uma coleção de objetos QrResult, cada um representando um código QR detectado na imagem.

Para acessar e utilizar os dados codificados nos códigos QR, o código itera sobre a coleção de resultados usando um loop foreach. Cada objeto QrResult contém propriedades como o valor do código QR, que pode ser acessado e exibido.

Opções personalizadas do modo de leitura de QR Code

O IronQR oferece diferentes modos de leitura de códigos QR, tornando-o versátil para diversas necessidades.

  • Modo de leitura mista : equilibra velocidade e precisão, útil para códigos QR que não sejam claros ou estejam parcialmente ocultos.
  • Modo de leitura por aprendizado de máquina (ML) : Utiliza tecnologia avançada para ler códigos QR danificados ou de difícil leitura, ideal para cenários de detecção complexa.
  • Modo de leitura básica : A maneira mais simples e rápida de obter códigos QR claros e diretos.
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-2.cs
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using System.Collections.Generic;

IronQr.License.LicenseKey = "License-Key";

// Load the image file that contains the QR Code
var inputImage = AnyBitmap.FromFile("QRCode.png");

QrImageInput mixedScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mixedScanResults = new QrReader().Read(mixedScanInput);

QrImageInput mlScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mlScanResults = new QrReader().Read(mlScanInput);

QrImageInput basicScanInput = new QrImageInput(inputImage, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> basicScanResults = new QrReader().Read(basicScanInput);
Imports IronQr
Imports IronQr.Enum
Imports IronSoftware.Drawing
Imports System.Collections.Generic

IronQr.License.LicenseKey = "License-Key"

' Load the image file that contains the QR Code
Dim inputImage = AnyBitmap.FromFile("QRCode.png")

Dim mixedScanInput As New QrImageInput(inputImage, QrScanMode.OnlyDetectionModel)
Dim mixedScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(mixedScanInput)

Dim mlScanInput As New QrImageInput(inputImage, QrScanMode.OnlyDetectionModel)
Dim mlScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(mlScanInput)

Dim basicScanInput As New QrImageInput(inputImage, QrScanMode.OnlyBasicScan)
Dim basicScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(basicScanInput)
$vbLabelText   $csharpLabel

Leia códigos QR avançados

Os recursos avançados de leitura de código QR do IronQR oferecem uma abordagem abrangente para a leitura e decodificação de códigos QR. Este conjunto de funcionalidades vai além da leitura básica, oferecendo um nível mais profundo de interação e extração de dados.

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-3.cs
using IronQr;
using IronSoftware.Drawing;
using System;
using System.Collections.Generic;

IronQr.License.LicenseKey = "License-Key";

var imageToScan = AnyBitmap.FromFile("QRCode.png");

QrImageInput qrInput = new QrImageInput(imageToScan);

QrReader qrScanner = new QrReader();

IEnumerable<QrResult> scanResults = qrScanner.Read(qrInput);

foreach (QrResult qrResult in scanResults)
{

    Console.WriteLine(qrResult.Value);

    Console.WriteLine(qrResult.Url);

    foreach (IronSoftware.Drawing.PointF coordinate in qrResult.Points)
    {
        Console.WriteLine($"{coordinate.X}, {coordinate.Y}");
    }
}
Imports IronQr
Imports IronSoftware.Drawing
Imports System
Imports System.Collections.Generic

IronQr.License.LicenseKey = "License-Key"

Dim imageToScan = AnyBitmap.FromFile("QRCode.png")

Dim qrInput As New QrImageInput(imageToScan)

Dim qrScanner As New QrReader()

Dim scanResults As IEnumerable(Of QrResult) = qrScanner.Read(qrInput)

For Each qrResult As QrResult In scanResults

	Console.WriteLine(qrResult.Value)

	Console.WriteLine(qrResult.Url)

	For Each coordinate As IronSoftware.Drawing.PointF In qrResult.Points
		Console.WriteLine($"{coordinate.X}, {coordinate.Y}")
	Next coordinate
Next qrResult
$vbLabelText   $csharpLabel

Para criar um gerador de código QR usando a biblioteca IronQR em uma aplicação C#, siga estes passos cuidadosamente. Este guia irá orientá-lo na configuração de um aplicativo Windows Forms, na instalação da biblioteca IronQR , na escrita do código para gerar um código QR e na compreensão da saída.

Passo 1: Criar um aplicativo Windows no Visual Studio

  1. Comece executando o Visual Studio no seu computador.
  2. Clique no botão "Criar um novo projeto".
  3. Selecione Aplicativo do Windows Forms como o tipo de projeto. Certifique-se de escolher C# como linguagem.

    Aplicativo Windows Forms

  4. Insira um nome para o seu projeto e selecione o local para salvá-lo. Em seguida, na tela seguinte, selecione .NET Framework. Em seguida, clique em Criar .

    Configuração do Projeto

Passo 2: Instale a biblioteca IronQR

Agora é hora de instalar a biblioteca IronQR no projeto. Você pode instalar a biblioteca IronQR por meio de diferentes métodos.

Instale usando o Gerenciador de Pacotes NuGet

  1. Clique com o botão direito do mouse no seu projeto no Solution Explorer e selecione Gerenciar Pacotes NuGet .
  2. Digite IronQR na caixa de pesquisa e pressione Enter . Gerenciar Pacotes NuGet
  3. Encontre o IronQR na lista e clique em Instalar ao lado dele.

    Instalar IronQR

Instale usando o Console do Gerenciador de Pacotes NuGet

  • Acesse Ferramentas > Gerenciador de Pacotes NuGet > Console do Gerenciador de Pacotes .
    Gerenciador de Pacotes NuGet
  • Digite Install-Package IronQr e pressione Enter.
  • Instale o IronQR

    Etapa 3: Projetar o Frontend

    Gerador de código QR

    3.1 Cabeçalho do título

    Gerar um código QR

    Ao iniciar o aplicativo Gerador de Código QR, os usuários são imediatamente apresentados a um cabeçalho impactante intitulado "QR Generator IronQR", em uma fonte ousada e imponente.

    3.2 Seção de Entrada

    Entrada de texto para código QR

    Os usuários podem inserir os dados que desejam codificar em seu código QR.

    Seleção de logotipo

    Selecione o logotipo

    A área "Selecionar logotipo" permite uma camada adicional de personalização. Os usuários podem fazer o upload de um logotipo que será incorporado ao código QR.

    Configuração de cores

    Cor de fundo

    Os botões de seleção de cores permitem que os usuários personalizem a paleta de cores do seu código QR.

    3.3 Parâmetros de Estilização

    Estilização

    Configurações de dimensão

    Permite aos usuários especificar o tamanho total do código QR.

    Configurações de margem

    Permite aos usuários especificar o espaço em branco ao redor do código QR.

    3.4 Pré-visualização da saída

    Fornece uma pré-visualização em tempo real do código QR gerado.

    Saída QR

    3.5 Botões de ação

    Gerar QR

    Inicia o processo de criação do código QR.

    Código QR em C#

    Salvar código QR

    Abre uma caixa de diálogo para salvar o código QR.

    Economize

    Redefinir formulário

    Apaga todas as entradas e seleções anteriores.

    Reiniciar

    Etapa 4: Escrever a lógica de backend

    4.1 Configuração e Inicialização

    Inclui os namespaces necessários: IronQr e IronSoftware.Drawing.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-4.cs
    using IronQr;
    using IronSoftware.Drawing;
    using Color = IronSoftware.Drawing.Color;
    
    
    Imports IronQr
    Imports IronSoftware.Drawing
    Imports Color = IronSoftware.Drawing.Color
    $vbLabelText   $csharpLabel
    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-5.cs
    public QR_Generator()
    {
        InitializeComponent();
        SetLicenseKey();
        EnsureDirectoryExists(qrCodesDirectory);
    }
    'INSTANT VB WARNING: The following constructor is declared outside of its associated class:
    'ORIGINAL LINE: public QR_Generator()
    Public Sub New()
    	InitializeComponent()
    	SetLicenseKey()
    	EnsureDirectoryExists(qrCodesDirectory)
    End Sub
    $vbLabelText   $csharpLabel

    4.2 Configuração da chave de licença

    Aplica uma chave de licença válida para a biblioteca IronQR :

    private static void SetLicenseKey() {
        IronQr.License.LicenseKey = "YOUR_LICENSE_KEY";
    }
    private static void SetLicenseKey() {
        IronQr.License.LicenseKey = "YOUR_LICENSE_KEY";
    }
    Private Shared Sub SetLicenseKey()
    	IronQr.License.LicenseKey = "YOUR_LICENSE_KEY"
    End Sub
    $vbLabelText   $csharpLabel

    Substitua "YOUR_LICENSE_KEY" pela sua chave de licença real.

    4.3 Gerenciamento de diretórios

    Verifica ou cria os diretórios necessários.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-7.cs
    private static void EnsureDirectoryExists(string path)
    {
        if (!System.IO.Directory.Exists(path))
        {
            System.IO.Directory.CreateDirectory(path);
        }
    }
    Private Shared Sub EnsureDirectoryExists(ByVal path As String)
    	If Not System.IO.Directory.Exists(path) Then
    		System.IO.Directory.CreateDirectory(path)
    	End If
    End Sub
    $vbLabelText   $csharpLabel

    O caminho para o diretório de códigos QR é definido no construtor da classe QR_Generator como qrCodesDirectory, que combina o caminho de inicialização do aplicativo com o nome da pasta "Códigos QR":

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-8.cs
    string qrCodesDirectory = System.IO.Path.Combine(Application.StartupPath, "QR Codes");
    Dim qrCodesDirectory As String = System.IO.Path.Combine(Application.StartupPath, "QR Codes")
    $vbLabelText   $csharpLabel

    4.4 Seleção de Cores

    Fornece componentes de diálogo coloridos e funções utilitárias.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-9.cs
    private string ColorToHex(System.Drawing.Color color)
    {
        return $"#{color.R:X2}{color.G:X2}{color.B:X2}";
    }
    Private Function ColorToHex(ByVal color As System.Drawing.Color) As String
    	Return $"#{color.R:X2}{color.G:X2}{color.B:X2}"
    End Function
    $vbLabelText   $csharpLabel

    O método UpdateColor pega a cor selecionada e a converte para o formato IronSoftware.Drawing.Color usando a string hexadecimal, e atualiza a cor de primeiro plano ou de fundo do código QR dependendo da seleção. A interface do usuário também é atualizada para refletir a nova escolha de cores:

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-10.cs
    private void UpdateColor(ref Color targetColor, Control display, bool isBackground)
    {
        if (select_color.ShowDialog() == DialogResult.OK)
        {
            var hexColor = ColorToHex(select_color.Color);
            targetColor = new Color(hexColor);
            display.BackColor = select_color.Color;
        }
    }
    Private Sub UpdateColor(ByRef targetColor As Color, ByVal display As Control, ByVal isBackground As Boolean)
    	If select_color.ShowDialog() = DialogResult.OK Then
    		Dim hexColor = ColorToHex(select_color.Color)
    		targetColor = New Color(hexColor)
    		display.BackColor = select_color.Color
    	End If
    End Sub
    $vbLabelText   $csharpLabel

    4.5 Adicionando um logotipo

    Permite ao usuário selecionar um logotipo.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-11.cs
    private void btn_logo_Click(object sender, EventArgs e)
    {
        if (select_logo.ShowDialog() == DialogResult.OK)
        {
            try
            {
                logoBmp = new AnyBitmap(select_logo.FileName);
                selected_logo.Image = Image.FromFile(select_logo.FileName);
            }
            catch (Exception ex)
            {
                ShowError("An error occurred while loading the logo", ex.Message);
            }
        }
    }
    Private Sub btn_logo_Click(ByVal sender As Object, ByVal e As EventArgs)
    	If select_logo.ShowDialog() = DialogResult.OK Then
    		Try
    			logoBmp = New AnyBitmap(select_logo.FileName)
    			selected_logo.Image = Image.FromFile(select_logo.FileName)
    		Catch ex As Exception
    			ShowError("An error occurred while loading the logo", ex.Message)
    		End Try
    	End If
    End Sub
    $vbLabelText   $csharpLabel

    4.6 Geração de código QR

    Contém a lógica para gerar códigos QR com base nas informações inseridas pelo usuário.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-12.cs
    private void btn_generate_Click(object sender, EventArgs e)
    {
        GenerateQRCode();
    }
    Private Sub btn_generate_Click(ByVal sender As Object, ByVal e As EventArgs)
    	GenerateQRCode()
    End Sub
    $vbLabelText   $csharpLabel

    O objeto QrOptions define o nível de correção de erros, aumentando a resistência do código QR a danos ou ocultação. O método CreateStyleOptions gera um objeto QrStyleOptions, que inclui as configurações personalizadas do usuário, como cores, dimensões e o logotipo. Segue o método em detalhes:

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-14.cs
    private QrStyleOptions CreateStyleOptions()
    {
        return new QrStyleOptions
        {
            BackgroundColor = bgColor,
            Color = color,
            Dimensions = txt_dimension.Value > 0 ? Convert.ToInt32(txt_dimension.Value) : throw new ArgumentException("Please select valid dimensions!"),
            Margins = Convert.ToInt32(txt_margin.Value),
            Logo = logoBmp != null ? new QrLogo { Bitmap = logoBmp, Width = 50, Height = 50, CornerRadius = 5 } : null
        };
    }
    Private Function CreateStyleOptions() As QrStyleOptions
    'INSTANT VB TODO TASK: Throw expressions are not converted by Instant VB:
    'ORIGINAL LINE: return new QrStyleOptions { BackgroundColor = bgColor, Color = color, Dimensions = txt_dimension.Value > 0 ? Convert.ToInt32(txt_dimension.Value) : throw new ArgumentException("Please select valid dimensions!"), Margins = Convert.ToInt32(txt_margin.Value), Logo = logoBmp != null ? new QrLogo { Bitmap = logoBmp, Width = 50, Height = 50, CornerRadius = 5 } : null };
    	Return New QrStyleOptions With {
    		.BackgroundColor = bgColor,
    		.Color = color,
    		.Dimensions = If(txt_dimension.Value > 0, Convert.ToInt32(txt_dimension.Value), throw New ArgumentException("Please select valid dimensions!")),
    		.Margins = Convert.ToInt32(txt_margin.Value),
    		.Logo = If(logoBmp IsNot Nothing, New QrLogo With {
    			.Bitmap = logoBmp,
    			.Width = 50,
    			.Height = 50,
    			.CornerRadius = 5
    		}, Nothing)
    	}
    End Function
    $vbLabelText   $csharpLabel

    4.7 Salvando o código QR

    Gerencia o processo de salvamento do código QR gerado.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-15.cs
    private void btn_save_Click(object sender, EventArgs e)
    {
        SaveQRCode();
    }
    
    private void SaveQRCode()
    {
        if (pictureBox.Image == null)
        {
            MessageBox.Show("There is no QR code to save.", "Error");
            return;
        }
    
        saveFileDialog.Filter = "PNG Files|*.png|JPEG Files|*.jpg";
        saveFileDialog.Title = "Save QR Code";
        saveFileDialog.FileName = "QRCode";
    
        if (saveFileDialog.ShowDialog() == DialogResult.OK)
        {
            try
            {
                pictureBox.Image.Save(saveFileDialog.FileName, DetermineImageFormat(saveFileDialog.FileName));
                MessageBox.Show("QR Code has been saved!", "Success");
            }
            catch (Exception ex)
            {
                ShowError("An error occurred while saving the QR code", ex.Message);
            }
        }
    }
    Private Sub btn_save_Click(ByVal sender As Object, ByVal e As EventArgs)
    	SaveQRCode()
    End Sub
    
    Private Sub SaveQRCode()
    	If pictureBox.Image Is Nothing Then
    		MessageBox.Show("There is no QR code to save.", "Error")
    		Return
    	End If
    
    	saveFileDialog.Filter = "PNG Files|*.png|JPEG Files|*.jpg"
    	saveFileDialog.Title = "Save QR Code"
    	saveFileDialog.FileName = "QRCode"
    
    	If saveFileDialog.ShowDialog() = DialogResult.OK Then
    		Try
    			pictureBox.Image.Save(saveFileDialog.FileName, DetermineImageFormat(saveFileDialog.FileName))
    			MessageBox.Show("QR Code has been saved!", "Success")
    		Catch ex As Exception
    			ShowError("An error occurred while saving the QR code", ex.Message)
    		End Try
    	End If
    End Sub
    $vbLabelText   $csharpLabel
    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-16.cs
    private System.Drawing.Imaging.ImageFormat DetermineImageFormat(string filePath)
    {
        return System.IO.Path.GetExtension(filePath).ToLower() == ".jpg" ? System.Drawing.Imaging.ImageFormat.Jpeg : System.Drawing.Imaging.ImageFormat.Png;
    }
    Private Function DetermineImageFormat(ByVal filePath As String) As System.Drawing.Imaging.ImageFormat
    	Return If(System.IO.Path.GetExtension(filePath).ToLower() = ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg, System.Drawing.Imaging.ImageFormat.Png)
    End Function
    $vbLabelText   $csharpLabel

    4.8 Reiniciando o Aplicativo

    Limpa os dados inseridos pelo usuário e redefine o estado do formulário.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-17.cs
    private void btn_reset_Click(object sender, EventArgs e)
    {
        ResetFields();
    }
    
    private void ResetFields()
    {
        txt_QR.Text = string.Empty;
        txt_dimension.Value = 200;
        txt_margin.Value = 0;
        bgColor = Color.White;
        color = Color.Black;
        txt_selected_color.BackColor = System.Drawing.Color.White;
        txt_selected_bgcolor.BackColor = System.Drawing.Color.Black;
        logoBmp = null;
        selected_logo.Image = null;
        pictureBox.Image = null;
    }
    Private Sub btn_reset_Click(ByVal sender As Object, ByVal e As EventArgs)
    	ResetFields()
    End Sub
    
    Private Sub ResetFields()
    	txt_QR.Text = String.Empty
    	txt_dimension.Value = 200
    	txt_margin.Value = 0
    	bgColor = Color.White
    	color = Color.Black
    	txt_selected_color.BackColor = System.Drawing.Color.White
    	txt_selected_bgcolor.BackColor = System.Drawing.Color.Black
    	logoBmp = Nothing
    	selected_logo.Image = Nothing
    	pictureBox.Image = Nothing
    End Sub
    $vbLabelText   $csharpLabel

    4.9 Tratamento de erros

    Exibe mensagens de erro para os usuários.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-18.cs
    private static void ShowError(string title, string message)
    {
        MessageBox.Show($"{title}: {message}", "Error");
    }
    Private Shared Sub ShowError(ByVal title As String, ByVal message As String)
    	MessageBox.Show($"{title}: {message}", "Error")
    End Sub
    $vbLabelText   $csharpLabel

    4.10 Exemplo de código completo

    O código completo, que combina todos os recursos acima, pode ser encontrado no arquivo de exemplo vinculado ao seu projeto.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-19.cs
    using IronQr;
    using IronSoftware.Drawing;
    using Color = IronSoftware.Drawing.Color;
    
    namespace IronQR_QR_Generator_WinForms
    {
        public partial class QR_Generator : Form
        {
            string qrCodesDirectory = System.IO.Path.Combine(Application.StartupPath, "QR Codes");
            Color bgColor = Color.White;
            Color color = Color.Black;
            AnyBitmap? logoBmp = null;
    
            public QR_Generator()
            {
                InitializeComponent();
                SetLicenseKey();
                EnsureDirectoryExists(qrCodesDirectory);
            }
    
            private static void SetLicenseKey()
            {
                IronQr.License.LicenseKey = "License-Key";
            }
    
            private static void EnsureDirectoryExists(string path)
            {
                if (!System.IO.Directory.Exists(path))
                {
                    System.IO.Directory.CreateDirectory(path);
                }
            }
    
            private void btn_color_Click(object sender, EventArgs e)
            {
                UpdateColor(ref color, txt_selected_color, false);
            }
    
            private void btn_background_Click(object sender, EventArgs e)
            {
                UpdateColor(ref bgColor, txt_selected_bgcolor, true);
            }
    
            private string ColorToHex(System.Drawing.Color color)
            {
                return $"#{color.R:X2}{color.G:X2}{color.B:X2}";
            }
            private void UpdateColor(ref Color targetColor, Control display, bool isBackground)
            {
                if (select_color.ShowDialog() == DialogResult.OK)
                {
    
                    var hexColor = ColorToHex(select_color.Color);
                    targetColor = new Color(hexColor);
                    display.BackColor = select_color.Color;
                }
            }
    
            private void btn_logo_Click(object sender, EventArgs e)
            {
                if (select_logo.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        logoBmp = new AnyBitmap(select_logo.FileName);
                        selected_logo.Image = Image.FromFile(select_logo.FileName);
                    }
                    catch (Exception ex)
                    {
                        ShowError("An error occurred while loading the logo", ex.Message);
                    }
                }
            }
    
            private void btn_generate_Click(object sender, EventArgs e)
            {
                GenerateQRCode();
            }
    
            private void GenerateQRCode()
            {
                try
                {
                    var options = new QrOptions(QrErrorCorrectionLevel.High);
                    var myQr = QrWriter.Write(txt_QR.Text, options);
                    var style = CreateStyleOptions();
                    var qrImage = myQr.Save(style);
                    var fileName = $"{DateTime.Now:yyyyMMddHHmmssfff}_QR.png";
                    var fullPath = System.IO.Path.Combine(qrCodesDirectory, fileName);
                    qrImage.SaveAs(fullPath);
                    pictureBox.Image = Image.FromFile(fullPath);
                }
                catch (Exception ex)
                {
                    ShowError("An error occurred during QR code generation or saving", ex.Message);
                }
            }
    
            private QrStyleOptions CreateStyleOptions()
            {
                return new QrStyleOptions
                {
                    BackgroundColor = bgColor,
                    Color = color,
                    Dimensions = txt_dimension.Value > 0 ? Convert.ToInt32(txt_dimension.Value) : throw new ArgumentException("Please select valid dimensions!"),
                    Margins = Convert.ToInt32(txt_margin.Value),
                    Logo = logoBmp != null ? new QrLogo { Bitmap = logoBmp, Width = 50, Height = 50, CornerRadius = 5 } : null
                };
            }
    
            private void btn_save_Click(object sender, EventArgs e)
            {
                SaveQRCode();
            }
    
            private void SaveQRCode()
            {
                if (pictureBox.Image == null)
                {
                    MessageBox.Show("There is no QR code to save.", "Error");
                    return;
                }
    
                saveFileDialog.Filter = "PNG Files|*.png|JPEG Files|*.jpg";
                saveFileDialog.Title = "Save QR Code";
                saveFileDialog.FileName = "QRCode";
    
                if (saveFileDialog.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        pictureBox.Image.Save(saveFileDialog.FileName, DetermineImageFormat(saveFileDialog.FileName));
                        MessageBox.Show("QR Code has been saved!", "Success");
                    }
                    catch (Exception ex)
                    {
                        ShowError("An error occurred while saving the QR code", ex.Message);
                    }
                }
            }
    
            private System.Drawing.Imaging.ImageFormat DetermineImageFormat(string filePath)
            {
                return System.IO.Path.GetExtension(filePath).ToLower() == ".jpg" ? System.Drawing.Imaging.ImageFormat.Jpeg : System.Drawing.Imaging.ImageFormat.Png;
            }
    
            private void btn_reset_Click(object sender, EventArgs e)
            {
                ResetFields();
            }
    
            private void ResetFields()
            {
                txt_QR.Text = string.Empty;
                txt_dimension.Value = 200;
                txt_margin.Value = 0;
                bgColor = Color.White;
                color = Color.Black;
                txt_selected_color.BackColor = bgColor;
                txt_selected_bgcolor.BackColor = color;
                logoBmp = null;
                selected_logo.Image = null;
                pictureBox.Image = null;
            }
    
            private static void ShowError(string title, string message)
            {
                MessageBox.Show($"{title}: {message}", "Error");
            }
        }
    }
    Imports IronQr
    Imports IronSoftware.Drawing
    Imports Color = IronSoftware.Drawing.Color
    
    Namespace IronQR_QR_Generator_WinForms
    	Partial Public Class QR_Generator
    		Inherits Form
    
    		Private qrCodesDirectory As String = System.IO.Path.Combine(Application.StartupPath, "QR Codes")
    		Private bgColor As Color = Color.White
    		Private color As Color = Color.Black
    		Private logoBmp? As AnyBitmap = Nothing
    
    		Public Sub New()
    			InitializeComponent()
    			SetLicenseKey()
    			EnsureDirectoryExists(qrCodesDirectory)
    		End Sub
    
    		Private Shared Sub SetLicenseKey()
    			IronQr.License.LicenseKey = "License-Key"
    		End Sub
    
    		Private Shared Sub EnsureDirectoryExists(ByVal path As String)
    			If Not System.IO.Directory.Exists(path) Then
    				System.IO.Directory.CreateDirectory(path)
    			End If
    		End Sub
    
    		Private Sub btn_color_Click(ByVal sender As Object, ByVal e As EventArgs)
    			UpdateColor(color, txt_selected_color, False)
    		End Sub
    
    		Private Sub btn_background_Click(ByVal sender As Object, ByVal e As EventArgs)
    			UpdateColor(bgColor, txt_selected_bgcolor, True)
    		End Sub
    
    		Private Function ColorToHex(ByVal color As System.Drawing.Color) As String
    			Return $"#{color.R:X2}{color.G:X2}{color.B:X2}"
    		End Function
    		Private Sub UpdateColor(ByRef targetColor As Color, ByVal display As Control, ByVal isBackground As Boolean)
    			If select_color.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
    
    				Dim hexColor = ColorToHex(select_color.Color)
    				targetColor = New Color(hexColor)
    				display.BackColor = select_color.Color
    			End If
    		End Sub
    
    		Private Sub btn_logo_Click(ByVal sender As Object, ByVal e As EventArgs)
    			If select_logo.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
    				Try
    					logoBmp = New AnyBitmap(select_logo.FileName)
    					selected_logo.Image = Image.FromFile(select_logo.FileName)
    				Catch ex As Exception
    					ShowError("An error occurred while loading the logo", ex.Message)
    				End Try
    			End If
    		End Sub
    
    		Private Sub btn_generate_Click(ByVal sender As Object, ByVal e As EventArgs)
    			GenerateQRCode()
    		End Sub
    
    		Private Sub GenerateQRCode()
    			Try
    				Dim options = New QrOptions(QrErrorCorrectionLevel.High)
    				Dim myQr = QrWriter.Write(txt_QR.Text, options)
    				Dim style = CreateStyleOptions()
    				Dim qrImage = myQr.Save(style)
    				Dim fileName = $"{DateTime.Now:yyyyMMddHHmmssfff}_QR.png"
    				Dim fullPath = System.IO.Path.Combine(qrCodesDirectory, fileName)
    				qrImage.SaveAs(fullPath)
    				pictureBox.Image = Image.FromFile(fullPath)
    			Catch ex As Exception
    				ShowError("An error occurred during QR code generation or saving", ex.Message)
    			End Try
    		End Sub
    
    		Private Function CreateStyleOptions() As QrStyleOptions
    'INSTANT VB TODO TASK: Throw expressions are not converted by Instant VB:
    'ORIGINAL LINE: return new QrStyleOptions { BackgroundColor = bgColor, Color = color, Dimensions = txt_dimension.Value > 0 ? Convert.ToInt32(txt_dimension.Value) : throw new ArgumentException("Please select valid dimensions!"), Margins = Convert.ToInt32(txt_margin.Value), Logo = logoBmp != null ? new QrLogo { Bitmap = logoBmp, Width = 50, Height = 50, CornerRadius = 5 } : null };
    			Return New QrStyleOptions With {
    				.BackgroundColor = bgColor,
    				.Color = color,
    				.Dimensions = If(txt_dimension.Value > 0, Convert.ToInt32(txt_dimension.Value), throw New ArgumentException("Please select valid dimensions!")),
    				.Margins = Convert.ToInt32(txt_margin.Value),
    				.Logo = If(logoBmp IsNot Nothing, New QrLogo With {
    					.Bitmap = logoBmp,
    					.Width = 50,
    					.Height = 50,
    					.CornerRadius = 5
    				}, Nothing)
    			}
    		End Function
    
    		Private Sub btn_save_Click(ByVal sender As Object, ByVal e As EventArgs)
    			SaveQRCode()
    		End Sub
    
    		Private Sub SaveQRCode()
    			If pictureBox.Image Is Nothing Then
    				MessageBox.Show("There is no QR code to save.", "Error")
    				Return
    			End If
    
    			saveFileDialog.Filter = "PNG Files|*.png|JPEG Files|*.jpg"
    			saveFileDialog.Title = "Save QR Code"
    			saveFileDialog.FileName = "QRCode"
    
    			If saveFileDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
    				Try
    					pictureBox.Image.Save(saveFileDialog.FileName, DetermineImageFormat(saveFileDialog.FileName))
    					MessageBox.Show("QR Code has been saved!", "Success")
    				Catch ex As Exception
    					ShowError("An error occurred while saving the QR code", ex.Message)
    				End Try
    			End If
    		End Sub
    
    		Private Function DetermineImageFormat(ByVal filePath As String) As System.Drawing.Imaging.ImageFormat
    			Return If(System.IO.Path.GetExtension(filePath).ToLower() = ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg, System.Drawing.Imaging.ImageFormat.Png)
    		End Function
    
    		Private Sub btn_reset_Click(ByVal sender As Object, ByVal e As EventArgs)
    			ResetFields()
    		End Sub
    
    		Private Sub ResetFields()
    			txt_QR.Text = String.Empty
    			txt_dimension.Value = 200
    			txt_margin.Value = 0
    			bgColor = Color.White
    			color = Color.Black
    			txt_selected_color.BackColor = bgColor
    			txt_selected_bgcolor.BackColor = color
    			logoBmp = Nothing
    			selected_logo.Image = Nothing
    			pictureBox.Image = Nothing
    		End Sub
    
    		Private Shared Sub ShowError(ByVal title As String, ByVal message As String)
    			MessageBox.Show($"{title}: {message}", "Error")
    		End Sub
    	End Class
    End Namespace
    $vbLabelText   $csharpLabel

    Etapa 5: Executar o aplicativo

    Ao executar o aplicativo, a janela principal aparece organizada com seções para entrada, formatação, saída e ações. Siga as instruções da interface do usuário para inserir dados, personalizar seu código QR e gerar e salvar o código QR conforme desejado.

    Conclusão

    Em resumo, este guia apresentou o processo de geração de códigos QR usando a biblioteca IronQR em uma aplicação C#. Ao detalhar as etapas, desde a configuração do seu projeto no Visual Studio, a integração da biblioteca IronQR , o design de uma interface amigável e a escrita da lógica de backend, demonstramos como é acessível adicionar a funcionalidade de código QR aos seus aplicativos.

    Para aqueles interessados ​​em explorar melhor as funcionalidades do IronQR , vale ressaltar que o IronQR oferece um período de teste gratuito para você começar. Caso decida integrar o IronQR em seus projetos, as licenças começam em $999, oferecendo uma solução econômica para geração de códigos QR de nível profissional.

    Perguntas frequentes

    Como posso criar um aplicativo gerador de código QR em C#?

    Para criar um aplicativo gerador de código QR em C#, você pode usar a biblioteca IronQR. Comece configurando um aplicativo Windows Forms no Visual Studio, instale o IronQR via NuGet e projete a interface do seu aplicativo. Implemente a lógica de geração de código QR usando os recursos do IronQR, como seleção de cores e incorporação de logotipos.

    Quais são os benefícios de usar uma biblioteca de código QR for .NET?

    Uma biblioteca de código QR for .NET, como o IronQR, oferece recursos avançados, como alta precisão na leitura de códigos QR, opções de personalização para geração de códigos QR e suporte para diversos ambientes .NET. Ela também permite redimensionar e estilizar códigos QR.

    Como posso lidar com erros ao gerar códigos QR em C#?

    Em C#, você pode lidar com erros durante a geração de códigos QR implementando mecanismos adequados de tratamento de erros usando blocos try-catch. O IronQR facilita o gerenciamento de erros, garantindo que quaisquer problemas durante a criação do código QR sejam resolvidos de forma eficiente.

    Posso incorporar logotipos em códigos QR usando uma biblioteca de códigos QR?

    Sim, você pode incorporar logotipos em códigos QR usando a biblioteca IronQR. Esse recurso permite aprimorar a identidade visual dos seus códigos QR, incorporando logotipos personalizados ao design.

    Como faço para salvar códigos QR gerados em uma aplicação C#?

    Você pode salvar códigos QR gerados em um aplicativo C# usando a funcionalidade do IronQR para especificar diretórios de armazenamento. Isso permite gerenciar e armazenar códigos QR gerados de forma eficiente dentro do seu aplicativo.

    Quais são os passos necessários para configurar uma chave de licença para uma biblioteca de códigos QR?

    Para configurar uma chave de licença para o IronQR, você precisa incorporar o código de licenciamento em seu aplicativo. Normalmente, isso envolve adicionar linhas de código específicas fornecidas pelo IronQR para ativar a biblioteca com a licença adquirida.

    Como posso estilizar códigos QR com cores específicas em minha aplicação C#?

    O IronQR permite que você estilize códigos QR com cores específicas usando seus recursos de personalização de cores. Você pode selecionar cores para o primeiro plano e o fundo do código QR usando as caixas de diálogo de seleção de cores integradas ao seu aplicativo.

    Qual é o processo para instalar uma biblioteca de código QR no Visual Studio?

    Para instalar uma biblioteca de código QR como o IronQR no Visual Studio, use o Gerenciador de Pacotes NuGet. Pesquise por 'IronQR' e clique em 'Instalar' para adicioná-la ao seu projeto. Como alternativa, use o Console do Gerenciador de Pacotes com o comando 'Install-Package IronQR'.

    Curtis Chau
    Redator Técnico

    Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

    Leia mais
    Pronto para começar?
    Nuget Baixar 67,270 | Versão: 2026.5 just released
    Still Scrolling Icon

    Ainda está rolando a tela?

    Quer provas rápidas? PM > Install-Package IronQR
    executar um exemplo Veja seu URL se transformar em um código QR.