Zum Fußzeileninhalt springen
IRONQR NUTZEN

Wie man eine QR-Code-Generator-Anwendung in C# erstellt

Willkommen zu unserem Leitfaden zur Erstellung von QR-Codes mit C#! QR-Codes und .NET-Barcodedateien sind beliebte Methoden geworden, um Informationen schnell und effizient zu teilen. Egal, ob Sie eine App entwickeln, eine Website verwalten oder einfach nur nach einer praktischen Möglichkeit suchen, Links zu teilen, diese Codes können unglaublich nützlich sein. In diesem Leitfaden zeigen wir Ihnen, wie Sie mit IronQR effizient QR-Codes generieren und so sicherstellen, dass Sie auf Ihre Bedürfnisse zugeschnittene QR-Codes erstellen können. Diese Bibliothek macht es jedem, der mit C# arbeitet, leicht, QR-Codes zu erstellen, ohne sich mit komplexer Logik zu befassen. Wir führen Sie Schritt für Schritt durch den Prozess, damit Sie alles haben, was Sie benötigen, um loszulegen. Egal, ob Sie die Funktionalität zum QR-Code-Generator zu Ihrer App hinzufügen möchten oder einfach neugierig sind, wie es gemacht wird, hier sind Sie am richtigen Ort. Lassen Sie uns beginnen.

Wie man einen QR-Code-Generator in C# erstellt

  1. Erstellen Sie eine Windows Forms-Anwendung in Visual Studio
  2. Installieren Sie die QR-Bibliothek über NuGet.
  3. Entwerfen Sie die Formular-Frontend-Elemente
  4. Logik zur QR-Code-Generierung aufschreiben.
  5. Starten Sie die Anwendung und beginnen Sie mit der Erstellung von QR-Codes.

IronQR: C# QR-Bibliothek

IronQR ist eine C# QR-Code-Bibliothek zur Integration von QR-Code-Funktionalität in .NET-Anwendungen. IronQR unterstützt eine breite Palette von .NET-Versionen und Projekttypen, einschließlich C#, VB.NET, F#, .NET Core, .NET Standard, .NET Framework und mehr, und gewährleistet Kompatibilität mit verschiedenen Entwicklungsumgebungen wie Windows, Linux, macOS, iOS und Android.

IronQR zeichnet sich mit seinen erweiterten Funktionen aus, darunter die Möglichkeit, QR-Codes zu lesen und QR-Codes zu generieren, Unterstützung für mehrere Bildformate und Anpassungsoptionen wie Größenänderung, Styling und Hinzufügen von Logos zu QR-Codes.

Einige Hauptmerkmale von IronQR

IronQR erweitert seine Funktionalität über die grundlegende QR-Code-Generierung hinaus und bietet mehrere Funktionen, die darauf ausgelegt sind, eine breite Palette von QR-Code-bezogenen Aufgaben zu bewältigen. Lassen Sie uns diese Funktionen durchgehen und ihre Beispielcodes ansehen, die Sie in jede Art von .NET-Anwendungsvorlage wie eine Konsolenanwendung integrieren können.

QR-Codes lesen

IronQR zeichnet sich durch das Dekodieren von QR-Codes aus und bietet den Benutzern eine einfache Möglichkeit, auf die in QR-Codes eingebetteten Informationen zuzugreifen. Sie können schnell und genau Daten aus QR-Codes extrahieren, von einfachen URLs bis hin zu komplexen eingebetteten Informationen.

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

Wir verwenden folgenden QR-Code zum Scannen:

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 1 – QR-Code-PNG-Bilddatei

Und wir erhielten folgende Ausgabe:

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 2 – QR-Code-Ausgabe lesen

Der Prozess beginnt mit der Einbindung der notwendigen Namensräume IronQr und IronSoftware.Drawing , wobei Color aus dem Namensraum IronSoftware.Drawing explizit erwähnt wird, um Bildmanipulationen zu ermöglichen.

Bevor Sie mit dem Prozess des QR-Code-Lesens beginnen, ist es wichtig, die Software mit Ihrem Lizenzschlüssel zu aktivieren, indem Sie ihn IronQr.License.LicenseKey zuweisen. Der Code lädt dann das QR-Code-Bild aus einer Datei mit AnyBitmap.FromFile("QRCode.png").

Mit dem geladenen Bild besteht der nächste Schritt darin, es für die QR-Code-Erkennung vorzubereiten. Diese Vorbereitung erfolgt durch das Erstellen eines QrImageInput-Objekts, das als Container für das Bild dient.

Der Kern dieser Funktion liegt in der QrReader-Klasse, die instanziiert wird und verwendet wird, um die QR-Code-Leseoperation durchzuführen. Der Leser analysiert das vorbereitete Bild qrInput und sucht nach darin enthaltenen QR-Codes. Das Ergebnis dieser Operation ist eine Sammlung von QrResult-Objekten, die jeweils einen im Bild erkannten QR-Code darstellen.

Um auf die in den QR-Codes codierten Daten zuzugreifen und sie zu nutzen, iteriert der Code mit einer foreach-Schleife über die Sammlung von Ergebnissen. Jedes QrResult-Objekt enthält Eigenschaften wie den Wert des QR-Codes, der abgerufen und angezeigt werden kann.

Benutzerdefinierte QR-Lesemodus-Optionen

IronQR bietet Ihnen verschiedene Möglichkeiten, QR-Codes aus Bildern zu lesen, und ist daher vielseitig für unterschiedliche Bedürfnisse geeignet. Eine Option ist der gemischte Scanmodus , der Geschwindigkeit und Genauigkeit in Einklang bringt und sich als nützlich erweist, wenn QR-Codes nicht deutlich lesbar oder teilweise verdeckt sind.

Eine weitere ist der Machine Learning (ML) Scan-Modus , der intelligente Technologie nutzt, um beschädigte oder normalerweise schwer lesbare QR-Codes zu lesen. Dieser Modus eignet sich hervorragend für schwierige Situationen, in denen QR-Codes schwer zu erkennen sind.

Zu guter Letzt gibt es noch den Basis-Scanmodus , der die schnellste und einfachste Möglichkeit bietet, klare und unkomplizierte QR-Codes zu scannen. Es eignet sich am besten, wenn Sie schnelle Ergebnisse benötigen und die QR-Codes leicht zu lesen sind.

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

Erweiterte QR-Codes lesen

Die fortschrittlichen QR-Code-Lesefunktionen von IronQR bieten einen umfassenden und differenzierten Ansatz zum Scannen und Dekodieren von QR-Codes. Dieser Funktionsumfang geht über die grundlegenden Funktionen zum Lesen von QR-Codes hinaus und ermöglicht eine tiefergehende Interaktion und Datenextraktion.

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

Dies ist die Ausgabe, wenn wir den QR-Code mit IronQR scannen:

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 3 – Ausgabe des QR-Code-Scans

Wir verwenden folgenden QR-Code:

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 4 – QR-Code-Eingabe

Jedes QrResult Objekt ermöglicht den Zugriff auf die dekodierten Daten ( Value ), alle eingebetteten URLs ( Url ) und die räumlichen Koordinaten ( Points ) des QR-Codes innerhalb des Bildes.

Für jeden erkannten QR-Code liefert IronQR detaillierte Informationen, einschließlich des genauen Inhalts und aller im QR-Code enthaltenen URLs. Darüber hinaus liefert die Bibliothek die genauen Koordinaten der Ecken des QR-Codes im Bild (über die Eigenschaft Points ).

Um in einer C#-Anwendung einen QR-Code-Generator mithilfe der IronQR-Bibliothek für QR-Codes zu erstellen, befolgen Sie diese Schritte sorgfältig. Dieser Leitfaden führt Sie durch das Einrichten einer Windows-Formularanwendung, das Installieren der IronQR-Bibliothek, das Schreiben des Codes zum Generieren eines QR-Codes und das Verstehen der Ausgabe.

Schritt 1: Erstellen Sie eine Windows-Anwendung in Visual Studio

Es wird eine Windows Forms-Anwendung in Visual Studio erstellt und geöffnet.

Schritt 2: Installieren Sie die IronQR-Bibliothek

Nun ist es an der Zeit, die IronQR-Bibliothek im Projekt zu installieren. Sie können die IronQR-Bibliothek über verschiedene Methoden installieren. Wählen Sie die Option, die Ihren Vorlieben entspricht:

Installation über den NuGet-Paket-Manager

Installation über die NuGet-Paket-Manager-Konsole

  • Gehen Sie zu Tools > NuGet-Paket-Manager > Paket-Manager-Konsole .

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 9 – NuGet-Paketmanager

  • Geben Sie Install-Package IronQR ein und drücken Sie die Eingabetaste.

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 10 – IronQR installieren

Schritt 3: Frontend-Design

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 11 – QR-Code-Generator

3.1 Titelüberschrift

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 12 – Generieren eines QR-Codes

Beim Starten der QR-Code-Generator-Anwendung wird den Benutzern sofort eine auffällige Überschrift "QR Generator IronQR" präsentiert, die in einer fetten und markanten Schriftart gesetzt ist. Die Schriftart Agency FB wurde aufgrund ihrer klaren, modernen Linien gewählt, die ein Gefühl von Effizienz und Präzision vermitteln. Mit einer beachtlichen Schriftgröße von 48 Punkt wirkt der Titel sowohl prominent als auch selbstbewusst, fesselt die Aufmerksamkeit des Nutzers und etabliert die Identität der Anwendung fest.

3.2 Eingabebereich

Texteingabe für QR-Code

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 13 – QR-Code-Texteingabe

Das Herzstück des Eingabebereichs bildet eine einfache, aber grundlegende Komponente: das Texteingabefeld. Hier können Benutzer die Daten eingeben, die sie in ihren QR-Code kodieren möchten. Das Feld ist geräumig, bietet Platz für eine beträchtliche Menge Text und ist prominent im oberen Bereich positioniert.

Logoauswahl

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 14 – Logo auswählen

Unterhalb des Texteingabefelds ermöglicht der Bereich "Logo auswählen" eine zusätzliche Anpassungsebene. Nutzer können ein Logo hochladen, das in den QR-Code eingebettet wird, um so die Markenbekanntheit zu steigern oder den Code zu personalisieren. Das angrenzende Bildfeld bietet eine Vorschau des ausgewählten Logos und ermöglicht so ein sofortiges visuelles Feedback.

Farbkonfiguration

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 15 – Hintergrundfarbe

Auf der rechten Seite der Benutzeroberfläche befinden sich Optionen zur Farbauswahl. Zwei Schaltflächen, eine für die Farbe des QR-Codes und eine weitere für die Hintergrundfarbe, ermöglichen es den Benutzern, die Farbpalette ihres QR-Codes anzupassen. Die Rich-Text-Felder neben diesen Schaltflächen zeigen die aktuell ausgewählte Farbe an.

Die durchdachte Gestaltung des Eingabebereichs mit seinen Text-, Logo- und Farboptionen zeugt von einem klaren Verständnis der Prioritäten der Nutzer bei der Erstellung eines QR-Codes. Es vereint Funktionalität mit Flexibilität und ermöglicht es den Benutzern, die notwendigen Informationen schnell und effizient einzugeben, während es gleichzeitig Raum für Kreativität bietet.

3.3 Stilparameter

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 16 – Gestaltung

Dimensionseinstellungen

Neben den Werkzeugen zur Farbanpassung finden Benutzer die Eingabemöglichkeit für die "Abmessungen". Diese numerische Einstellung ist von entscheidender Bedeutung, da sie die Gesamtgröße des QR-Codes bestimmt und somit sicherstellt, dass er perfekt in den vorgesehenen Darstellungskontext passt, sei es eine Visitenkarte, ein Flyer oder ein digitaler Bildschirm.

Randeinstellungen

Neben dem Eingabefeld für die Abmessungen ermöglicht das Feld "Ränder" den Benutzern, den Leerraum um den QR-Code herum festzulegen. Ränder sind mehr als nur eine ästhetische Entscheidung; sie sind ein funktionales Element, das die Lesbarkeit des QR-Codes durch Scanner beeinflussen kann. Die Anwendung bietet einen numerischen Auf- und Abwärtsregler, mit dem Benutzer diesen Parameter einfach anpassen können.

3.4 Ausgabespeicher

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 17 – QR-Code-Ausgabe

Sobald der Benutzer die QR-Code-Generierung startet, rückt das große Bildfeld auf der linken Seite des Formulars mit der Bezeichnung "Ausgabe" in den Mittelpunkt. Es dient als dynamisches Display und bietet eine Echtzeit-Vorschau des generierten QR-Codes. Dieses unmittelbare visuelle Feedback ist für die Benutzer unerlässlich, um ihre Designentscheidungen zu überprüfen und sicherzustellen, dass der QR-Code ihren Erwartungen entspricht, bevor sie ihn speichern.

3.5 Aktionsschaltflächen

QR erzeugen

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 18 – QR-Code in C#

Die Schaltfläche "QR-Code generieren" ist ein zentrales Steuerelement in der Benutzeroberfläche der Anwendung. Dieser strategisch im Formular positionierte Button ist der Auslöser für die Erstellung des QR-Codes. Nach dem Klicken auf diese Schaltfläche übernimmt die Anwendung alle vom Benutzer definierten Eingabedaten und Styling-Parameter und beginnt mit der Generierung eines benutzerdefinierten QR-Codes.

QR-Code speichern

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 19 – Speichern

Sobald ein QR-Code generiert und im Ausgabevorschaubereich angezeigt wird, kommt die Schaltfläche "QR speichern" zum Einsatz. Beim Anklicken öffnet sich ein Speicherdialog, in dem der Benutzer das gewünschte Dateiformat und den Speicherort auswählen kann.

Formular zurücksetzen

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 20 – Zurücksetzen

Mit einem einzigen Klick löscht diese Schaltfläche alle vorherigen Eingaben und Auswahlen und stellt alle Einstellungen auf ihre Standardwerte zurück. Es handelt sich dabei um einen wichtigen Aspekt des Formulars, der eine schnelle Möglichkeit bietet, die Anwendung neu zu initialisieren, ohne jede Option manuell anpassen zu müssen.

Schritt 4: Backend-Logik schreiben

4.1 Einrichtung und Initialisierung

Zunächst beginnt die Anwendung mit der Einbindung der notwendigen Namensräume: IronQr und IronSoftware.Drawing . Diese Namensräume sind unerlässlich, da sie die Funktionalitäten bereitstellen, die zum Generieren und Bearbeiten von QR-Codes und Farben innerhalb der Anwendung benötigt werden. Die benutzerdefinierte Color Klasse dient der Vereinfachung des Farbmanagements bei der QR-Code-Generierung und überschreibt die Standardklasse System.Drawing.Color , um die Kompatibilität mit den Anforderungen von IronQR sicherzustellen.

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

Der Konstruktor der Klasse QR_Generator spielt eine entscheidende Rolle bei der Vorbereitung der Anwendung für den Einsatz. Hier werden die Komponenten der Anwendung initialisiert, was ein Standardschritt in Windows Forms-Anwendungen ist, um die UI-Elemente des Formulars einzurichten.

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 : Diese Methode wird aufgerufen, um einen gültigen Lizenzschlüssel für die IronQR-Bibliothek anzuwenden. Die Verwendung eines Lizenzschlüssels ist für kommerzielle Anwendungen und zur Freischaltung des vollen Funktionsumfangs der IronQR-Bibliothek zwingend erforderlich.

  • EnsureDirectoryExists : Da die generierten QR-Codes gespeichert werden müssen, stellt diese Methode sicher, dass ein entsprechendes Verzeichnis vorhanden ist. Es prüft, ob das Verzeichnis "QR Codes" im Startpfad der Anwendung existiert und erstellt es gegebenenfalls.

4.2 Lizenzschlüssel-Konfiguration

Um sicherzustellen, dass IronQR ohne Einschränkungen funktioniert, muss ein gültiger Lizenzschlüssel angewendet werden. Dies wird durch die Methode SetLicenseKey erreicht, eine statische Methode, die dazu dient, die Bibliothek mit Ihrem gekauften oder Testlizenzschlüssel zu konfigurieren. Der folgende Codeausschnitt veranschaulicht, wie der Lizenzschlüssel festgelegt wird:

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

Ersetzen Sie &quot;YOUR_LICENSE_KEY&quot; durch den tatsächlichen Lizenzschlüssel, den Sie von Iron Software erhalten haben. Die Methode wird im Konstruktor der Klasse QR_Generator aufgerufen, um sicherzustellen, dass die Lizenz angewendet wird, sobald die Anwendung startet und bevor ein QR-Code generiert wird.

4.3 Verzeichniserwaltung

Die Anwendung verwendet die EnsureDirectoryExists Methode, um zu prüfen, ob das angegebene Verzeichnis zum Speichern von QR-Codes existiert. Andernfalls wird das Verzeichnis erstellt. Diese Methode benötigt einen string Parameter, der den Pfad des zu überprüfenden oder zu erstellenden Verzeichnisses angibt. So wird es umgesetzt:

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

Diese Methode nutzt den System.IO -Namensraum zur Interaktion mit dem Dateisystem. Zuerst wird mit Directory.Exists geprüft, ob das Verzeichnis unter dem angegebenen Pfad existiert. Falls das Verzeichnis nicht existiert ( false wird zurückgegeben), wird es anschließend mit Directory.CreateDirectory erstellt.

Der Pfad zum QR-Code-Verzeichnis wird im Konstruktor der Klasse QR_Generator als qrCodesDirectory definiert. Dieser Wert kombiniert den Startpfad der Anwendung mit dem Ordnernamen "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 Farbauswahl

Die Anwendung bietet zwei Schaltflächen auf der Benutzeroberfläche, die jeweils mit einer Methode zur Farbauswahl verknüpft sind: btn_color_Click für die QR-Code-Farbe und btn_background_Click für die Hintergrundfarbe. Diese Methoden nutzen ein Farbdialogfeld, damit der Benutzer Farben auswählen kann.

Wenn über das Farbdialogfeld eine Farbe ausgewählt wird, wird die ausgewählte Farbe anschließend in ein hexadezimales Zeichenkettenformat umgewandelt. Dies ist notwendig, da die IronQR-Bibliothek die Angabe von Farben im Hexadezimalformat erfordert. Die Umrechnung erfolgt mittels der ColorToHex Methode:

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

Die UpdateColor Methode nimmt die ausgewählte Farbe und konvertiert sie mithilfe der Hexadezimalzeichenfolge in das IronSoftware.Drawing.Color -Format und aktualisiert je nach Auswahl entweder die Vordergrund- oder die Hintergrundfarbe des QR-Codes. Es aktualisiert auch die Benutzeroberfläche, um die neue Farbauswahl anzuzeigen:

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

4.5 Hinzufügen eines Logos

Die Anwendung enthält eine Schaltfläche ( btn_logo_Click ), die beim Anklicken einen Dateidialog öffnet, in dem der Benutzer eine Bilddatei auswählen kann, die als Logo verwendet werden soll. Diese Funktionalität ist für Unternehmen und Privatpersonen, die ihre QR-Codes mit ihrem Branding versehen möchten, von entscheidender Bedeutung. So läuft die Auswahl und Integration des Logos ab:

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

Nach erfolgreicher Auswahl eines Bildes versucht die Anwendung, dieses zu laden und eine Vorschau anzuzeigen. Das AnyBitmap Objekt logoBmp wird dann mit dem ausgewählten Bild belegt, das später von der QR-Code-Generierungslogik verwendet wird.

4.6 Erstellung des QR-Codes

Der Generierungsprozess beginnt, wenn der Benutzer auf die Schaltfläche "Generieren" klickt, die mit der Methode btn_generate_Click verknüpft ist. Diese Methode fungiert als Auslöser und ruft die Funktion GenerateQRCode auf, in der die eigentliche Generierungslogik enthalten ist.

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

Innerhalb der GenerateQRCode Methode erstellt die Anwendung einen QR-Code auf Basis der angegebenen Parameter, einschließlich des Eingabetextes und der Stiloptionen. Die Methode umfasst die Erstellung eines QR-Codes, die Anwendung der ausgewählten Farben, Abmessungen, Ränder und optional eines Logos.

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

Das Objekt QrOptions definiert den Grad der Fehlerkorrektur und erhöht so die Widerstandsfähigkeit des QR-Codes gegenüber Beschädigung oder Verdeckung. Die Methode CreateStyleOptions erzeugt ein QrStyleOptions Objekt, das die benutzerdefinierten Einstellungen des Benutzers wie Farben, Abmessungen und das Logo enthält. Hier ist die Methode im Detail:

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

Diese Methode erzeugt ein QrStyleOptions Objekt, das dann von der QR-Code-Generierungslogik verwendet wird, um die Präferenzen des Benutzers anzuwenden. Zu den Optionen gehören:

  • BackgroundColor und Color : Diese Eigenschaften legen die Hintergrund- und Vordergrundfarben des QR-Codes fest und ermöglichen so ein personalisiertes Erscheinungsbild, das den Marken- oder ästhetischen Vorlieben entspricht.
  • Dimensions : Diese Eigenschaft bestimmt die Größe des QR-Codes und bietet somit Flexibilität hinsichtlich der Einbindung des QR-Codes in verschiedene Kontexte oder Medien.
  • Margins : Diese Eigenschaft legt die Randgröße um den QR-Code fest und gewährleistet so, dass er von umgebenden Elementen isoliert ist, was für die Skalierbarkeit entscheidend sein kann.
  • Logo : Falls der Benutzer ein Logo ausgewählt hat, wird es hier mit spezifischen Abmessungen und einem Eckenradius für ein professionelles Erscheinungsbild konfiguriert.

4.7 Speichern des QR-Codes

Die Speicherfunktion wird durch die Schaltfläche "Speichern" ausgelöst, die mit der Methode btn_save_Click verknüpft ist. Diese Methode ruft SaveQRCode auf, welche die Speicherlogik implementiert. Der Vorgang umfasst die Anzeige eines Speicherdialogs, in dem der Benutzer das Dateiformat und den Speicherort für den QR-Code auswählen kann.

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

Diese Methode prüft, ob ein generierter QR-Code verfügbar ist. In diesem Fall werden dem Benutzer Optionen zum Speichern der Datei im PNG- oder JPEG-Format angeboten. Die Funktion DetermineImageFormat stellt sicher, dass das Bild im richtigen Format gespeichert wird, basierend auf der vom Benutzer gewählten Dateierweiterung.

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

Diese Flexibilität ermöglicht es den Nutzern, das Format zu wählen, das ihren Bedürfnissen am besten entspricht, egal ob sie Wert auf Qualität (PNG) oder Dateigröße (JPEG) legen.

4.8 Zurücksetzen der Anwendung

Die Reset-Funktionalität ist mit einer Schaltfläche "Reset" verknüpft, die die Methode btn_reset_Click aufruft. Diese Methode ruft ihrerseits die Funktion ResetFields auf, die dazu dient, alle Benutzereingaben zu löschen und die Standardwerte für alle Einstellungen wiederherzustellen, einschließlich Textfelder, Farbauswahlen und das ausgewählte Logo.

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

Diese Methode setzt alle an der QR-Code-Generierung beteiligten Komponenten zurück. Beispielsweise wird der QR-Code-Text gelöscht, die Abmessungen und Ränder werden auf Standardwerte zurückgesetzt und alle ausgewählten Farben oder Logos werden entfernt.

4.9 Fehlerbehandlung

Die Anwendung verwendet die ShowError Methode, um Fehlermeldungen benutzerfreundlich anzuzeigen. Diese Methode benötigt zwei Parameter: einen Titel und eine Meldung, die dem Benutzer Kontextinformationen zum Fehler liefern. So wird es umgesetzt:

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

Diese Methode wird in verschiedenen Teilen der Anwendung eingesetzt, um sicherzustellen, dass der Benutzer im Fehlerfall umgehend mit einer klaren und prägnanten Meldung informiert wird. Wenn beispielsweise beim Laden des Logos oder während der QR-Code-Generierung ein Fehler auftritt, ruft die Anwendung die ShowError auf, um Details zu dem Problem anzuzeigen.

4.10 Vollständiges Codebeispiel

Hier ist der vollständige Code, der Ihnen das Verständnis des Codes deutlich erleichtern wird:

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

Schritt 5: Anwendung ausführen

Beim Ausführen der Anwendung erscheint das Hauptfenster wie in der beigefügten Abbildung dargestellt. Das Layout ist übersichtlich in Abschnitte für Eingabe, Styling, Ausgabe und Aktionen unterteilt.

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 21 – Anwendungsausgabe

Der erste Schritt besteht darin, Daten in das Feld "QR-Text eingeben" einzugeben. Diese Daten bilden den Inhalt des QR-Codes, beispielsweise eine URL oder Textinformationen. Um den QR-Code zu personalisieren, wählen wir als Nächstes ein Logo aus, indem wir auf die Schaltfläche "Logo auswählen" klicken. Nach der Auswahl wird das Logo sichtbar im Vorschaubild neben dem Button platziert, wodurch seine Einbindung in das QR-Code-Design bestätigt wird.

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 22 – Logo

Nach der Auswahl des Logos wählen wir die Vorder- und Hintergrundfarben des QR-Codes. Nach dem Anklicken der jeweiligen Schaltflächen werden die ausgewählten Farben in den Farbanzeigefeldern neben jeder Schaltfläche angezeigt, wodurch wir eine sofortige visuelle Bestätigung unserer Auswahl erhalten.

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 23 – Farbauswahl

Für diesen speziellen QR-Code haben wir die Abmessungen auf 500 festgelegt, um sicherzustellen, dass der Code eine für unsere Bedürfnisse geeignete Größe hat, und die Ränder auf 20 angepasst, wodurch ein Puffer um den QR-Code herum geschaffen wird, um Scanprobleme zu vermeiden.

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 24 – Abmessungen

Nachdem alle Eingaben und Gestaltungsoptionen festgelegt sind, generieren wir den QR-Code durch Klicken auf die Schaltfläche "QR generieren". Die Anwendung verarbeitet unsere Eingaben und zeigt den neu erstellten QR-Code im Ausgabebildfeld an.

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 25 – Ausgabe von QR-Codes

Um den generierten QR-Code zu speichern, klicken wir einfach auf die Schaltfläche "QR speichern". Durch diese Aktion öffnet sich ein Speicherdialog, in dem wir den Speicherort und das Dateiformat für unser QR-Code-Bild auswählen können.

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 26 – Speichern-Dialog

Nach dem Speichern bestätigt eine Erfolgsmeldung, dass der QR-Code erfolgreich gespeichert wurde.

So erstellen Sie eine QR-Code-Generator-Anwendung in C#: Abbildung 27 – Erfolgsmeldung

Falls wir von vorne beginnen oder einen neuen QR-Code erstellen müssen, versetzt ein Klick auf die Schaltfläche "Formular zurücksetzen" das Formular in seinen ursprünglichen Zustand zurück, löscht alle Felder und Auswahlen und macht es bereit für die nächste QR-Code-Generierung.

Wie man eine QR-Code-Generator-Anwendung in C# erstellt: Abbildung 28 - Formular zurücksetzen

Hier ist der gespeicherte QR-Code, der von IronQR generiert wurde:

Wie man eine QR-Code-Generator-Anwendung in C# erstellt: Abbildung 29 - QR-Code-Ausgabe

Abschluss

Abschließend hat Sie dieser Leitfaden durch den Prozess der QR-Code-Erzeugung mit der IronQR-Bibliothek in einer C#-Anwendung geführt. Indem wir die Schritte von der Einrichtung Ihres Projekts in Visual Studio über die Integration der IronQR-Bibliothek, dem Entwerfen einer benutzerfreundlichen Oberfläche bis hin zur Entwicklung der Backend-Logik aufgeschlüsselt haben, haben wir gezeigt, wie zugänglich es ist, QR-Code-Funktionalität zu Ihren Anwendungen hinzuzufügen.

Für diejenigen, die die Möglichkeiten von IronQR weiter erkunden möchten, sei darauf hingewiesen, dass IronQR eine kostenlose Testversion anbietet, um Sie zu starten. Sollten Sie sich entscheiden, IronQR in Ihre Projekte zu integrieren, beginnen die Lizenzen bei $799 und bieten eine kostengünstige Lösung für die professionelle QR-Code-Generierung.

Häufig gestellte Fragen

Wie erstelle ich eine QR-Code-Generator-Anwendung in C#?

Um eine QR-Code-Generator-Anwendung in C# zu erstellen, beginnen Sie mit dem Einrichten einer Windows Forms-Anwendung in Visual Studio. Installieren Sie die IronQR-Bibliothek über NuGet, gestalten Sie die Benutzeroberfläche mit Eingabefeldern für Text, Logo und Farbe, und implementieren Sie dann die Logik für die QR-Code-Generierung mit den Methoden von IronQR.

Welche Anpassungsoptionen gibt es für QR-Codes in C#?

IronQR bietet Anpassungsoptionen für QR-Codes, wie das Ändern von Farben, Abmessungen und Rändern. Sie können auch Logos zu den QR-Codes hinzufügen, indem Sie die Einstellungen im QrStyleOptions-Objekt anpassen.

Wie installiere ich eine QR-Code-Bibliothek in einem C#-Projekt?

Installieren Sie die IronQR-Bibliothek in Ihrem C#-Projekt mit dem NuGet-Paketmanager in Visual Studio. Suchen Sie nach IronQR und klicken Sie auf die Schaltfläche 'Installieren', um es Ihrem Projekt hinzuzufügen.

In welchen Formaten kann ich generierte QR-Codes in C# speichern?

Mit IronQR können Sie generierte QR-Codes in verschiedenen Formaten speichern, einschließlich PNG und JPEG, was Flexibilität in Bezug auf Qualität und Dateigröße ermöglicht.

Kann ich QR-Codes mit einer C#-Bibliothek lesen?

Ja, IronQR enthält eine Funktionalität zum Lesen von QR-Codes, die es Ihnen ermöglicht, Daten effektiv aus QR-Bildern zu decodieren und zu extrahieren.

Was sind die Vorteile der Verwendung einer C# QR-Code-Bibliothek?

Eine C# QR-Code-Bibliothek wie IronQR vereinfacht den Prozess der QR-Code-Generierung und -Lesung und bietet Funktionen wie Mehrformatunterstützung, Anpassungsoptionen und Kompatibilität mit verschiedenen .NET-Versionen.

Wie kann ich Fehler bei der QR-Code-Generierung in C# behandeln?

Fehlerbehandlung kann in Ihre QR-Code-Generierungsanwendung integriert werden, indem Sie try-catch-Blöcke in C# verwenden. Dies stellt sicher, dass Probleme während der QR-Code-Erstellung reibungslos verwaltet werden, und bietet benutzerfreundliches Feedback.

Benötige ich eine Lizenz, um eine QR-Code-Bibliothek in einer C#-Anwendung zu verwenden?

Ja, um IronQR ohne Einschränkungen zu verwenden, benötigen Sie einen gültigen Lizenzschlüssel. Eine Testversion ist für erste Tests verfügbar, und professionelle Lizenzen können für vollen Zugriff erworben werden.

Wie kann ich Logos in QR-Codes mit C# integrieren?

Mit IronQR können Sie Logos in QR-Codes integrieren, indem Sie das Logo-Bild im QrStyleOptions-Objekt festlegen. Dies ermöglicht es Ihnen, QR-Codes mit Markenelementen zu personalisieren.

Welche Schritte sind erforderlich, um eine QR-Code-Generator-Anwendung in C# auszuführen?

Nachdem Sie Ihre QR-Code-Generator-Anwendung in C# eingerichtet und angepasst haben, führen Sie einfach die Anwendung in Visual Studio aus, generieren Sie die QR-Codes und nutzen Sie die bereitgestellten Optionen, um sie in Ihrem gewünschten Format zu speichern.

Jordi Bardia
Software Ingenieur
Jordi ist am besten in Python, C# und C++ versiert. Wenn er nicht bei Iron Software seine Fähigkeiten einsetzt, programmiert er Spiele. Mit Verantwortung für Produkttests, Produktentwicklung und -forschung trägt Jordi mit immensem Wert zur kontinuierlichen Produktverbesserung bei. Die abwechslungsreiche Erfahrung hält ihn gefordert und engagiert, ...
Weiterlesen