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 pokażemy, jak efektywnie generować kody QR za pomocą IronQR, zapewniając możliwość tworzenia 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 skomplikówaną 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
- Utwórz aplikację Windows Forms w Visual Studio
- Zainstaluj bibliotekę QR za pomocą NuGet
- Zaprojektuj elementy interfejsu użytkownika formularza
- Napisz logikę generowania kodów QR
- 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
Do skanowania używamy następującego kodu QR:

Oto otrzymany wynik:

Proces rozpoczyna się od włączenia niezbędnych przestrzeni nazw, IronQr i IronSoftware.Drawing, ze szczególnym uwzględnieniem Color z przestrzeni nazw IronSoftware.Drawing w celu obsługi operacji na obrazach.
Przed przystąpieniem do odczytu kodu QR konieczne jest aktywowanie oprogramowania za pomocą klucza licencyjnego poprzez przypisanie go do IronQr.License.LicenseKey. Następnie kod przechodzi do ładowania obrazu kodu QR z pliku przy użyciu AnyBitmap.FromFile("QRCode.png").
Po załadowaniu obrazu następnym krokiem jest przygotowanie go do wykrywania kodu QR. Przygotowanie to polega na utworzeniu obiektu QrImageInput, który służy jako kontener dla obrazu.
Sercem tej funkcji jest klasa QrReader, która jest instancjonowana i wykorzystywana do odczytu kodów QR. Czytnik analizuje przygotowany obraz, qrInput, szukając zawartych w nim kodów QR. Wynikiem tej operacji jest zbiór obiektów QrResult, z których każdy reprezentuje wykryty kod QR na obrazie.
Aby uzyskać dostęp do danych zakodowanych w kodach QR i wykorzystać je, kod iteruje zbiór wyników za pomocą pętli foreach. Każdy obiekt QrResult zawiera właściwości, takie jak wartość kodu QR, do których można uzyskać dostęp i które można 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)
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
Oto wynik skanowania kodu QR za pomocą IronQR:

Używamy następującego kodu QR:

Każdy obiekt QrResult zapewnia dostęp do zdekodowanych danych (Value), wszelkich osadzonych adresów URL (Url) oraz współrzędnych przestrzennych (Points) kodu QR zawartego w obrazie.
Dla każdego wykrytego kodu QR IronQR oferuje szczegółowe informacje, w tym dokładną treść i wszelkie adresy URL zawarte w kodzie QR. Ponadto biblioteka udostępnia dokładne współrzędne narożników kodu QR na 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 zrozumieniuiuiuiuia 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#.

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

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.

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

Zainstaluj za pomocą konsoli menedżera pakietów NuGet
- Przejdź do Narzędzia > Menedżer pakietów NuGet > Konsola menedżera pakietów.

- Wpisz Install-Package IronQR i naciśnij Enter.

Krok 3: Projekt interfejsu użytkownika

3.1 Nagłówek tytułu

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

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.
Wybór 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

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

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

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

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

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

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 się od dołą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. Niestandardowa klasa Color została zdefiniowana w celu ułatwienia zarządzania kolorami podczas generowania kodów QR, zastępując domyślną klasę 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
Konstruktor klasy QR_Generator odgrywa kluczową rolę w przygotowaniu 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
-
SetLicenseKey: Ta metoda jest wywoływana w celu zastosowania prawidłowego 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: Biorąc pod uwagę 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. Odbywa się to za pomocą metody SetLicenseKey, która jest metodą statyczną przeznaczoną do konfiguracji biblioteki przy użyciu zakupionego lub Licencji Trial. 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
Zastąp "YOUR_LICENSE_KEY" rzeczywistym kluczem licencyjnym otrzymanym od Iron Software. Metoda jest wywoływana w konstruktorze klasy QR_Generator, co gwarantuje, że licencja zostanie zastosowana zaraz po uruchomieniu aplikacji i przed wygenerowaniem jakiegokolwiek kodu QR.
4.3 Zarządzanie katalogami
Aplikacja wykorzystuje metodę EnsureDirectoryExists do sprawdzenia, czy istnieje określony katalog do przechowywania kodów QR. W przeciwnym razie tworzy katalog. Ta metoda przyjmuje parametr string, który jest ścieżką do katalogu, który ma zostać sprawdzony lub utworzony. 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
Ta metoda wykorzystuje przestrzeń nazw System.IO do interakcji z systemem plików. Najpierw sprawdza, czy katalog w podanej ścieżce istnieje, używając Directory.Exists. Jeśli katalog nie istnieje (zwracany jest kod false), tworzy go przy użyciu Directory.CreateDirectory.
Ścieżka do katalogu kodów QR jest zdefiniowana w konstruktorze klasy QR_Generator jako qrCodesDirectory, co łączy ścieżkę uruchamiania 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")
4.4 Wybór kolorów
Aplikacja udostępnia w interfejsie użytkownika dwa przyciski, z których każdy jest powiązany z metodą wyboru kolorów: btn_color_Click dla koloru QR oraz 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
Metoda UpdateColor pobiera wybrany kolor i konwertuje go do formatu IronSoftware.Drawing.Color przy użyciu ciągu szesnastkowego, a następnie aktualizuje kolor pierwszego planu lub tła 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
4.5 Dodawanie logo
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
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óry później wykorzystuje logika generowania kodu QR.
4.6 Generowanie kodów QR
Proces generowania rozpoczyna się, gdy użytkownik kliknie przycisk "Generuj", który jest powiązany z metodą btn_generate_Click. Metoda ta działa jako wyzwalacz, wywołując funkcję GenerateQRCode, w której znajduje się rzeczywista 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
W ramach metody GenerateQRCode aplikacja tworzy kod QR na podstawie określonych parametrów, w tym tekstu wejściowego i opcji stylistycznych. 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
Obiekt QrOptions określa poziom korekcji błędów, zwiększając odporność kodu QR na uszkodzenia lub zasłonięcie. Metoda CreateStyleOptions generuje obiekt QrStyleOptions, który zawiera 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
Ta metoda tworzy obiekt QrStyleOptions, który jest następnie wykorzystywany przez logikę generowania kodów QR do zastosowania preferencji użytkownika. Dostępne opcje to:
BackgroundColoriColor: Te właściwości ustawiają kolory tła i pierwszego planu kodu QR, umożliwiając spersonalizowany wygląd, który może pasować do wizerunku marki lub preferencji estetycznych.Dimensions: Ta właściwość określa rozmiar kodu QR, zapewniając elastyczność w dopasowywaniu kodu QR do różnych kontekstów lub nośników.Margins: Ta właściwość określa rozmiar marginesu wokół kodu QR, zapewniając jego oddzielenie od otaczających elementów, co może mieć kluczowe znaczenie dla skalowalności.Logo: Jeśli użytkownik zdecydował się na umieszczenie logo, konfiguruje się je tutaj, podając konkretne wymiary i promień zaokrąglenia narożników, aby uzyskać elegancki wygląd.
4.7 Zapisywanie kodu QR
Funkcja zapisywania jest uruchamiana przez przycisk "Zapisz", który jest powiązany z metodą btn_save_Click. Ta metoda wywołuje SaveQRCode, która implementuje logikę zapisywania. 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
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 zostanie zapisany 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
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
Funkcja resetowania jest powiązana z przyciskiem "Reset", który wywołuje metodę btn_reset_Click. Ta metoda z kolei wywołuje ResetFields, funkcję zaprojektowaną w celu wyczyszczenia wszystkich danych wprowadzonych przez użytkownika i przywrócenia wartości domyślnych dla wszystkich ustawień, w tym pól tekstowych, wyborów 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
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 wykorzystuje metodę ShowError do wyświetlania komunikatów o błędach w sposób przyjazny 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
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 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
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ń.

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.

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.

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.

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.

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.

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

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.

Oto zapisany kod QR wygenerowany przez IronQR:

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 ze swoimi projektami, ceny licencji zaczynają się od $799, co stanowi opłacalne rozwiązanie do generowania profesjonalnych kodów QR.
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.




