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 avec C#! Les codes QR et le DLL de code-barres .NET sont devenus des moyens populaires de partager des informations rapidement et efficacement. Que vous développiez une application, que vous gériez un site web ou que vous cherchiez simplement un moyen pratique de partager des liens, ces codes peuvent être incroyablement utiles. Dans ce guide, nous allons vous montrer comment générer des codes QR efficacement en utilisant IronQR, en vous assurant de pouvoir générer un code QR adapté à vos besoins. Cette bibliothèque facilite la création de codes QR avec C# sans devoir se plonger dans une logique complexe. Nous vous guiderons à travers les étapes, en vous assurant d'avoir tout ce dont vous avez besoin pour commencer. Que vous souhaitiez ajouter une fonctionnalité de générateur de codes QR à votre application ou que vous soyez simplement curieux de savoir comment cela fonctionne, vous êtes au bon endroit. Commençons.

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 en utilisant NuGet
  3. Concevoir les éléments de l'interface
  4. Écrire la logique de génération de QR
  5. Exécuter l'application et commencer à créer des codes QR

IronQR : Bibliothèque C# pour QR

IronQR est une bibliothèque C# pour l'intégration de la fonction de code QR dans les applications .NET. IronQR prend en charge une large gamme de versions .NET et de types de projets, y compris C#, VB.NET, F#, .NET Core, .NET Standard, .NET Framework, et plus encore, assurant une compatibilité avec divers environnements de développement tels que Windows, Linux, macOS, iOS, et Android.

IronQR se distingue par ses fonctionnalités avancées, y compris la capacité de lire les codes QR et de générer des codes QR, ainsi que le support pour plusieurs formats d'image et les options de personnalisation comme le redimensionnement, la stylisation, et l'ajout de logos aux codes QR.

Quelques fonctionnalités clés d'IronQR

IronQR étend sa fonctionnalité au-delà de la simple génération de codes QR, offrant plusieurs fonctions conçues pour répondre à une large gamme de tâches liées aux codes QR. Passons en revue ces fonctionnalités et vérifions leurs exemples de code, 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, fournissant 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 des données des codes QR, allant de simples URL à des informations intégrées complexes.

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 le scan :

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

Et nous avons obtenu ce résultat :

Comment créer une application de générateur de code QR en C#: Figure 2 - Lecture du résultat du Code QR

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

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

Avec l'image chargée, l'étape suivante implique de la préparer pour la détection de code QR. Cette préparation est effectuée 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 de code QR. Le lecteur analyse l'image préparée, qrInput, à la recherche de tout code 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 et utiliser les données codées dans les codes QR, le code itère sur la collection de résultats en utilisant une boucle foreach. Chaque objet QrResult contient des propriétés telles que la valeur du code QR, qui peuvent être accédées et affichées.

Options de mode de lecture QR personnalisé

IronQR vous offre différentes manières de lire les codes QR à partir d'images, rendant ainsi le système polyvalent pour divers besoins. Une option est le Mode de balayage mixte, qui équilibre vitesse et précision, utile lorsque les codes QR ne sont pas clairs ou partiellement masqués.

Une autre est le Mode de balayage par apprentissage automatique (ML), qui utilise une technologie intelligente pour lire les codes QR qui sont endommagés ou pas faciles à lire normalement. Ce mode est idéal pour les situations difficiles où les codes QR sont difficiles à détecter.

Enfin, il y a le Mode de balayage de base, qui est la manière la plus rapide et la plus simple de scanner des codes QR clairs et simples. Il est préférable 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 capacité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. Ce jeu de fonctionnalités va au-delà des fonctionnalités de lecture de codes QR de base, offrant un niveau d'interaction et d'extraction de données plus profond.

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 lorsque nous scannons le code QR en utilisant IronQR:

Comment créer une application de générateur de code QR en C#: Figure 3 - Résultat de numérisation de code QR

Nous utilisons le code QR suivant :

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

Chaque objet QrResult fournit un accès aux données décodées (Value), à toutes les URL intégrées (Url), et aux coordonnées spatiales (Points) du code QR dans l'image.

Pour chaque code QR détecté, IronQR offre des informations détaillées, y compris le contenu exact et toutes les URL contenues dans le code QR. De plus, la bibliothèque fournit les coordonnées précises des coins du code QR dans l'image (via la propriété Points).

Pour créer un générateur de code QR en utilisant la bibliothèque IronQR de codes QR dans une application C#, suivez ces étapes attentivement. Ce guide vous guidera à travers le processus de configuration d'une application Windows Forms, l'installation de la bibliothèque IronQR, l'écriture du code pour générer un code QR, et la compréhension du résultat.

É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. Assurez-vous de choisir C# comme langue.

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

  • Entrez un nom pour votre projet et sélectionnez l'emplacement où le sauvegarder. Ensuite, sur l'écran suivant, sélectionnez .NET framework. Ensuite, cliquez sur Create.

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

Il créera et ouvrira 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 différentes méthodes. Choisissez celle qui convient à votre préférence:

Installer en utilisant le gestionnaire de paquets NuGet

  • Cliquez droit sur votre projet dans l'Explorateur de solutions et sélectionnez Manage NuGet Packages.
  • Tapez IronQR dans la boîte de recherche et appuyez sur Entrée.

Comment créer une application de générateur 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 de générateur de code QR en C#: Figure 8 - Installer IronQR

Installer en utilisant la console du gestionnaire de paquets NuGet

  • Allez dans Tools > NuGet Package Manager > Package Manager Console.

Comment créer une application de générateur de code QR en C#: Figure 9 - Gestionnaire de paquets NuGet

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

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

Étape 3 : Concevoir l'interface

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

3.1 En-tête de titre

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

Au lancement de l'application QR Code Generator, les utilisateurs sont immédiatement présentés avec un en-tête saisissant intitulé "QR Generator IronQR," défini dans une police audacieuse et autoritaire. La police, Agency FB, est sélectionnée pour ses lignes nettes et modernes, qui véhiculent un sentiment d'efficacité et de précision. Avec une police de taille 48 points, le titre est à la fois proéminent et affirmé, captant l'attention de l'utilisateur et établissant fermement l'identité de l'application.

3.2 Section d'entrée

Saisie de texte pour le code QR

Comment créer une application de générateur de code QR en C#: Figure 13 - Entrée de texte pour code QR

Au cœur de la section d'entrée se trouve un composant simple mais fondamental : la boîte de saisie de texte. Ici, les utilisateurs peuvent entrer les données qu'ils souhaitent encoder dans leur code QR. La boîte est spacieuse, accueillant une quantité significative de texte, et est positionnée bien en évidence près du sommet.

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

Sous la saisie de texte, la zone "Select Logo" permet une couche supplémentaire de personnalisation. Les utilisateurs peuvent télécharger un logo qui sera intégré dans le code QR, renforçant la reconnaissance de la marque ou personnalisant le code. La boîte d'image adjacente offre un aperçu du logo sélectionné, offrant un retour visuel immédiat.

Configuration des couleurs

Comment créer une application de générateur de code QR en C#: Figure 15 - Couleur de fond

En passant à 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 de fond permettent aux utilisateurs de personnaliser la palette de couleurs de leur code QR. Les zones de texte riches à côté de ces boutons affichent la couleur sélectionnée actuellement.

La disposition réfléchie de la section d'entrée, avec ses options de texte, de logo et de couleur, reflète une compréhension claire des priorités des utilisateurs lors de la création d'un code QR. Elle combine la fonctionnalité avec la flexibilité, permettant aux utilisateurs d'entrer rapidement et efficacement les informations nécessaires tout en offrant un espace pour la créativité.

3.3 Paramètres de style

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

Paramètres de dimension

Adjacent aux outils de personnalisation de couleur, les utilisateurs trouveront l'entrée pour "Dimensions". Ce paramètre numérique est critique car il dicte la taille globale du code QR, s'assurant qu'il s'adapte parfaitement au contexte d'affichage prévu, que ce soit une carte de visite, un flyer, ou un écran numérique.

Paramètres de marge

À côté de l'entrée de dimension, le champ "Marges" permet aux utilisateurs de spécifier l'espace blanc entourant le code QR. Les marges ne sont pas seulement un choix esthétique; ce sont un élément fonctionnel qui peut affecter la lisibilité du code QR par les scanners. L'application fournit un contrôle numérique à incréments pour permettre aux utilisateurs d'ajuster facilement ce paramètre.

3.4 Aperçu du résultat

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

Une fois que l'utilisateur lance la génération de code QR, la grande boîte d'image sur le côté gauche du formulaire, étiquetée "Output," devient le point central. Elle sert d'affichage dynamique, offrant un aperçu en temps réel du code QR généré. Ce retour visuel immédiat est essentiel pour permettre aux utilisateurs de vérifier leurs choix de conception et de s'assurer que le code QR répond à leurs attentes avant de sauvegarder.

3.5 Boutons d'action

Générer un QR

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

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

Enregistrer le code QR

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

Une fois qu'un code QR a été généré et est affiché dans la zone d'aperçu de sortie, le bouton "Save QR" entre en jeu. En cliquant dessus, il ouvre une boîte de dialogue de sauvegarde, permettant à l'utilisateur de choisir le format de fichier et l'emplacement de sauvegarde souhaités.

Réinitialiser le formulaire

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

D'un simple clic, ce bouton efface toutes les saisies et sélections précédentes, rétablissant tous les paramètres à leurs valeurs par défaut. C'est un aspect important du formulaire, offrant un moyen rapide de réinitialiser l'application sans ajuster manuellement chaque option.

Étape 4 : Écrire la logique du backend

4.1 Configuration et initialisation

D'abord, l'application commence par l'inclusion des espaces de noms nécessaires : IronQr et Iron Software.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 personnalisée Color est définie pour faciliter la gestion des couleurs dans la génération de codes QR, en remplaçant la System.Drawing.Color par défaut pour garantir 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 à l'utilisation. C'est ici que les composants de l'application sont initialisés, ce qui est une étape standard dans les applications Windows Forms pour configurer 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 fonctionnalités de la bibliothèque IronQR.

  • EnsureDirectoryExists: Étant donné le besoin de sauvegarder les codes QR générés, cette méthode garantit qu'il y a un répertoire dédié disponible. Elle vérifie si le répertoire "QR Codes" existe au chemin de démarrage de l'application et le crée s'il n'existe pas.

4.2 Configuration de la clé de licence

Pour garantir qu'IronQR fonctionne sans limitations, une clé de licence valide doit être appliquée. Cela se fait via la méthode SetLicenseKey, qui 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 de Iron Software. La méthode est appelée dans le constructeur de la classe QR_Generator, garantissant que la licence est appliquée dès que l'application démarre et avant que tout processus de génération de code QR ne se produise.

4.3 Gestion des répertoires

L'application utilise la méthode EnsureDirectoryExists pour vérifier si le répertoire spécifié pour stocker les codes QR existe. Si ce n'est pas le cas, elle crée le répertoire. Cette méthode prend un paramètre string, qui est le chemin du répertoire à vérifier ou à créer. Voici comment elle est implémentée:

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. Elle commence par vérifier si le répertoire au chemin spécifié existe en utilisant Directory.Exists. Si le répertoire n'existe pas (false est retourné), elle crée alors le répertoire en utilisant Directory.CreateDirectory.

Le chemin vers le répertoire des codes QR est défini dans le constructeur de la classe QR_Generator sous 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 de couleur

L'application fournit deux boutons sur l'interface utilisateur, chacun lié à une méthode pour sélectionner des couleurs: btn_color_Click pour la couleur du code QR et btn_background_Click pour la couleur de fond. Ces méthodes exploitent une boîte de dialogue de couleur pour permettre à l'utilisateur de choisir des couleurs.

Lorsqu'une couleur est sélectionnée en utilisant la boîte de dialogue de couleur, la couleur choisie est ensuite convertie au format de chaîne hexadécimale. Cela est nécessaire car la bibliothèque IronQR requiert que les couleurs soient spécifiées au format hexadécimal. La conversion est effectuée via 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 Iron Software.Drawing.Color en utilisant la chaîne hexadécimale, et met à jour soit la couleur d'avant-plan du code QR, soit la couleur de fond selon la sélection. Elle met également à jour l'interface utilisateur pour refléter le nouveau choix de couleur:

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 cherchant à marquer leurs codes QR. Voici comment le processus de sélection et d'intégration du logo est géré:

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

Après avoir sélectionné avec succès une image, l'application tente de la charger et d'afficher un aperçu. L'objet AnyBitmap, logoBmp, est ensuite configuré avec l'image sélectionnée, qui est ensuite utilisée par la logique de génération de QR.

4.6 Génération de code 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ù la logique réelle de génération réside.

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 basé sur les 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 d'erreurs, améliorant la résilience du code QR face à des dommages ou des obstructions. 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 de code QR pour appliquer les préférences de l'utilisateur. Les options incluent :

  • BackgroundColor et Color: Ces propriétés définissent les couleurs d'arrière-plan et d'avant-plan du code QR, permettant un aspect personnalisé qui peut correspondre aux préférences de marque ou esthétiques.
  • Dimensions: Cette propriété détermine la taille du code QR, offrant une flexibilité dans la manière dont le code QR s'adapte à 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, il est configuré ici avec des dimensions spécifiques et un rayon d'angle pour un aspect élégant.

4.7 Enregistrement du code QR

La fonctionnalité d'enregistrement est déclenchée par le bouton "Save", qui est lié à la méthode btn_save_Click. Cette méthode appelle SaveQRCode, qui implémente la logique de sauvegarde. Le processus inclut l'affichage d'une boîte de dialogue de sauvegarde de fichier, permettant à l'utilisateur de choisir le format de fichier et l'emplacement pour sauvegarder le 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 s'il y a un code QR généré disponible. Si c'est le cas, elle présente à l'utilisateur des options pour enregistrer le fichier au format PNG ou JPEG. La fonction DetermineImageFormat assure que l'image est enregistrée dans le format correct 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 convient le mieux à leurs besoins, que ce soit en privilégiant la qualité (PNG) ou la taille du fichier (JPEG).

4.8 Réinitialiser l'application

La fonctionnalité de réinitialisation est liée à un bouton "Reset", qui invoque la méthode btn_reset_Click. Cette méthode, à son tour, appelle ResetFields, une fonction conçue pour effacer toutes les saisies des utilisateurs et restaurer les valeurs par défaut pour tous les paramètres, incluant les champs de texte, les sélections de couleur, 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 de code QR. Par exemple, elle efface le texte du code QR, définit les dimensions et les marges aux valeurs par défaut, et enlève toutes les couleurs ou 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 un contexte sur l'erreur à l'utilisateur. Voici comment elle est implémentée:

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 garantir que lorsqu'une erreur survient, l'utilisateur est rapidement informé avec 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 de code QR, l'application appelle ShowError pour afficher des détails sur le 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

Étape 5 : Exécuter l'application

Lorsque l'application est exécutée, la fenêtre principale apparaît comme illustré dans l'image fournie. La disposition est proprement organisée en sections pour l'entrée, le style, la sortie, et les actions.

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

La première étape du processus consiste à entrer des données dans le champ "Input QR Text". Ces données formeront 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 "Select Logo". Lors de la sélection, le logo est visiblement placé dans la boîte d'aperçu adjacente au bouton, confirmant son incorporation dans le design du code QR.

Comment créer une application de générateur 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 de couleur à côté de chaque bouton, nous donnant une confirmation visuelle immédiate de nos choix.

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

Pour ce code QR particulier, nous réglons les dimensions à 500, garantissant que le code est de la taille appropriée pour nos besoins, et ajustons les marges à 20, ce qui fournit une marge autour du code QR pour éviter les problèmes de numérisation.

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

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

Comment créer une application de générateur de code QR en C#: Figure 25 - Lecture du résultat des codes QR

Pour enregistrer le code QR généré, nous cliquons simplement sur le bouton "Save QR". Cette action ouvre une boîte de dialogue de sauvegarde, nous permettant de choisir la destination et le format de fichier pour notre image de code QR.

Comment créer une application de générateur de code QR en C#: Figure 26 - Boîte de dialogue de sauvegarde

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

Comment créer une application de générateur de code QR en C#: Figure 27 - Message de succès

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

Comment créer une application de générateur de code QR en C#: Figure 28 - Réinitialiser le formulaire

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

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

Conclusion

En conclusion, ce guide vous a guidé à travers le processus de génération de codes QR utilisant 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 backend, nous avons démontré à quel point il est accessible d'ajouter une fonctionnalité de code QR à vos applications.

Pour ceux qui souhaitent explorer plus avant les capacités d'IronQR, il convient de noter qu'IronQR offre un essai gratuit pour vous lancer. Si vous décidez d'intégrer IronQR dans vos projets, les licences commencent à $799, offrant 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