Przejdź do treści stopki
KORZYSTANIE Z IRONQR

Jak stworzyć aplikację do generowania kodów QR w C#

Witamy w naszym przewodniku po tworzeniu kodów QR przy użyciu języka C#! Kody QR i biblioteka DLL BarCode .NET stały się popularnymi sposobami szybkiego i wydajnego udostępniania informacji. Niezależnie od tego, czy tworzysz aplikację, zarządzasz stroną internetową, czy po prostu szukasz fajnego sposobu na udostępnianie linków, te kody mogą okazać się niezwykle przydatne. W tym przewodniku przedstawimy, jak efektywnie generować kody QR za pomocą IronQR, zapewniając możliwość generowania kodów QR dostosowanych do Twoich potrzeb. Ta biblioteka ułatwia każdemu, kto pracuje z językiem C#, tworzenie kodów QR bez konieczności zagłębiania się w skomplikowaną logikę. Przeprowadzimy Cię przez kolejne etapy, upewniając się, że masz wszystko, czego potrzebujesz, aby rozpocząć pracę. Niezależnie od tego, czy chcesz dodać do swojej aplikacji funkcję generatora kodów QR, czy po prostu jesteś ciekawy, jak to działa, trafiłeś we właściwe miejsce. Zacznijmy.

Jak stworzyć generator kodów QR w języku C

  1. Utwórz aplikację Windows Forms w Visual Studio
  2. Zainstaluj bibliotekę QR za pomocą NuGet
  3. Zaprojektuj elementy interfejsu użytkownika formularza
  4. Napisz logikę generowania kodów QR
  5. Uruchom aplikację i zacznij tworzyć kody QR

IronQR: biblioteka IronQR dla języka C

Biblioteka IronQR w języku C# służąca do integracji funkcji kodów QR z aplikacjami .NET. IronQR obsługuje szeroki zakres wersji .NET i typów projektów, w tym C#, VB.NET, F#, .NET Core, .NET Standard, .NET Framework i inne, zapewniając kompatybilność z różnymi środowiskami programistycznymi, takimi jak Windows, Linux, macOS, iOS i Android.

IronQR wyróżnia się zaawansowanymi funkcjami, w tym możliwością odczytu i generowania kodów QR, obsługą wielu formatów obrazów oraz opcjami dostosowywania, takimi jak zmiana rozmiaru, stylizacja i dodawanie logo do kodów QR.

Niektóre kluczowe funkcje IronQR

IronQR wykracza poza podstawowe generowanie kodów QR, oferując kilka funkcji zaprojektowanych z myślą o szerokim zakresie zadań związanych z kodami QR. Przejrzyjmy te funkcje i sprawdźmy przykładowe kody, które będzie można zintegrować z dowolnym szablonem aplikacji .NET, takim jak aplikacja konsolowa.

Odczytuj kody QR

IronQR wyróżnia się w dekodowaniu kodów QR, zapewniając użytkownikom prosty sposób na dostęp do informacji zawartych w kodach QR. Możesz szybko i dokładnie wyodrębnić dane z kodów QR, od prostych adresów URL po złożone informacje osadzone w kodzie.

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

Do skanowania używamy następującego kodu QR:

Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 1 - Plik obrazka PNG z kodem QR

Oto otrzymany wynik:

Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 2 - Odczyt wyniku kodu QR

Proces rozpoczyna się od włączenia niezbędnych przestrzeni nazw, IronQr i IronSoftware.Drawing, z konkretnym odniesieniem do Color z przestrzeni nazw IronSoftware.Drawing do obsługi manipulacji obrazem.

Przed rozpoczęciem procesu odczytu kodu QR, istotne jest aktywowanie oprogramowania za pomocą klucza licencyjnego, przypisując go do IronQr.License.LicenseKey. Kod następnie przystępuje do załadowania obrazu kodu QR z pliku za pomocą AnyBitmap.FromFile("QRCode.png").

Po załadowaniu obrazu następnym krokiem jest przygotowanie go do wykrywania kodu QR. To przygotowanie odbywa się poprzez stworzenie obiektu QrImageInput, który służy jako pojemnik dla obrazu.

Rdzeń tej funkcji leży w klasie QrReader, która zostaje zainicjowana i użyta do wykonania operacji odczytu kodu QR. Czytnik analizuje przygotowany obraz, qrInput, szukając jakichkolwiek zawartych w nim kodów QR. Wynikiem tej operacji jest kolekcja obiektów QrResult, z których każdy reprezentuje wykryty kod QR w obrębie obrazu.

Aby uzyskać dostęp i wykorzystać dane zakodowane w kodach QR, kod przechodzi po kolekcji wyników za pomocą pętli foreach. Każdy obiekt QrResult zawiera właściwości, takie jak wartość kodu QR, którą można uzyskać i wyświetlić.

Opcje niestandardowego trybu odczytu kodów QR

IronQR oferuje różne sposoby odczytu kodów QR z obrazów, dzięki czemu jest wszechstronnym rozwiązaniem dostosowanym do różnych potrzeb. Jedną z opcji jest tryb skanowania mieszanego, który zapewnia równowagę między szybkością a dokładnością, przydatną w sytuacjach, gdy kody QR są niewyraźne lub częściowo zasłonięte.

Kolejną funkcją jest tryb skanowania oparty na uczeniu maszynowym (ML), który wykorzystuje inteligentną technologię do odczytywania kodów QR, które są uszkodzone lub trudne do odczytania w normalnych warunkach. Ten tryb świetnie sprawdza się w trudnych sytuacjach, w których kody QR są trudne do wykrycia.

Na koniec mamy tryb skanowania podstawowego, który jest najszybszym i najprostszym sposobem skanowania wyraźnych i prostych kodów QR. Najlepiej sprawdza się, gdy potrzebujesz szybkich rezultatów, a kody QR są łatwe do odczytania.

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

Przeczytaj o zaawansowanych kodach QR

Zaawansowane funkcje odczytu kodów QR w IronQR zostały zaprojektowane tak, aby zapewnić kompleksowe i dopracowane podejście do skanowania i dekodowania kodów QR. Ten zestaw funkcji wykracza poza podstawowe możliwości odczytu kodów QR, zapewniając głębszy poziom interakcji i ekstrakcji danych.

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

Oto wynik skanowania kodu QR za pomocą IronQR:

Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 3 - Skanuj wynik kodu QR

Używamy następującego kodu QR:

Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 4 - Wprowadzanie kodu QR

Każdy obiekt QrResult zapewnia dostęp do zdekodowanych danych (Value), wszelkich osadzonych URL (Url) i współrzędnych przestrzennych (Points) kodu QR w obrębie obrazu.

Dla każdego wykrytego kodu QR IronQR oferuje szczegółowe informacje, w tym dokładną treść i wszelkie adresy URL zawarte w kodzie QR. Co więcej, biblioteka zapewnia dokładne współrzędne rogów kodu QR w obrazie (poprzez właściwość Points).

Aby utworzyć generator kodów QR przy użyciu biblioteki IronQR w aplikacji napisanej w języku C#, należy dokładnie wykonać poniższe kroki. Ten przewodnik przeprowadzi Cię przez proces konfiguracji aplikacji Windows Forms, instalacji biblioteki IronQR, pisania kodu do generowania kodu QR oraz zrozumienia wyników.

Krok 1: Utwórz aplikację dla systemu Windows w programie Visual Studio

  • Zacznij od uruchomienia programu Visual Studio na swoim komputerze.
  • Kliknij przycisk "Utwórz nowy projekt".
  • Wybierz typ projektu "Aplikacja Windows Forms". Pamiętaj, aby wybrać język C#.

Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 5 - Aplikacja Windows Forms

  • Wpisz nazwę projektu i wybierz lokalizację, w której chcesz go zapisać. Następnie na kolejnym ekranie wybierz .NET Framework. Następnie kliknij Utwórz.

Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 6 - Konfiguracja projektu

Spowoduje to utworzenie i otwarcie aplikacji Windows Forms w programie Visual Studio.

Krok 2: Zainstaluj bibliotekę IronQR

Teraz nadszedł czas, aby zainstalować bibliotekę IronQR w projekcie. Bibliotekę IronQR można zainstalować na różne sposoby. Wybierz opcję, która najbardziej Ci odpowiada:

Zainstaluj za pomocą menedżera pakietów NuGet

  • Kliknij prawym przyciskiem myszy swój projekt w Eksploratorze rozwiązań i wybierz opcję Zarządzaj pakietami NuGet.
  • Wpisz IronQR w polu wyszukiwania i naciśnij Enter.

Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 7 - Zarządzaj pakietami NuGet

  • Znajdź IronQR na liście i kliknij przycisk "Zainstaluj" obok niego.

Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 8 - Instalacja IronQR

Zainstaluj za pomocą konsoli menedżera pakietów NuGet

  • Przejdź do Narzędzia > Menedżer pakietów NuGet > Konsola menedżera pakietów.

Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 9 - Menedżer pakietów NuGet

  • Wpisz Install-Package IronQr i naciśnij Enter.

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 10 - Instalacja IronQR

Krok 3: Projekt interfejsu użytkownika

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 11 - Generator kodu QR

3.1 Nagłówek tytułu

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 12 - Generuj kod QR

Po uruchomieniu aplikacji QR Code Generator użytkownicy natychmiast widzą efektowny nagłówek zatytułowany "QR Generator IronQR", napisany pogrubioną i autorytatywną czcionką. Czcionka Agency FB została wybrana ze względu na jej czyste, nowoczesne linie, które oddają poczucie wydajności i precyzji. Dzięki dużej czcionce o rozmiarze 48 punktów tytuł jest zarówno widoczny, jak i wyrazisty, przyciągając uwagę użytkownika i zdecydowanie podkreślając tożsamość aplikacji.

3.2 Sekcja danych wejściowych

Wprowadzanie tekstu do kodu QR

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 13 - Wprowadzanie tekstu kodu QR

Sercem sekcji wprowadzania danych jest prosty, ale fundamentalny element: pole wprowadzania tekstu. W tym miejscu użytkownicy mogą wprowadzić dane, które chcą zakodować w swoim kodzie QR. Ramka jest przestronna, mieści znaczną ilość tekstu i znajduje się w widocznym miejscu u góry.

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 14 - Wybierz logo

Pod polem tekstowym obszar "Wybierz logo" umożliwia dodatkowe dostosowanie. Użytkownicy mogą przesłać logo, które zostanie osadzone w kodzie QR, zwiększając rozpoznawalność marki lub personalizując kod. Obok znajduje się ramka z podglądem wybranego logo, zapewniająca natychmiastową informację zwrotną.

Konfiguracja kolorów

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 15 - Kolor tła

W prawej części interfejsu znajdują się opcje wyboru kolorów. Dwa przyciski, jeden do wyboru koloru kodu QR, a drugi do wyboru koloru tła, pozwalają użytkownikom dostosować paletę kolorów swojego kodu QR. Pola tekstowe obok tych przycisków pokazują aktualnie wybrany kolor.

Przemyślany układ sekcji wprowadzania danych, z tekstem, logo i opcjami kolorystycznymi, odzwierciedla jasne zrozumienie priorytetów użytkownika podczas tworzenia kodu QR. Łączy funkcjonalność z elastycznością, umożliwiając użytkownikom szybkie i wydajne wprowadzanie niezbędnych informacji, a jednocześnie pozostawiając miejsce na kreatywność.

3.3 Parametry stylistyczne

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 16 - Stylizacja

Ustawienia wymiarów

Obok narzędzi do dostosowywania kolorów użytkownicy znajdą pole wprowadzania danych "Wymiary". To ustawienie liczbowe ma kluczowe znaczenie, ponieważ określa ogólny rozmiar kodu QR, zapewniając jego idealne dopasowanie do zamierzonego kontekstu wyświetlania, niezależnie od tego, czy jest to wizytówka, ulotka czy ekran cyfrowy.

Ustawienia marginesów

Obok pola wprowadzania wymiarów pole "Marginesy" pozwala użytkownikom określić białą przestrzeń otaczającą kod QR. Marginesy to coś więcej niż tylko kwestia estetyki; są one elementem funkcjonalnym, który może wpływać na czytelność kodu QR przez skanery. Aplikacja udostępnia użytkownikom numeryczne przyciski strzałek w górę i w dół, umożliwiające łatwą regulację tego parametru.

3.4 Podgląd wyniku

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 17 - Wynik QR

Gdy użytkownik zainicjuje generowanie kodu QR, dużym polu obrazu po lewej stronie formularza, oznaczonym jako "Wynik", staje się głównym punktem. Służy jako dynamiczny wyświetlacz, zapewniający podgląd wygenerowanego kodu QR w czasie rzeczywistym. Ta natychmiastowa informacja zwrotna jest niezbędna dla użytkowników, aby mogli zweryfikować swoje wybory projektowe i upewnić się, że kod QR spełnia ich oczekiwania przed zapisaniem.

3.5 Przyciski akcji

Wygeneruj kod QR

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 18 - Kod QR w C#

Przycisk "Generuj QR" jest kluczowym elementem sterującym w interfejsie aplikacji. Ten przycisk, umieszczony w strategicznym miejscu formularza, jest katalizatorem procesu tworzenia kodu QR. Po kliknięciu tego przycisku aplikacja pobiera wszystkie dane wejściowe i parametry stylizacji zdefiniowane przez użytkownika i rozpoczyna generowanie niestandardowego kodu QR.

Zapisz kod QR

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 19 - Zapisz

Po wygenerowaniu kodu QR i wyświetleniu go w obszarze podglądu wyników do akcji wkracza przycisk "Zapisz QR". Po kliknięciu otwiera się okno dialogowe zapisywania, umożliwiające użytkownikowi wybór żądanego formatu pliku i lokalizacji zapisu.

Resetuj formularz

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 20 - Resetuj

Jednym kliknięciem ten przycisk usuwa wszystkie poprzednie wpisy i wybory, przywracając wszystkie ustawienia do wartości domyślnych. Jest to ważny aspekt formularza, oferujący szybki sposób na ponowne zainicjowanie aplikacji bez konieczności ręcznego dostosowywania każdej opcji.

Krok 4: Napisz logikę zaplecza

4.1 Konfiguracja i inicjalizacja

Najpierw aplikacja zaczyna od włączenia niezbędnych przestrzeni nazw: IronQr i IronSoftware.Drawing. Te przestrzenie nazw są niezbędne, ponieważ zapewniają funkcje potrzebne do generowania i manipulowania kodami QR oraz kolorami w aplikacji. Zdefiniowano niestandardową klasę Color, aby ułatwić zarządzanie kolorami w generowaniu kodu QR, zastępując domyślną System.Drawing.Color, aby zapewnić zgodność z wymaganiami IronQR.

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

Konstruktor klasy QR_Generator odgrywa kluczową rolę w przygotowywaniu aplikacji do użycia. To właśnie tutaj inicjowane są komponenty aplikacji, co jest standardowym krokiem w aplikacjach Windows Forms służącym do konfiguracji elementów interfejsu użytkownika formularza.

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: Ta metoda jest wywoływana w celu zastosowania ważnego klucza licencyjnego dla biblioteki IronQR. Użycie klucza licencyjnego jest obowiązkowe w przypadku zastosowań komercyjnych oraz w celu odblokowania pełnych możliwości biblioteki IronQR.

  • EnsureDirectoryExists: Ze względu na potrzebę zapisywania wygenerowanych kodów QR, ta metoda zapewnia dostępność dedykowanego katalogu. Sprawdza, czy katalog "QR Codes" istnieje w ścieżce uruchamiania aplikacji, a jeśli nie, tworzy go.

4.2 Konfiguracja klucza licencyjnego

Aby zapewnić działanie IronQR bez ograniczeń, należy zastosować ważny klucz licencyjny. Jest to realizowane za pomocą metody SetLicenseKey, która jest metodą statyczną, zaprojektowaną do skonfigurowania biblioteki przy użyciu zakupionego lub trialowego klucza licencyjnego. Poniższy fragment kodu ilustruje sposób ustawiania klucza licencyjnego:

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

Zastąp "YOUR_LICENSE_KEY" rzeczywistym kluczem licencyjnym, który otrzymałeś od Iron Software. Metoda jest wywoływana w konstruktorze klasy QR_Generator, zapewniając, że licencja jest stosowana zaraz po uruchomieniu aplikacji i przed rozpoczęciem jakiegokolwiek generowania kodu QR.

4.3 Zarządzanie katalogami

Aplikacja używa metody EnsureDirectoryExists, aby sprawdzić, czy określony katalog do przechowywania kodów QR istnieje. W przeciwnym razie tworzy katalog. Metoda ta przyjmuje parametr string, czyli ścieżkę katalogu do sprawdzenia lub utworzenia. Oto jak to zostało zrealizowane:

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

Metoda ta wykorzystuje przestrzeń nazw System.IO do interakcji z systemem plików. Najpierw sprawdza, czy katalog pod określoną ścieżką istnieje, używając Directory.Exists. Jeśli katalog nie istnieje (zwracany jest false), następnie tworzy katalog, używając Directory.CreateDirectory.

Ścieżka do katalogu z kodami QR jest definiowana w konstruktorze klasy QR_Generator jako qrCodesDirectory, która łączy ścieżkę startową aplikacji z nazwą folderu "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 Wybór kolorów

Aplikacja udostępnia dwa przyciski w interfejsie użytkownika, z których każdy jest powiązany z metodą wybierania kolorów: btn_color_Click dla koloru kodu QR i btn_background_Click dla koloru tła. Metody te wykorzystują okno dialogowe kolorów, aby umożliwić użytkownikowi wybór kolorów.

Po wybraniu koloru za pomocą okna dialogowego kolorów wybrany kolor jest następnie konwertowany do formatu ciągu znaków szesnastkowych. Jest to konieczne, ponieważ biblioteka IronQR wymaga podania kolorów w formacie szesnastkowym. Konwersja odbywa się za pomocą metody ColorToHex:

private string ColorToHex(System.Drawing.Color color)
{
    return $"#{color.R:X2}{color.G:X2}{color.B:X2}";
}
private string ColorToHex(System.Drawing.Color color)
{
    return $"#{color.R:X2}{color.G:X2}{color.B:X2}";
}
Private Function ColorToHex(ByVal color As System.Drawing.Color) As String
	Return $"#{color.R:X2}{color.G:X2}{color.B:X2}"
End Function
$vbLabelText   $csharpLabel

Metoda UpdateColor przyjmuje wybrany kolor i konwertuje go na format IronSoftware.Drawing.Color za pomocą łańcucha szesnastkowego oraz aktualizuje kolor pierwszoplanowy lub tło kodu QR, w zależności od wyboru. Zaktualizowano również interfejs użytkownika, aby odzwierciedlić nowy wybór kolorów:

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

Aplikacja zawiera przycisk (btn_logo_Click), który po kliknięciu otwiera okno dialogowe plików, umożliwiające użytkownikowi wybranie pliku graficznego, który ma służyć jako logo. Ta funkcja ma kluczowe znaczenie dla firm lub osób prywatnych, które chcą oznaczyć swoje kody QR marką. Oto jak przebiega proces wyboru i integracji logo:

private void btn_logo_Click(object sender, EventArgs e)
{
    if (select_logo.ShowDialog() == DialogResult.OK)
    {
        try
        {
            logoBmp = new AnyBitmap(select_logo.FileName);
            selected_logo.Image = Image.FromFile(select_logo.FileName);
        }
        catch (Exception ex)
        {
            ShowError("An error occurred while loading the logo", ex.Message);
        }
    }
}
private void btn_logo_Click(object sender, EventArgs e)
{
    if (select_logo.ShowDialog() == DialogResult.OK)
    {
        try
        {
            logoBmp = new AnyBitmap(select_logo.FileName);
            selected_logo.Image = Image.FromFile(select_logo.FileName);
        }
        catch (Exception ex)
        {
            ShowError("An error occurred while loading the logo", ex.Message);
        }
    }
}
Private Sub btn_logo_Click(ByVal sender As Object, ByVal e As EventArgs)
	If select_logo.ShowDialog() = DialogResult.OK Then
		Try
			logoBmp = New AnyBitmap(select_logo.FileName)
			selected_logo.Image = Image.FromFile(select_logo.FileName)
		Catch ex As Exception
			ShowError("An error occurred while loading the logo", ex.Message)
		End Try
	End If
End Sub
$vbLabelText   $csharpLabel

Po pomyślnym wybraniu obrazu aplikacja próbuje go załadować i wyświetlić podgląd. Obiekt AnyBitmap, logoBmp, jest następnie ustawiany na wybrany obraz, którego później używa logika generowania kodu QR.

4.6 Generowanie kodów QR

Proces generowania rozpoczyna się, gdy użytkownik klika przycisk "Generuj", który jest powiązany z metodą btn_generate_Click. Ta metoda działa jako wyzwalacz, wywołując funkcję GenerateQRCode, gdzie znajduje się faktyczna logika generowania.

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

W ramach metody GenerateQRCode aplikacja tworzy kod QR na podstawie określonych parametrów, w tym tekstu wejściowego i opcji stylu. Metoda ta obejmuje tworzenie kodu QR, stosując wybrane kolory, wymiary, marginesy oraz, opcjonalnie, logo.

private void GenerateQRCode()
{
    try
    {
        var options = new QrOptions(QrErrorCorrectionLevel.High);
        var myQr = QrWriter.Write(txt_QR.Text, options);
        var style = CreateStyleOptions();
        var qrImage = myQr.Save(style);
        var fileName = $"{DateTime.Now:yyyyMMddHHmmssfff}_QR.png";
        var fullPath = System.IO.Path.Combine(qrCodesDirectory, fileName);
        qrImage.SaveAs(fullPath);
        pictureBox.Image = Image.FromFile(fullPath);
    }
    catch (Exception ex)
    {
        ShowError("An error occurred during QR code generation or saving", ex.Message);
    }
}
private void GenerateQRCode()
{
    try
    {
        var options = new QrOptions(QrErrorCorrectionLevel.High);
        var myQr = QrWriter.Write(txt_QR.Text, options);
        var style = CreateStyleOptions();
        var qrImage = myQr.Save(style);
        var fileName = $"{DateTime.Now:yyyyMMddHHmmssfff}_QR.png";
        var fullPath = System.IO.Path.Combine(qrCodesDirectory, fileName);
        qrImage.SaveAs(fullPath);
        pictureBox.Image = Image.FromFile(fullPath);
    }
    catch (Exception ex)
    {
        ShowError("An error occurred during QR code generation or saving", ex.Message);
    }
}
Private Sub GenerateQRCode()
	Try
		Dim options = New QrOptions(QrErrorCorrectionLevel.High)
		Dim myQr = QrWriter.Write(txt_QR.Text, options)
		Dim style = CreateStyleOptions()
		Dim qrImage = myQr.Save(style)
		Dim fileName = $"{DateTime.Now:yyyyMMddHHmmssfff}_QR.png"
		Dim fullPath = System.IO.Path.Combine(qrCodesDirectory, fileName)
		qrImage.SaveAs(fullPath)
		pictureBox.Image = Image.FromFile(fullPath)
	Catch ex As Exception
		ShowError("An error occurred during QR code generation or saving", ex.Message)
	End Try
End Sub
$vbLabelText   $csharpLabel

Obiekt QrOptions definiuje poziom korekcji błędów, zwiększając odporność kodu QR na uszkodzenia lub zasłonięcie. Metoda CreateStyleOptions generuje obiekt QrStyleOptions, który obejmuje niestandardowe ustawienia użytkownika, takie jak kolory, wymiary i logo. Oto szczegółowy opis metody:

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

Ta metoda tworzy obiekt QrStyleOptions, który następnie jest używany przez logikę generowania kodu QR do zastosowania preferencji użytkownika. Dostępne opcje to:

  • BackgroundColor i Color: Te właściwości ustawiają kolory tła i pierwszego planu kodu QR, pozwalając na spersonalizowany wygląd, który może pasować do marki lub preferencji estetycznych.
  • Dimensions: Ta właściwość określa rozmiar kodu QR, oferując elastyczność w jaki sposób kod QR dopasowuje się do różnych kontekstów lub mediów.
  • Margins: Ta właściwość ustawia rozmiar marginesu wokół kodu QR, zapewniając jego izolację od otaczających elementów, co może być istotne dla skalowalności.
  • Logo: Jeśli użytkownik wybrał dodanie logo, jest ono tutaj konfigurowane z określonymi wymiarami i promieniem narożnika dla wykończonego wyglądu.

4.7 Zapisywanie kodu QR

Funkcjonalność zapisu jest wyzwalana przyciskiem "Zapisz", który jest powiązany z metodą btn_save_Click. Metoda ta wywołuje SaveQRCode, która implementuje logikę zapisu. Proces obejmuje wyświetlenie okna dialogowego zapisu pliku, umożliwiającego użytkownikowi wybór formatu pliku i lokalizacji zapisu kodu QR.

private void btn_save_Click(object sender, EventArgs e)
{
    SaveQRCode();
}
private void SaveQRCode()
{
    if (pictureBox.Image == null)
    {
        MessageBox.Show("There is no QR code to save.", "Error");
        return;
    }
    saveFileDialog.Filter = "PNG Files|*.png|JPEG Files|*.jpg";
    saveFileDialog.Title = "Save QR Code";
    saveFileDialog.FileName = "QRCode";
    if (saveFileDialog.ShowDialog() == DialogResult.OK)
    {
        try
        {
            pictureBox.Image.Save(saveFileDialog.FileName, DetermineImageFormat(saveFileDialog.FileName));
            MessageBox.Show("QR Code has been saved!", "Success");
        }
        catch (Exception ex)
        {
            ShowError("An error occurred while saving the QR code", ex.Message);
        }
    }
}
private void btn_save_Click(object sender, EventArgs e)
{
    SaveQRCode();
}
private void SaveQRCode()
{
    if (pictureBox.Image == null)
    {
        MessageBox.Show("There is no QR code to save.", "Error");
        return;
    }
    saveFileDialog.Filter = "PNG Files|*.png|JPEG Files|*.jpg";
    saveFileDialog.Title = "Save QR Code";
    saveFileDialog.FileName = "QRCode";
    if (saveFileDialog.ShowDialog() == DialogResult.OK)
    {
        try
        {
            pictureBox.Image.Save(saveFileDialog.FileName, DetermineImageFormat(saveFileDialog.FileName));
            MessageBox.Show("QR Code has been saved!", "Success");
        }
        catch (Exception ex)
        {
            ShowError("An error occurred while saving the QR code", ex.Message);
        }
    }
}
Private Sub btn_save_Click(ByVal sender As Object, ByVal e As EventArgs)
	SaveQRCode()
End Sub
Private Sub SaveQRCode()
	If pictureBox.Image Is Nothing Then
		MessageBox.Show("There is no QR code to save.", "Error")
		Return
	End If
	saveFileDialog.Filter = "PNG Files|*.png|JPEG Files|*.jpg"
	saveFileDialog.Title = "Save QR Code"
	saveFileDialog.FileName = "QRCode"
	If saveFileDialog.ShowDialog() = DialogResult.OK Then
		Try
			pictureBox.Image.Save(saveFileDialog.FileName, DetermineImageFormat(saveFileDialog.FileName))
			MessageBox.Show("QR Code has been saved!", "Success")
		Catch ex As Exception
			ShowError("An error occurred while saving the QR code", ex.Message)
		End Try
	End If
End Sub
$vbLabelText   $csharpLabel

Ta metoda sprawdza, czy dostępny jest wygenerowany kod QR. W takim przypadku użytkownikowi wyświetlane są opcje zapisania pliku w formacie PNG lub JPEG. Funkcja DetermineImageFormat zapewnia, że obraz jest zapisywany w odpowiednim formacie w oparciu o rozszerzenie pliku wybrane przez użytkownika.

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

Ta elastyczność pozwala użytkownikom wybrać format, który najlepiej odpowiada ich potrzebom, niezależnie od tego, czy priorytetem jest jakość (PNG), czy rozmiar pliku (JPEG).

4.8 Resetowanie aplikacji

Funkcjonalność resetu jest powiązana z przyciskiem "Resetuj", który wywołuje metodę btn_reset_Click. Metoda ta z kolei wywołuje ResetFields, funkcję zaprojektowaną do usunięcia wszystkich danych wejściowych użytkownika i przywrócenia wartości domyślnych dla wszystkich ustawień, w tym pól tekstowych, wyboru kolorów i wybranego 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

Ta metoda resetuje każdy komponent zaangażowany w generowanie kodu QR. Na przykład usuwa tekst kodu QR, ustawia wymiary i marginesy na wartości domyślne oraz usuwa wszelkie wybrane kolory lub logo.

4.9 Obsługa błędów

Aplikacja używa metody ShowError do wyświetlania komunikatów o błędach w formie przyjaznej dla użytkownika. Ta metoda przyjmuje dwa parametry: tytuł i komunikat, które dostarczają użytkownikowi kontekstu dotyczącego błędu. Oto jak to zostało zrealizowane:

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

Metoda ta jest wykorzystywana w różnych częściach aplikacji, aby zapewnić, że w przypadku wystąpienia błędu użytkownik zostanie niezwłocznie poinformowany za pomocą jasnego i zwięzłego komunikatu. Na przykład, jeśli podczas ładowania logo lub w trakcie procesu generowania kodu QR wystąpi błąd, aplikacja wywołuje ShowError, aby wyświetlić szczegóły dotyczące problemu.

4.10 Pełny przykład kodu

Oto pełny kod, który pomoże Ci znacznie łatwiej zrozumieć kod:

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

Krok 5: Uruchom aplikację

Po uruchomieniu aplikacji pojawia się główne okno, jak pokazano na załączonym obrazku. Układ jest przejrzyście podzielony na sekcje dotyczące wprowadzania danych, stylizacji, wyników i działań.

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 21 - Wynik aplikacji

Pierwszym krokiem w tym procesie jest wprowadzenie danych w polu "Wprowadź tekst QR". Dane te będą stanowić treść kodu QR, np. adres URL lub informacje tekstowe. Następnie, aby spersonalizować kod QR, wybieramy logo, klikając przycisk "Wybierz logo". Po wybraniu logo jest widoczne w polu podglądu obok przycisku, co potwierdza jego włączenie do projektu kodu QR.

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 22 - Logo

Po wyborze logo wybieramy kolory pierwszego planu i tła kodu QR. Po kliknięciu odpowiednich przycisków wybrane kolory pojawiają się w polach wyświetlających kolory obok każdego przycisku, co pozwala nam natychmiast wizualnie potwierdzić nasze wybory.

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 23 - Wybór koloru

W przypadku tego konkretnego kodu QR ustawiliśmy wymiary na 500, zapewniając rozmiar kodu odpowiedni do naszych potrzeb, oraz dostosowaliśmy marginesy do 20, co zapewnia bufor wokół kodu QR, aby zapobiec problemom ze skanowaniem.

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 24 - Wymiary

Po ustawieniu wszystkich danych wejściowych i opcji stylizacji przechodzimy do generowania kodu QR, klikając przycisk "Generuj QR". Aplikacja przetwarza nasze dane wejściowe i wyświetla nowo utworzony kod QR w polu obrazu wyjściowego.

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 25 - Odczyt wyników kodów QR

Aby zapisać wygenerowany kod QR, wystarczy kliknąć przycisk "Zapisz QR". Ta czynność otwiera okno dialogowe zapisu, umożliwiające wybór lokalizacji docelowej i formatu pliku dla obrazu kodu QR.

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 26 - Dialog zapisu

Po zapisaniu komunikat potwierdzający informuje, że kod QR został pomyślnie zapisany.

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 27 - Komunikat sukcesu

Jeśli musimy zacząć od nowa lub utworzyć nowy kod QR, kliknięcie przycisku "Resetuj formularz" przywraca formularz do stanu pierwotnego, czyszcząc wszystkie pola i zaznaczenia, przygotowując go do wygenerowania kolejnego kodu QR.

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 28 - Formularz resetu

Oto zapisany kod QR wygenerowany przez IronQR:

 Jak stworzyć aplikację do generowania kodów QR w C#: Rysunek 29 - Wynik kodu QR

Wnioski

Podsumowując, niniejszy przewodnik przeprowadził Cię przez proces generowania kodów QR przy użyciu biblioteki IronQR w aplikacji napisanej w języku C#. Przedstawiając poszczególne etapy, od skonfigurowania projektu w Visual Studio, przez integrację biblioteki IronQR, po zaprojektowanie przyjaznego dla użytkownika interfejsu i napisanie logiki zaplecza, pokazaliśmy, jak łatwo można dodać funkcjonalność kodów QR do swoich aplikacji.

Osobom zainteresowanym dalszym zgłębianiem możliwości IronQR warto zwrócić uwagę, że IronQR oferuje bezpłatną wersję próbną, która ułatwi rozpoczęcie pracy. Jeśli zdecydujesz się zintegrować IronQR w swoich projektach, licencje zaczynają się od $999, oferując opłacalne rozwiązanie do generowania kodów QR na poziomie profesjonalnym.

Często Zadawane Pytania

Jak stworzyć aplikację do generowania kodów QR w C#?

Aby stworzyć aplikację do generowania kodów QR w C#, zacznij od utworzenia aplikacji Windows Forms w Visual Studio. Zainstaluj bibliotekę IronQR przez NuGet, zaprojektuj interfejs z polami wejściowymi dla tekstu, logo i koloru, a następnie zaimplementuj logikę generowania kodów QR korzystając z metod IronQR.

Jakie opcje dostosowywania są dostępne dla kodów QR w C#?

IronQR oferuje opcje dostosowywania kodów QR, takie jak zmiana kolorów, wymiarów i marginesów. Można również dodawać logo do kodów QR, dostosowując ustawienia w obiekcie QrStyleOptions.

Jak zainstalować bibliotekę kodów QR w projekcie C#?

Zainstaluj bibliotekę IronQR w swoim projekcie C# za pomocą menedżera pakietów NuGet w Visual Studio. Wyszukaj IronQR i kliknij przycisk „Zainstaluj”, aby dodać ją do swojego projektu.

W jakich formatach mogę zapisywać wygenerowane kody QR w języku C#?

Dzięki IronQR można zapisywać wygenerowane kody QR w różnych formatach, w tym PNG i JPEG, co zapewnia elastyczność pod względem jakości i rozmiaru pliku.

Czy mogę odczytywać kody QR za pomocą biblioteki C#?

Tak, IronQR zawiera funkcję odczytu kodów QR, umożliwiającą skuteczne dekodowanie i wyodrębnianie danych z obrazów QR.

Jakie są zalety korzystania z biblioteki kodów QR w języku C#?

Biblioteka kodów QR dla języka C#, taka jak IronQR, upraszcza proces generowania i odczytywania kodów QR, oferując takie funkcje, jak obsługa wielu formatów, opcje dostosowywania oraz kompatybilność z różnymi wersjami Wersji .NET.

Jak radzić sobie z błędami podczas generowania kodów QR w języku C#?

Obsługę błędów można włączyć do aplikacji do generowania kodów QR za pomocą bloków try-catch w języku C#. Zapewnia to płynne zarządzanie wszelkimi problemami podczas tworzenia kodów QR, dostarczając przyjazne dla użytkownika informacje zwrotne.

Czy potrzebuję licencji, aby korzystać z biblioteki kodów QR w aplikacji napisanej w języku C#?

Tak, aby korzystać z IronQR bez ograniczeń, potrzebny jest ważny klucz licencyjny. Dostępna jest wersja próbna do wstępnego testowania, a pełny dostęp można uzyskać, kupując Professional License.

Jak mogę zintegrować logo z kodami QR przy użyciu języka C#?

Dzięki IronQR możesz wbudować logo w kody QR, ustawiając obraz logo w obiekcie QrStyleOptions. Pozwala to na personalizację kodów QR za pomocą elementów brandingowych.

Jakie kroki należy wykonać, aby uruchomić aplikację do generowania kodów QR w języku C#?

Po skonfigurowaniu i dostosowaniu aplikacji do generowania kodów QR w języku C# wystarczy uruchomić aplikację w Visual Studio, wygenerować kody QR i skorzystać z dostępnych opcji, aby zapisać je w wybranym formacie.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie