Passer au contenu du pied de page
UTILISATION D'IRONQR

Comment créer une application de générateur de codes QR en C#

Bienvenue dans notre guide sur la création de codes QR à l'aide de C# ! Les codes QR et les DLL de codes-barres .NET sont devenus des moyens populaires de partager des informations rapidement et efficacement. Que vous développiez une application, gériez un site web ou cherchiez simplement un moyen efficace de partager des liens, ces codes peuvent s'avérer extrêmement utiles. Dans ce guide, nous allons démontrer comment générer efficacement des codes QR à l'aide d'IronQR, en veillant à ce que vous puissiez générer des codes QR adaptés à vos besoins. Cette bibliothèque permet à toute personne travaillant avec C# de créer facilement des codes QR sans entrer dans une logique complexe. Nous vous accompagnerons tout au long des étapes, en veillant à ce que vous disposiez de tout ce dont vous avez besoin pour commencer. Que vous souhaitiez ajouter la fonction de générateur de code QR à votre application ou que vous soyez simplement curieux de savoir comment cela se passe, vous êtes au bon endroit. Commençons par le commencement.

Comment créer un générateur de code QR en C#

  1. Créer une application Windows Forms dans Visual Studio
  2. Installer la bibliothèque QR à l'aide de NuGet
  3. Conception des éléments frontaux du formulaire
  4. Rédiger la logique de la génération de QR
  5. Lancez l'application et commencez à créer des codes QR

IronQR : Bibliothèque QR en C

IronQR est une bibliothèque de code QR en C# permettant d'intégrer la fonctionnalité de code QR dans les applications .NET. IronQR prend en charge un large éventail de versions de .NET et de types de projets, notamment C#, VB.NET, F#, .NET Core, .NET Standard, .NET Framework, et plus encore, garantissant ainsi la compatibilité avec divers environnements de développement tels que Windows, Linux, macOS, iOS et Android.

IronQR distinguishes itself with its advanced features, including the ability to read QR codes and generate QR codes, support for multiple image formats, and customization options like resizing, styling, and adding logos to QR codes.

Quelques caractéristiques clés d'IronQR

IronQR étend ses fonctionnalités au-delà de la génération de codes QR de base, en proposant plusieurs fonctions conçues pour s'adapter à un large éventail de tâches liées aux codes QR. Passons en revue ces fonctionnalités et vérifions leurs codes d'exemple, que vous pourrez intégrer dans n'importe quel type de modèle d'application .NET, comme une application console.

Lire les codes QR

IronQR excelle dans le décodage des codes QR, offrant aux utilisateurs un moyen simple d'accéder aux informations intégrées dans les codes QR. Vous pouvez extraire rapidement et avec précision les données des codes QR, qu'il s'agisse de simples URL ou d'informations complexes intégrées.

using IronQr;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;

// Set the license key for IronQR
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);

// Print the value of each QR code found in the image
foreach (var result in qrResults)
{
    Console.WriteLine(result.Value);
}
using IronQr;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;

// Set the license key for IronQR
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);

// Print the value of each QR code found in the image
foreach (var result in qrResults)
{
    Console.WriteLine(result.Value);
}
Imports IronQr
Imports IronSoftware.Drawing
Imports Color = IronSoftware.Drawing.Color

' Set the license key for IronQR
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)

' Print the value of each QR code found in the image
For Each result In qrResults
	Console.WriteLine(result.Value)
Next result
$vbLabelText   $csharpLabel

Nous utilisons le code QR suivant pour la numérisation :

Comment créer une application génératrice de code QR en C# : Figure 1 - Code QR Fichier image PNG

Et nous avons obtenu ce résultat :

Comment créer une application génératrice de code QR en C# : Figure 2 - Lire la sortie du code QR

Le processus commence par l'incorporation des espaces de noms nécessaires, IronQr, et IronSoftware.Drawing, avec une mention spécifique de Color de l'espace de noms IronSoftware.Drawing pour gérer les manipulations d'images.

Avant de plonger dans le processus de lecture du code QR, il est essentiel d'activer le logiciel avec votre clé de licence en l'affectant à IronQr.License.LicenseKey. Le code procède ensuite au chargement de l'image du code QR à partir d'un fichier en utilisant AnyBitmap.FromFile("QRCode.png").

Une fois l'image chargée, l'étape suivante consiste à la préparer pour la détection du code QR. Cette préparation se fait en créant un objet QrImageInput, qui sert de conteneur pour l'image.

Le cœur de cette fonctionnalité réside dans la classe QrReader, qui est instanciée et utilisée pour effectuer l'opération de lecture du code QR. Le lecteur analyse l'image préparée, qrInput, à la recherche des codes QR qu'elle contient. Le résultat de cette opération est une collection d'objets QrResult, chacun représentant un code QR détecté dans l'image.

Pour accéder aux données encodées dans les codes QR et les utiliser, le code itère sur la collection de résultats à l'aide d'une boucle foreach. Chaque objet QrResult contient des propriétés telles que la valeur du code QR, qui peut être consultée et affichée.

Options de mode de lecture QR personnalisé

IronQR vous offre différentes façons de lire les codes QR à partir d'images, ce qui le rend polyvalent pour divers besoins. Une option est le Mixed Scan Mode, qui équilibre la vitesse et la précision, utile lorsque les codes QR ne sont pas clairs ou sont partiellement cachés.

Un autre outil est le Machine Learning (ML) Scan Mode, qui utilise une technologie intelligente pour lire les codes QR qui sont endommagés ou difficiles à lire normalement. Ce mode est idéal pour les situations difficiles où les codes QR sont difficiles à détecter.

Enfin, il y a le Basic Scan Mode, qui est le moyen le plus rapide et le plus simple de scanner des codes QR clairs et simples. La traduction est optimale lorsque vous avez besoin de résultats rapides et que les codes QR sont faciles à lire.

using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;

// Set the license key for IronQR
IronQr.License.LicenseKey = "License-Key";

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

// Using mixed scan mode
QrImageInput mixedScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mixedScanResults = new QrReader().Read(mixedScanInput);

// Using machine learning scan mode
QrImageInput mlScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mlScanResults = new QrReader().Read(mlScanInput);

// Using basic scan mode
QrImageInput basicScanInput = new QrImageInput(inputImage, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> basicScanResults = new QrReader().Read(basicScanInput);
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;

// Set the license key for IronQR
IronQr.License.LicenseKey = "License-Key";

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

// Using mixed scan mode
QrImageInput mixedScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mixedScanResults = new QrReader().Read(mixedScanInput);

// Using machine learning scan mode
QrImageInput mlScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mlScanResults = new QrReader().Read(mlScanInput);

// Using basic scan mode
QrImageInput basicScanInput = new QrImageInput(inputImage, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> basicScanResults = new QrReader().Read(basicScanInput);
Imports IronQr
Imports IronQr.Enum
Imports IronSoftware.Drawing
Imports Color = IronSoftware.Drawing.Color

' Set the license key for IronQR
IronQr.License.LicenseKey = "License-Key"

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

' Using mixed scan mode
Dim mixedScanInput As New QrImageInput(inputImage, QrScanMode.OnlyDetectionModel)
Dim mixedScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(mixedScanInput)

' Using machine learning scan mode
Dim mlScanInput As New QrImageInput(inputImage, QrScanMode.OnlyDetectionModel)
Dim mlScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(mlScanInput)

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

Lire les codes QR avancés

Les fonctionnalités avancées de lecture de codes QR d'IronQR sont conçues pour offrir une approche complète et nuancée de la numérisation et du décodage des codes QR. Cet ensemble de fonctionnalités va au-delà des fonctions de base de lecture des codes QR, offrant un niveau plus approfondi d'interaction et d'extraction de données.

using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;

// Set the license key for IronQR
IronQr.License.LicenseKey = "License-Key";

// Load the image to scan
var imageToScan = AnyBitmap.FromFile("QRCode.png");

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

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

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

// Print the value, URL, and coordinates of each QR code found in the image
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}");
    }
}
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;

// Set the license key for IronQR
IronQr.License.LicenseKey = "License-Key";

// Load the image to scan
var imageToScan = AnyBitmap.FromFile("QRCode.png");

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

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

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

// Print the value, URL, and coordinates of each QR code found in the image
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 IronQr.Enum
Imports IronSoftware.Drawing
Imports Color = IronSoftware.Drawing.Color

' Set the license key for IronQR
IronQr.License.LicenseKey = "License-Key"

' Load the image to scan
Dim imageToScan = AnyBitmap.FromFile("QRCode.png")

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

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

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

' Print the value, URL, and coordinates of each QR code found in the image
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

Voici le résultat obtenu lorsque nous scannons le code QR à l'aide d'IronQR :

Comment créer une application génératrice de code QR en C# : Figure 3 - Numérisation du code QR en sortie

Nous utilisons le code QR suivant :

Comment créer une application de génération de code QR en C# : Figure 4 - Entrée du code QR

Chaque objet QrResult permet d'accéder aux données décodées (Value), à toute URL intégrée (Url) et aux coordonnées spatiales (Points) du code QR dans l'image.

Pour chaque code QR détecté, IronQR propose des informations détaillées, notamment le contenu exact et les éventuelles URL contenues dans le code QR. En outre, la bibliothèque fournit les coordonnées précises des coins du code QR dans l'image (grâce à la propriété Points).

Pour créer un générateur de codes QR à l'aide de la bibliothèque IronQR de codes QR dans une application C#, suivez attentivement les étapes suivantes. Ce guide vous guidera dans la configuration d'une application de formulaire Windows, l'installation de la bibliothèque IronQR, l'écriture du code pour générer un code QR et la compréhension de la sortie.

Étape 1 : Créer une application Windows dans Visual Studio

  • Commencez par lancer Visual Studio sur votre ordinateur.
  • Cliquez sur le bouton "Créer un nouveau projet".
  • Sélectionnez Windows Forms App comme type de projet. Veillez à choisir le langage C#.

    Comment créer une application génératrice de code QR en C# : Figure 5 - Application Windows Forms

  • Saisissez un nom pour votre projet et sélectionnez l'emplacement où l'enregistrer. Sur l'écran suivant, sélectionnez .NET framework. Cliquez ensuite sur Créer.

    Comment créer une application génératrice de code QR en C# : Figure 6 - Configuration du projet

Il s'agit de créer et d'ouvrir une application Windows forms dans Visual Studio.

Étape 2 : Installer la bibliothèque IronQR

Il est maintenant temps d'installer la bibliothèque IronQR dans le projet. Vous pouvez installer la bibliothèque IronQR par le biais de différentes méthodes. Choisissez celui qui vous convient le mieux :

Installation à l'aide du gestionnaire de paquets NuGet

  • Cliquez avec le bouton droit de la souris sur votre projet dans l'explorateur de solutions et sélectionnez Gérer les packages NuGet.
  • Tapez IronQR dans la zone de recherche et appuyez sur Entrée.

    Comment créer une application génératrice de code QR en C# : Figure 7 - Gérer les paquets NuGet

  • Trouvez IronQR dans la liste et cliquez sur Install à côté.

    Comment créer une application génératrice de code QR en C# : Figure 8 - Installer IronQR

Installation à l'aide du gestionnaire de paquets NuGet Console

  • Allez dans Outils > NuGet Package Manager > Console du gestionnaire de paquets.

Comment créer une application génératrice de code QR en C# : Figure 9 - NuGet Package Manager

  • Tapez Install-Package IronQR et appuyez sur Entrée.

Comment créer une application génératrice de code QR en C# : Figure 10 - Installer IronQR

Étape 3 : Conception du front-end

Comment créer une application de génération de code QR en C# : Figure 11 - Générateur de code QR

3.1 En-tête de titre

Comment créer une application génératrice de code QR en C# : Figure 12 - Générer un QR Code

Au lancement de l'application QR Code Generator, les utilisateurs sont immédiatement confrontés à un en-tête saisissant intitulé "QR Generator IronQR", présenté dans une police de caractères audacieuse et faisant autorité. La police Agency FB a été choisie pour ses lignes nettes et modernes, qui donnent une impression d'efficacité et de précision. Avec une police de caractères de 48 points, le titre est à la fois proéminent et assertif, captant l'attention de l'utilisateur et établissant fermement l'identité de l'application.

3.2 Section de saisie

Saisie de texte pour le code QR

Comment créer une application de génération de code QR en C# : Figure 13 - Saisie du texte du code QR

Au cœur de la section de saisie se trouve un élément simple mais fondamental : la zone de saisie de texte. Ici, les utilisateurs peuvent saisir les données qu'ils souhaitent encoder dans leur code QR. L'encadré est spacieux, il peut contenir une quantité importante de texte et il est placé en évidence près du haut de l'écran.

Comment créer une application génératrice de code QR en C# : Figure 14 - Sélectionner le logo

Sous la saisie de texte, la zone "Sélectionner un logo" permet une personnalisation supplémentaire. Les utilisateurs peuvent télécharger un logo qui sera intégré au code QR, ce qui permet d'améliorer la reconnaissance de la marque ou de personnaliser le code. La boîte à images adjacente fournit un aperçu du logo sélectionné, offrant ainsi un retour visuel immédiat.

Configuration des couleurs

Comment créer une application de génération de code QR en C# : Figure 15 - Couleur d'arrière-plan

En se déplaçant vers la droite, l'interface présente des options pour la sélection des couleurs. Deux boutons, l'un pour la couleur du code QR et l'autre pour la couleur d'arrière-plan, permettent aux utilisateurs de personnaliser la palette de leur code QR. Les zones de texte riche situées à côté de ces boutons indiquent la couleur actuellement sélectionnée.

La mise en page soignée de la section de saisie, avec ses options de texte, de logo et de couleur, témoigne d'une bonne compréhension des priorités de l'utilisateur lors de la création d'un code QR. Elle allie fonctionnalité et flexibilité, permettant aux utilisateurs de saisir rapidement et efficacement les informations nécessaires tout en laissant place à la créativité.

3.3 Paramètres de style

Comment créer une application de génération de code QR en C# : Figure 16 - Style

Paramètres de dimensionnement

À côté des outils de personnalisation des couleurs, les utilisateurs trouveront l'entrée "Dimensions" Ce paramètre numérique est essentiel car il dicte la taille globale du code QR, garantissant qu'il s'adapte parfaitement au contexte d'affichage prévu, qu'il s'agisse d'une carte de visite, d'un dépliant ou d'un écran numérique.

Paramètres de marge

À côté de l'entrée des dimensions, le champ "Marges" permet aux utilisateurs de spécifier l'espace blanc entourant le code QR. Les marges sont plus qu'un simple choix esthétique ; il s'agit d'un élément fonctionnel qui peut affecter la lisibilité du code QR par les scanners. L'application fournit un contrôle numérique de haut en bas pour que les utilisateurs puissent ajuster ce paramètre facilement.

3.4 Aperçu de la sortie

Comment créer une application génératrice de code QR en C# : Figure 17 - Sortie QR

Une fois que l'utilisateur a lancé la génération du code QR, la grande boîte d'images sur le côté gauche du formulaire, intitulée "Sortie", devient le point focal. Elle sert d'affichage dynamique, fournissant un aperçu en temps réel du code QR généré. Ce retour visuel immédiat est essentiel pour que les utilisateurs vérifient leurs choix de conception et s'assurent que le code QR répond à leurs attentes avant de l'enregistrer.

3.5 Boutons d'action

Générer un QR

Comment créer une application génératrice de code QR en C# : Figure 18 - Code QR en C#

Le bouton "Generate QR" est un élément de contrôle central dans l'interface de l'application. Placé stratégiquement dans le formulaire, ce bouton est le catalyseur du processus de création du code QR. En cliquant sur ce bouton, l'application prend en compte toutes les données d'entrée et les paramètres de style définis par l'utilisateur et commence à générer un code QR personnalisé.

Enregistrer le code QR

Comment créer une application génératrice de code QR en C# : Figure 19 - Sauvegarder

Une fois qu'un code QR a été généré et qu'il est affiché dans la zone de prévisualisation de la sortie, le bouton "Enregistrer QR" entre en jeu. Lorsque l'on clique dessus, une boîte de dialogue d'enregistrement s'ouvre, permettant à l'utilisateur de choisir le format de fichier et l'emplacement d'enregistrement souhaités.

Réinitialiser le formulaire

Comment créer une application génératrice de code QR en C# : Figure 20 - Réinitialisation

D'un simple clic, ce bouton efface toutes les entrées et sélections précédentes, rétablissant ainsi les valeurs par défaut de tous les paramètres. Il s'agit d'un aspect important du formulaire, qui offre un moyen rapide de réinitialiser l'application sans avoir à ajuster manuellement chaque option.

Étape 4 : écrire la logique du backend

4.1 Configuration et initialisation

L'application commence par l'inclusion des espaces de noms nécessaires : IronQR et IronSoftware.Drawing. Ces espaces de noms sont essentiels car ils fournissent les fonctionnalités nécessaires pour générer et manipuler les codes QR et les couleurs au sein de l'application. La classe Color personnalisée est définie pour faciliter la gestion des couleurs dans la génération de codes QR, en surchargeant la classe par défaut System.Drawing.Color pour assurer la compatibilité avec les exigences d'IronQR.

using IronQr;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
using IronQr;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
Imports IronQr
Imports IronSoftware.Drawing
Imports Color = IronSoftware.Drawing.Color
$vbLabelText   $csharpLabel

Le constructeur de la classe QR_Generator joue un rôle crucial dans la préparation de l'application. C'est ici que les composants de l'application sont initialisés, ce qui est une étape standard dans les applications Windows Forms pour mettre en place les éléments de l'interface utilisateur du formulaire.

public QR_Generator()
{
    InitializeComponent();
    SetLicenseKey();
    EnsureDirectoryExists(qrCodesDirectory);
}
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
  • SetLicenseKey : Cette méthode est appelée pour appliquer une clé de licence valide pour la bibliothèque IronQR. L'utilisation d'une clé de licence est obligatoire pour les applications commerciales et pour débloquer toutes les capacités de la bibliothèque IronQR.

  • EnsureDirectoryExists : Étant donné la nécessité de sauvegarder les codes QR générés, cette méthode permet de s'assurer qu'un répertoire dédié est disponible. Il vérifie si le répertoire "QR Codes" existe dans le chemin de démarrage de l'application et le crée si ce n'est pas le cas.

4.2 Configuration de la clé de licence

Pour que IronQR fonctionne sans limitations, une clé de licence valide doit être appliquée. Pour ce faire, la méthode SetLicenseKey est une méthode statique conçue pour configurer la bibliothèque avec votre clé de licence achetée ou d'essai. L'extrait de code ci-dessous illustre comment définir la clé de licence :

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

Remplacez "YOUR_LICENSE_KEY" par la clé de licence réelle que vous avez obtenue auprès d'Iron Software. La méthode est appelée dans le constructeur de la classe QR_Generator, ce qui garantit que la licence est appliquée dès le démarrage de l'application et avant toute génération de code QR.

4.3 Gestion des répertoires

L'application utilise la méthode EnsureDirectoryExists pour vérifier si le répertoire spécifié pour le stockage des codes QR existe. Si ce n'est pas le cas, il crée le répertoire. Cette méthode prend un paramètre chaîne, qui est le chemin du répertoire à vérifier ou à créer. Voici comment le projet est mis en œuvre :

private static void EnsureDirectoryExists(string path)
{
    if (!System.IO.Directory.Exists(path))
    {
        System.IO.Directory.CreateDirectory(path);
    }
}
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

Cette méthode utilise l'espace de noms System.IO pour interagir avec le système de fichiers. Il vérifie d'abord si le répertoire au chemin spécifié existe en utilisant Directory.Exists. Si le répertoire n'existe pas (false est renvoyé), il le crée à l'aide de Directory.CreateDirectory.

Le chemin d'accès au répertoire des codes QR est défini dans le constructeur de la classe QR_Generator en tant que qrCodesDirectory, qui combine le chemin de démarrage de l'application avec un nom de dossier "QR Codes" :

string qrCodesDirectory = System.IO.Path.Combine(Application.StartupPath, "QR Codes");
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 Sélection des couleurs

L'application comporte deux boutons sur l'interface utilisateur, chacun lié à une méthode de sélection des couleurs : btn_color_Click pour la couleur du code QR et btn_background_Click pour la couleur d'arrière-plan. Ces méthodes utilisent une boîte de dialogue de couleur pour permettre à l'utilisateur de choisir des couleurs.

Lorsqu'une couleur est sélectionnée à l'aide de la boîte de dialogue des couleurs, la couleur choisie est ensuite convertie dans un format de chaîne hexadécimale. Cette traduction est nécessaire car la bibliothèque IronQR exige que les couleurs soient spécifiées au format hexadécimal. La conversion est effectuée à l'aide de la méthode ColorToHex :

private string ColorToHex(System.Drawing.Color color)
{
    return $"#{color.R:X2}{color.G:X2}{color.B:X2}";
}
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

La méthode UpdateColor prend la couleur sélectionnée et la convertit au format IronSoftware.Drawing.Color à l'aide de la chaîne hexadécimale, et met à jour la couleur d'avant-plan ou d'arrière-plan du code QR en fonction de la sélection. Elle met également à jour l'interface utilisateur pour refléter le nouveau choix de couleurs :

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 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

L'application comprend un bouton (btn_logo_Click) qui, lorsqu'il est cliqué, ouvre une boîte de dialogue de fichier permettant à l'utilisateur de sélectionner un fichier image à utiliser comme logo. Cette fonctionnalité est essentielle pour les entreprises ou les particuliers qui souhaitent donner une image de marque à leurs codes QR. Voici comment se déroule le processus de sélection et d'intégration du logo :

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_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

Lorsqu'une image est sélectionnée avec succès, l'application tente de la charger et d'en afficher un aperçu. L'objet AnyBitmap, logoBmp, est ensuite défini avec l'image sélectionnée, que la logique de génération QR utilise par la suite.

4.6 Génération de codes QR

Le processus de génération commence lorsque l'utilisateur clique sur le bouton "Generate", qui est lié à la méthode btn_generate_Click. Cette méthode agit comme un déclencheur, appelant la fonction GenerateQRCode où réside la logique de génération proprement dite.

private void btn_generate_Click(object sender, EventArgs e)
{
    GenerateQRCode();
}
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

Dans la méthode GenerateQRCode, l'application construit un code QR sur la base des paramètres spécifiés, y compris le texte d'entrée et les options de style. La méthode encapsule la création d'un code QR, en appliquant les couleurs sélectionnées, les dimensions, les marges et, éventuellement, un logo.

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 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 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
$vbLabelText   $csharpLabel

L'objet QrOptions définit le niveau de correction des erreurs, améliorant la résistance du code QR aux dommages ou à l'obscurcissement. La méthode CreateStyleOptions génère un objet QrStyleOptions, qui comprend les paramètres personnalisés de l'utilisateur tels que les couleurs, les dimensions et le logo. Voici la méthode en détail :

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 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

Cette méthode crée un objet QrStyleOptions, qui est ensuite utilisé par la logique de génération du code QR pour appliquer les préférences de l'utilisateur. Les options sont les suivantes :

  • BackgroundColor et Color : ces propriétés définissent les couleurs d'arrière-plan et d'avant-plan du code QR, ce qui permet d'obtenir un aspect personnalisé qui peut correspondre aux préférences en matière d'image de marque ou d'esthétique.
  • Dimensions : Cette propriété détermine la taille du code QR, offrant ainsi une certaine flexibilité dans la manière dont le code QR s'intègre dans différents contextes ou supports.
  • Margins : Cette propriété définit la taille de la marge autour du code QR, garantissant qu'il est isolé des éléments environnants, ce qui peut être crucial pour l'évolutivité.
  • Logo : si l'utilisateur a choisi d'inclure un logo, celui-ci est configuré ici avec des dimensions spécifiques et un rayon d'angle pour un aspect soigné.

4.7 Sauvegarder le code QR

La fonctionnalité de sauvegarde est déclenchée par le bouton "Save", qui est lié à la méthode btn_save_Click. Cette méthode appelle SaveQRCode, qui met en œuvre la logique d'enregistrement. Le processus comprend l'affichage d'une boîte de dialogue d'enregistrement de fichier, permettant à l'utilisateur de choisir le format de fichier et l'emplacement d'enregistrement du code QR.

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 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

Cette méthode vérifie si un code QR généré est disponible. Si c'est le cas, elle propose à l'utilisateur d'enregistrer le fichier au format PNG ou JPEG. La fonction DetermineImageFormat garantit que l'image est enregistrée dans le bon format en fonction de l'extension de fichier choisie par l'utilisateur.

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 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

Cette flexibilité permet aux utilisateurs de choisir le format qui répond le mieux à leurs besoins, qu'il s'agisse de privilégier la qualité (PNG) ou la taille du fichier (JPEG).

4.8 Réinitialisation de l'application

La fonctionnalité de réinitialisation est liée à un bouton "Reset", qui invoque la méthode btn_reset_Click. Cette méthode appelle à son tour ResetFields, une fonction conçue pour effacer toutes les entrées de l'utilisateur et rétablir les valeurs par défaut pour tous les paramètres, y compris les champs de texte, les sélections de couleurs et le logo sélectionné.

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 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 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
$vbLabelText   $csharpLabel

Cette méthode réinitialise chaque composant impliqué dans la génération du code QR. Par exemple, elle efface le texte du code QR, règle les dimensions et les marges sur les valeurs par défaut et supprime les couleurs ou les logos sélectionnés.

4.9 Gestion des erreurs

L'application utilise la méthode ShowError pour afficher les messages d'erreur de manière conviviale. Cette méthode prend deux paramètres : un titre et un message, qui fournissent à l'utilisateur le contexte de l'erreur. Voici comment le projet est mis en œuvre :

private static void ShowError(string title, string message)
{
    MessageBox.Show($"{title}: {message}", "Error");
}
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

Cette méthode est utilisée dans différentes parties de l'application pour s'assurer qu'en cas d'erreur, l'utilisateur est rapidement informé par un message clair et concis. Par exemple, si une erreur se produit lors du chargement du logo ou pendant le processus de génération du code QR, l'application appelle ShowError pour afficher les détails du problème.

4.10 Exemple de code complet

Voici le code complet qui vous aidera à comprendre le code beaucoup plus facilement :

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");
        }
    }
}
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

Etape 5 : Exécuter l'application

Lorsque l'application est exécutée, la fenêtre principale apparaît comme le montre l'image ci-dessous. La mise en page est soigneusement organisée en sections pour l'entrée, le style, la sortie et les actions.

Comment créer une application de génération de code QR en C# : Figure 21 - Sortie de l'application

La première étape du processus consiste à saisir des données dans le champ "Input QR Text". Ces données constitueront le contenu du code QR, tel qu'une URL ou des informations textuelles. Ensuite, pour personnaliser le code QR, nous sélectionnons un logo en cliquant sur le bouton "Sélectionner un logo". Lors de la sélection, le logo est placé de manière visible dans la boîte de prévisualisation adjacente au bouton, confirmant ainsi son intégration dans la conception du code QR.

Comment créer une application génératrice de code QR en C# : Figure 22 - Logo

Après la sélection du logo, nous choisissons les couleurs d'avant-plan et d'arrière-plan du code QR. Après avoir cliqué sur les boutons respectifs, les couleurs choisies sont reflétées dans les boîtes d'affichage des couleurs à côté de chaque bouton, ce qui nous donne une confirmation visuelle immédiate de nos choix.

Comment créer une application génératrice de code QR en C# : Figure 23 - Sélection des couleurs

Pour ce code QR particulier, nous avons fixé les dimensions à 500, afin que le code ait une taille adaptée à nos besoins, et nous avons ajusté les marges à 20, ce qui permet d'avoir un tampon autour du code QR pour éviter les problèmes de lecture.

Comment créer une application de génération de code QR en C# : Figure 24 - Dimensions

Une fois toutes les entrées et les options de style définies, nous procédons à la génération du code QR en cliquant sur le bouton "Générer QR". L'application traite nos données et affiche le code QR fraîchement créé dans la zone d'image de sortie.

Comment créer une application génératrice de codes QR en C# : Figure 25 - Sortie de la lecture des codes QR

Pour enregistrer le code QR généré, il suffit de cliquer sur le bouton "Enregistrer QR". Cette action ouvre une boîte de dialogue d'enregistrement, qui nous permet de choisir la destination et le format de fichier de notre image de code QR.

Comment créer une application génératrice de code QR en C# : Figure 26 - Boîte de dialogue d'enregistrement

Une fois enregistré, un message de réussite confirme que le code QR a été stocké avec succès.

Comment créer une application génératrice de code QR en C# : Figure 27 - Message de réussite

Si nous devons recommencer ou créer un nouveau code QR, cliquer sur le bouton "Réinitialiser le formulaire" ramène le formulaire à son état d'origine, en effaçant tous les champs et toutes les sélections, prêt pour la prochaine génération de code QR.

Comment créer une application génératrice de code QR en C# : Figure 28 - Remise à zéro du formulaire

Voici le code QR enregistré généré par IronQR :

Comment créer une application génératrice de code QR en C# : Figure 29 - Sortie du code QR

Conclusion

En conclusion, ce guide vous a accompagné tout au long du processus de génération de codes QR à l'aide de la bibliothèque IronQR dans une application C#. En décomposant les étapes depuis la configuration de votre projet dans Visual Studio, l'intégration de la bibliothèque IronQR, la conception d'une interface conviviale et l'écriture de la logique de backend, nous avons démontré à quel point il est accessible d'ajouter une fonctionnalité de code QR à vos applications.

Pour ceux qui souhaitent explorer davantage les capacités d'IronQR, il convient de noter qu'IronQR propose un essai gratuit pour commencer. Si vous décidez d'intégrer IronQR à vos projets, les licences commencent à $799, ce qui constitue une solution rentable pour la génération de codes QR de qualité professionnelle.

Questions Fréquemment Posées

Comment créer une application génératrice de Code QR en C# ?

Pour créer une application génératrice de Code QR en C#, commencez par configurer une Application Windows Forms dans Visual Studio. Installez la bibliothèque IronQR via NuGet, concevez l'interface avec des champs d'entrée pour le texte, le logo et la couleur, puis implémentez la logique pour la génération de codes QR en utilisant les méthodes d'IronQR.

Quelles sont les options de personnalisation disponibles pour les codes QR en C# ?

IronQR fournit des options de personnalisation pour les codes QR, comme modifier les couleurs, les dimensions et les marges. Vous pouvez également ajouter des logos aux codes QR en ajustant les réglages dans l'objet QrStyleOptions.

Comment installer une bibliothèque de Code QR dans un projet C# ?

Installez la bibliothèque IronQR dans votre projet C# en utilisant le Gestionnaire de Paquets NuGet dans Visual Studio. Recherchez IronQR et cliquez sur le bouton "Installer" pour l'ajouter à votre projet.

Quels formats puis-je utiliser pour enregistrer les codes QR générés en C# ?

Avec IronQR, vous pouvez enregistrer les codes QR générés dans divers formats, y compris PNG et JPEG, permettant une flexibilité en termes de qualité et de taille de fichier.

Puis-je lire des codes QR en utilisant une bibliothèque C# ?

Oui, IronQR inclut une fonctionnalité pour lire des codes QR, vous permettant de décoder et d'extraire des données à partir d'images QR de manière efficace.

Quels sont les avantages d'utiliser une bibliothèque de Code QR C# ?

Une bibliothèque de Code QR C# comme IronQR simplifie le processus de génération et de lecture des codes QR, offrant des fonctionnalités telles que le support multi-format, des options de personnalisation et la compatibilité avec diverses versions de .NET.

Comment puis-je gérer les erreurs lors de la génération des codes QR en C# ?

La gestion des erreurs peut être intégrée dans votre application de génération de codes QR en utilisant des blocs try-catch en C#. Cela garantit que tout problème survenant lors de la création du code QR est géré en douceur, fournissant un retour d'information convivial à l'utilisateur.

Ai-je besoin d'une licence pour utiliser une bibliothèque de Code QR dans une application C# ?

Oui, pour utiliser IronQR sans limitations, vous aurez besoin d'une clé de licence valide. Une version d'essai est disponible pour un premier test, et des licences professionnelles peuvent être achetées pour un accès complet.

Comment puis-je intégrer des logos dans les codes QR en utilisant C# ?

Avec IronQR, vous pouvez intégrer des logos dans les codes QR en définissant l'image du logo dans l'objet QrStyleOptions. Cela vous permet de personnaliser les codes QR avec des éléments de marque.

Quelles sont les étapes pour exécuter une application génératrice de code QR en C# ?

Après avoir configuré et personnalisé votre application génératrice de code QR en C#, il suffit d'exécuter l'application dans Visual Studio, de générer les codes QR et d'utiliser les options fournies pour les enregistrer dans le format souhaité.

Jordi Bardia
Ingénieur logiciel
Jordi est le plus compétent en Python, C# et C++, et lorsqu'il ne met pas à profit ses compétences chez Iron Software, il programme des jeux. Partageant les responsabilités des tests de produit, du développement de produit et de la recherche, Jordi apporte une immense valeur à l'amé...
Lire la suite