Test dans un environnement réel
Test en production sans filigrane.
Fonctionne partout où vous en avez besoin.
Bienvenue dans notre guide sur la création deCodes QR en utilisant C#! Les codes QR et les codes-barres DLL .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 astucieux de partager des liens, ces codes peuvent s'avérer extrêmement utiles. Dans ce guide, nous verrons comment générer efficacement des codes QR à l'aide deIronQRvous pouvez ainsi 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 fonctionnalité de génération de codes QR à votre application ou que vous soyez simplement curieux de savoir comment cela se passe, vous êtes au bon endroit. Commençons.
Créer une application Windows Forms dans Visual Studio
Installer la bibliothèque QR avec NuGet
Concevoir les éléments frontaux du formulaire
IronQR est une bibliothèque de code QR 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 se distingue par ses fonctionnalités avancées, notamment la possibilité delire les codes QR etgénérer des codes QRle code QR peut être personnalisé en fonction de la taille de l'image, de son style et de l'ajout de logos aux codes QR.
IronQR va au-delà de la génération de codes QR de base et propose plusieurs fonctions conçues pour répondre à 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 l'application console.
IronQR excelle dans le décodage des codes QR, offrant aux utilisateurs un moyen simple d'accéder aux informations incorporé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;
IronQr.License.LicenseKey = "License-Key";
// Load the image file that contains the QR Code
var inputImage = AnyBitmap.FromFile("QRCode.png");
// Prepare the image for QR code detection
QrImageInput qrInput = new QrImageInput(inputImage);
// Initialize the QR Code reader
QrReader qrReader = new QrReader();
// Execute QR Code reading on the provided image
IEnumerable<QrResult> qrResults = qrReader.Read(qrInput);
// Assuming you have the QR results in qrResults as before
foreach (var result in qrResults)
{
Console.WriteLine(result.Value); // Print the QR code content to the console
}
using IronQr;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
IronQr.License.LicenseKey = "License-Key";
// Load the image file that contains the QR Code
var inputImage = AnyBitmap.FromFile("QRCode.png");
// Prepare the image for QR code detection
QrImageInput qrInput = new QrImageInput(inputImage);
// Initialize the QR Code reader
QrReader qrReader = new QrReader();
// Execute QR Code reading on the provided image
IEnumerable<QrResult> qrResults = qrReader.Read(qrInput);
// Assuming you have the QR results in qrResults as before
foreach (var result in qrResults)
{
Console.WriteLine(result.Value); // Print the QR code content to the console
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
Nous utilisons le code QR suivant pour la numérisation :
Et nous obtenons ce résultat :
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'assignant à 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 par la création d'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.
IronQR vous offre différentes façons de lire les codes QR à partir d'images, ce qui le rend polyvalent pour des besoins variés. L'une des options est le mode de balayage mixte, qui permet d'équilibrer la vitesse et la précision, utile lorsque les codes QR ne sont pas clairs ou qu'ils sont partiellement cachés.
Un autre est le Machine Learning(ML) Mode Scan, qui utilise une technologie intelligente pour lire les codes QR 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 Mode de balayage de base, qui est le moyen le plus rapide et le plus simple de balayer des codes QR clairs et simples. C'est la meilleure solution 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;
IronQr.License.LicenseKey = "License-Key";
// Load the image file that contains the QR Code
var inputImage = AnyBitmap.FromFile("QRCode.png");
QrImageInput mixedScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mixedScanResults = new QrReader().Read(mixedScanInput);
QrImageInput mlScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mlScanResults = new QrReader().Read(mlScanInput);
QrImageInput basicScanInput = new QrImageInput(inputImage, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> basicScanResults = new QrReader().Read(basicScanInput);
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
IronQr.License.LicenseKey = "License-Key";
// Load the image file that contains the QR Code
var inputImage = AnyBitmap.FromFile("QRCode.png");
QrImageInput mixedScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mixedScanResults = new QrReader().Read(mixedScanInput);
QrImageInput mlScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mlScanResults = new QrReader().Read(mlScanInput);
QrImageInput basicScanInput = new QrImageInput(inputImage, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> basicScanResults = new QrReader().Read(basicScanInput);
Imports IronQr
Imports IronQr.Enum
Imports IronSoftware.Drawing
Imports Color = IronSoftware.Drawing.Color
IronQr.License.LicenseKey = "License-Key"
' Load the image file that contains the QR Code
Dim inputImage = AnyBitmap.FromFile("QRCode.png")
Dim mixedScanInput As New QrImageInput(inputImage, QrScanMode.OnlyDetectionModel)
Dim mixedScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(mixedScanInput)
Dim mlScanInput As New QrImageInput(inputImage, QrScanMode.OnlyDetectionModel)
Dim mlScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(mlScanInput)
Dim basicScanInput As New QrImageInput(inputImage, QrScanMode.OnlyBasicScan)
Dim basicScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(basicScanInput)
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. Cet ensemble de fonctionnalités va au-delà des fonctions de base de lecture des codes QR, en offrant un niveau d'interaction et d'extraction de données plus approfondi.
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
IronQr.License.LicenseKey = "License-Key";
var imageToScan = AnyBitmap.FromFile("QRCode.png");
QrImageInput qrInput = new QrImageInput(imageToScan);
QrReader qrScanner = new QrReader();
IEnumerable<QrResult> scanResults = qrScanner.Read(qrInput);
foreach (QrResult qrResult in scanResults)
{
Console.WriteLine(qrResult.Value);
Console.WriteLine(qrResult.Url);
foreach (IronSoftware.Drawing.PointF coordinate in qrResult.Points)
{
Console.WriteLine($"{coordinate.X}, {coordinate.Y}");
}
}
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
IronQr.License.LicenseKey = "License-Key";
var imageToScan = AnyBitmap.FromFile("QRCode.png");
QrImageInput qrInput = new QrImageInput(imageToScan);
QrReader qrScanner = new QrReader();
IEnumerable<QrResult> scanResults = qrScanner.Read(qrInput);
foreach (QrResult qrResult in scanResults)
{
Console.WriteLine(qrResult.Value);
Console.WriteLine(qrResult.Url);
foreach (IronSoftware.Drawing.PointF coordinate in qrResult.Points)
{
Console.WriteLine($"{coordinate.X}, {coordinate.Y}");
}
}
Imports IronQr
Imports IronQr.Enum
Imports IronSoftware.Drawing
Imports Color = IronSoftware.Drawing.Color
IronQr.License.LicenseKey = "License-Key"
Dim imageToScan = AnyBitmap.FromFile("QRCode.png")
Dim qrInput As New QrImageInput(imageToScan)
Dim qrScanner As New QrReader()
Dim scanResults As IEnumerable(Of QrResult) = qrScanner.Read(qrInput)
For Each qrResult As QrResult In scanResults
Console.WriteLine(qrResult.Value)
Console.WriteLine(qrResult.Url)
For Each coordinate As IronSoftware.Drawing.PointF In qrResult.Points
Console.WriteLine($"{coordinate.X}, {coordinate.Y}")
Next coordinate
Next qrResult
Voici le résultat obtenu lorsque nous scannons le code QR à l'aide d'IronQR :
Nous utilisons le code QR suivant :
Chaque objet QrResult
donne accès aux données décodées(Valeur
)tout URL incorporé(Url
)et les 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(par le biais de la propriété Points
).
Pour créer un générateur de code QR à l'aide de la bibliothèque de codes QR IronQR dans une application C#, suivez attentivement les étapes suivantes. Ce guide vous aidera à configurer une application Windows, à installer la bibliothèque IronQR, à écrire le code pour générer un code QR et à comprendre le résultat.
Sélectionnez Windows Forms App comme type de projet. Veillez à choisir le langage C#.
Saisissez un nom pour votre projet et sélectionnez l'emplacement où l'enregistrer. Sur l'écran suivant, sélectionnez le Framework .NET. Cliquez ensuite sur Créer.
Il créera et ouvrira une application Windows forms dans Visual Studio.
Il est maintenant temps d'installer la bibliothèque IronQR dans le projet. Vous pouvez installer la bibliothèque IronQR de différentes manières. Choisissez celui qui vous convient le mieux :
Tapez IronQR dans la zone de recherche et appuyez sur Entrée.
Trouvez IronQR dans la liste et cliquez sur Installer à côté.
Allez dans Tools > NuGet Package Manager > Package Manager Console.
Tapez Install-Package IronQR et appuyez sur Entrée.
Dès le lancement de l'application QR Code Generator, les utilisateurs sont immédiatement confrontés à un en-tête frappant intitulé "QR Generator IronQR", dans une police de caractères audacieuse et autoritaire. La police Agency FB a été choisie pour ses lignes épurées 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.
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 dans la partie supérieure.
En dessous du 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 donne un aperçu du logo sélectionné, offrant ainsi un retour visuel immédiat.
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 présentation 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. Il allie fonctionnalité et flexibilité, permettant aux utilisateurs de saisir rapidement et efficacement les informations nécessaires tout en laissant place à la créativité.
À 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.
À 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 permettant aux utilisateurs de régler facilement ce paramètre.
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 central. Il sert d'affichage dynamique, fournissant un aperçu en temps réel du code QR généré. Ce retour d'information 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.
Le bouton "Générer 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é.
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.
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.
Tout d'abord, 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 dans l'application. La classe personnalisée Color
est définie pour faciliter la gestion des couleurs lors de 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
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 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
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.
Pour que IronQR fonctionne sans limitations, une clé de licence valide doit être appliquée. Ceci est réalisé par 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
Remplacez "YOUR_LICENSE\NKEY"
par la clé de licence que vous avez obtenue 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.
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 string
, qui est le chemin du répertoire à vérifier ou à créer. Voici comment il 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
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 crée ensuite le répertoire en utilisant Directory.CreateDirectory
.
Le chemin d'accès au répertoire des codes QR est défini dans le constructeur de la classe QR_Generator
comme 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")
L'application fournit 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 s'appuient sur une boîte de dialogue de couleurs 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 en une chaîne de caractères hexadécimaux. Cela 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 par 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
La méthode UpdateColor
prend la couleur sélectionnée et la convertit au format IronSoftware.Drawing.Color en utilisant 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. Il 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
L'application comprend un bouton(btn_logo_Click) qui, lorsqu'on clique dessus, ouvre une boîte de dialogue permettant à l'utilisateur de sélectionner un fichier image à utiliser comme logo. Cette fonctionnalité est essentielle pour les entreprises ou les particuliers qui souhaitent marquer 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
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 alors défini avec l'image sélectionnée, que la logique de génération de QR utilisera par la suite.
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 réelle.
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
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
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
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 de personnaliser l'aspect du code QR en fonction de la marque ou des préférences esthétiques.Dimensions
: Cette propriété détermine la taille du code QR, ce qui permet d'adapter le code QR à 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é.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 implémente 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 pour l'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
Cette méthode vérifie si un code QR généré est disponible. Si c'est le cas, il propose à l'utilisateur d'enregistrer le fichier au format PNG ou JPEG. La fonction DetermineImageFormat
garantit que l'image est sauvegardé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
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).
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 de 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 = System.Drawing.Color.White;
txt_selected_bgcolor.BackColor = System.Drawing.Color.Black;
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 = System.Drawing.Color.White;
txt_selected_bgcolor.BackColor = System.Drawing.Color.Black;
logoBmp = null;
selected_logo.Image = null;
pictureBox.Image = null;
}
Private Sub btn_reset_Click(ByVal sender As Object, ByVal e As EventArgs)
ResetFields()
End Sub
Private Sub ResetFields()
txt_QR.Text = String.Empty
txt_dimension.Value = 200
txt_margin.Value = 0
bgColor = Color.White
color = Color.Black
txt_selected_color.BackColor = System.Drawing.Color.White
txt_selected_bgcolor.BackColor = System.Drawing.Color.Black
logoBmp = Nothing
selected_logo.Image = Nothing
pictureBox.Image = Nothing
End Sub
Cette méthode réinitialise chaque composant impliqué dans la génération du code QR. Par exemple, il 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.
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 il 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
Cette méthode est utilisée dans différentes parties de l'application afin de garantir qu'en cas d'erreur, l'utilisateur est rapidement informé par un message clair et concis. Par exemple, si une erreur survient 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.
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
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.
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 "Select 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.
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 cases d'affichage des couleurs à côté de chaque bouton, ce qui nous donne une confirmation visuelle immédiate de nos choix.
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 de créer un tampon autour du code QR pour éviter les problèmes de lecture.
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 "Generate QR". L'application traite nos données et affiche le code QR fraîchement créé dans la zone d'image de sortie.
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.
Une fois enregistré, un message de réussite confirme que le code QR a été enregistré avec succès.
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.
Voici le code QR enregistré généré par IronQR :
En conclusion, ce guide vous a permis de découvrir comment générer des codes QR à l'aide de la bibliothèque IronQR dans une application C#. En décomposant les étapes de la configuration de votre projet dans Visual Studio, de l'intégration de la bibliothèque IronQR, de la conception d'une interface conviviale et de l'écriture de la logique d'arrière-plan, 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 est intéressant de noter qu'IronQR offre un service d'aide à l'achat d'actionsessai gratuit pour vous aider à démarrer. Si vous décidez d'intégrer IronQR dans vos projets, les licences commencent à $749, fournissant une solution rentable pour la génération de codes QR de qualité professionnelle.
9 produits de l'API .NET pour vos documents de bureau