Aplikacja generatora kodów QR w C

This article was translated from English: Does it need improvement?
Translated
View the article in English

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.

Instalacja biblioteki generatora kodów QR w C

Rozpocznij używanie IronQR w swoim projekcie już dziś dzięki darmowej wersji próbnej.

Pierwszy krok:
green arrow pointer


Zanim zaczniemy, musimy zainstalować pakiet NuGet IronQR.

Install-Package IronQR

IronQR: Biblioteka QR dla 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. Przejdźmy przez te funkcje i sprawdźmy ich przykładowe kody, które można zintegrować w dowolnym typie szablonu aplikacji .NET, na przykład w aplikacji konsolowej.

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.

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-1.cs
using IronQr;
using IronSoftware.Drawing;
using System;
using System.Collections.Generic;

IronQr.License.LicenseKey = "License-Key";

// Load the image file that contains the QR Code
var inputImage = AnyBitmap.FromFile("QRCode.png");

// Prepare the image for QR code detection
QrImageInput qrInput = new QrImageInput(inputImage);

// Initialize the QR Code reader
QrReader qrReader = new QrReader();

// Execute QR Code reading on the provided image
IEnumerable<QrResult> qrResults = qrReader.Read(qrInput);

// Assuming you have the QR results in qrResults as before
foreach (var result in qrResults)
{
    Console.WriteLine(result.Value); // Print the QR code content to the console
}
Imports IronQr
Imports IronSoftware.Drawing
Imports System
Imports System.Collections.Generic

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)

' Assuming you have the QR results in qrResults as before
For Each result In qrResults
	Console.WriteLine(result.Value) ' Print the QR code content to the console
Next result
$vbLabelText   $csharpLabel

Proces zaczyna się od włączenia niezbędnych przestrzeni nazw: IronQr i IronSoftware.Drawing, z szczególnym wyróżnieniem koloru z przestrzeni nazw IronSoftware.Drawing do manipulacji obrazami.

Przed zagłębieniem się w proces odczytu kodu QR, niezbędne jest aktywowanie oprogramowania za pomocą swojego klucza licencyjnego, przypisując go do IronQr.License.LicenseKey. Kod następnie przystępuje do ł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. Ten przygotowanie jest wykonywane przez utworzenie obiektu QrImageInput, który służy jako pojemnik dla obrazu.

Sedno tej funkcji leży w klasie QrReader, która jest instancjonowana i używana do przeprowadzenia operacji odczytu kodu QR. Czytnik analizuje przygotowany obraz, szukając wszystkich zawartych tam kodów QR. Wynik tej operacji to kolekcja obiektów QrResult, z których każdy reprezentuje wykryty kod QR w obrazie.

Aby uzyskać dostęp i użyć danych zakodowanych w kodach QR, kod iteruje przez kolekcję wyników przy użyciu 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 wyświetlić.

Opcje niestandardowego trybu odczytu kodów QR

IronQR oferuje różne tryby do odczytu kodów QR, co czyni go wszechstronnym dla różnych potrzeb.

  • Tryb Skanowania Mieszanego: Równoważy szybkość i dokładność, przydatny dla kodów QR, które nie są wyraźne lub częściowo ukryte.
  • Tryb skanowania opartego o uczenie maszynowe (ML): Wykorzystuje zaawansowaną technologię do odczytywania uszkodzonych lub trudnych do odczytania kodów QR, idealny w sytuacjach trudnych do wykrycia.
  • Podstawowy Tryb Skanowania: Najprostszy i najszybszy sposób, na jasne i proste kody QR.
:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-2.cs
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using System.Collections.Generic;

IronQr.License.LicenseKey = "License-Key";

// Load the image file that contains the QR Code
var inputImage = AnyBitmap.FromFile("QRCode.png");

QrImageInput mixedScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mixedScanResults = new QrReader().Read(mixedScanInput);

QrImageInput mlScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);
IEnumerable<QrResult> mlScanResults = new QrReader().Read(mlScanInput);

QrImageInput basicScanInput = new QrImageInput(inputImage, QrScanMode.OnlyBasicScan);
IEnumerable<QrResult> basicScanResults = new QrReader().Read(basicScanInput);
Imports IronQr
Imports IronQr.Enum
Imports IronSoftware.Drawing
Imports System.Collections.Generic

IronQr.License.LicenseKey = "License-Key"

' Load the image file that contains the QR Code
Dim inputImage = AnyBitmap.FromFile("QRCode.png")

Dim mixedScanInput As New QrImageInput(inputImage, QrScanMode.OnlyDetectionModel)
Dim mixedScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(mixedScanInput)

Dim mlScanInput As New QrImageInput(inputImage, QrScanMode.OnlyDetectionModel)
Dim mlScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(mlScanInput)

Dim basicScanInput As New QrImageInput(inputImage, QrScanMode.OnlyBasicScan)
Dim basicScanResults As IEnumerable(Of QrResult) = (New QrReader()).Read(basicScanInput)
$vbLabelText   $csharpLabel

Przeczytaj o zaawansowanych kodach QR

Zaawansowane możliwości odczytu kodów QR przez IronQR zapewniają kompleksowe podejście do skanowania i dekodowania kodów QR. Ten zestaw funkcji wykracza poza podstawowy odczyt, oferując głębszy poziom interakcji i ekstrakcji danych.

:path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-3.cs
using IronQr;
using IronSoftware.Drawing;
using System;
using System.Collections.Generic;

IronQr.License.LicenseKey = "License-Key";

var imageToScan = AnyBitmap.FromFile("QRCode.png");

QrImageInput qrInput = new QrImageInput(imageToScan);

QrReader qrScanner = new QrReader();

IEnumerable<QrResult> scanResults = qrScanner.Read(qrInput);

foreach (QrResult qrResult in scanResults)
{

    Console.WriteLine(qrResult.Value);

    Console.WriteLine(qrResult.Url);

    foreach (IronSoftware.Drawing.PointF coordinate in qrResult.Points)
    {
        Console.WriteLine($"{coordinate.X}, {coordinate.Y}");
    }
}
Imports IronQr
Imports IronSoftware.Drawing
Imports System
Imports System.Collections.Generic

IronQr.License.LicenseKey = "License-Key"

Dim imageToScan = AnyBitmap.FromFile("QRCode.png")

Dim qrInput As New QrImageInput(imageToScan)

Dim qrScanner As New QrReader()

Dim scanResults As IEnumerable(Of QrResult) = qrScanner.Read(qrInput)

For Each qrResult As QrResult In scanResults

	Console.WriteLine(qrResult.Value)

	Console.WriteLine(qrResult.Url)

	For Each coordinate As IronSoftware.Drawing.PointF In qrResult.Points
		Console.WriteLine($"{coordinate.X}, {coordinate.Y}")
	Next coordinate
Next qrResult
$vbLabelText   $csharpLabel

Aby stworzyć generator kodów QR korzystając z biblioteki IronQR w aplikacji C#, postępuj zgodnie z tymi krokami. 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

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

    Windows Forms App

  4. Wprowadź nazwę swojego projektu i wybierz lokalizację, aby go zapisać. Następnie na kolejnym ekranie wybierz .NET Framework. Następnie kliknij Utwórz.

    Konfiguracja projektu

Krok 2: Zainstaluj bibliotekę IronQR

Teraz nadszedł czas, aby zainstalować bibliotekę IronQR w projekcie. Bibliotekę IronQR można zainstalować na różne sposoby.

Zainstaluj za pomocą menedżera pakietów NuGet

  1. Kliknij prawym przyciskiem myszy na swój projekt w Eksploratorze Rozwiązań i wybierz Zarządzaj pakietami NuGet.
  2. Wprowadź IronQR w polu wyszukiwania i naciśnij Enter. Zarządzaj pakietami NuGet
  3. Znajdź IronQR na liście i kliknij Zainstaluj obok niego.

    Zainstaluj IronQR

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

  • Przejdź do Narzędzia > Menedżer pakietów NuGet > Konsola Menedżera pakietów.
    Menedżer pakietów NuGet
  • Wpisz Install-Package IronQR i naciśnij Enter.
  • Zainstaluj IronQR

    Krok 3: Projekt interfejsu użytkownika

    Generator kodów QR

    3.1 Nagłówek tytułu

    Generuj kod QR

    Po uruchomieniu aplikacji Generator kodów QR użytkownicy natychmiast widzą efektowny nagłówek zatytułowany "QR Generator IronQR", napisany pogrubioną i autorytatywną czcionką.

    3.2 Sekcja danych wejściowych

    Wprowadzanie tekstu do kodu QR

    Użytkownicy mogą wprowadzać dane, które chcą zakodować w swoim kodzie QR.

    Wybierz logo

    Obszar "Wybierz logo" pozwala na dodatkową warstwę personalizacji. Użytkownicy mogą przesłać logo, które zostanie osadzone w kodzie QR.

    Konfiguracja kolorów

    Kolor tła

    Przyciski do wyboru koloru pozwalają użytkownikom dostosować paletę kolorów swojego kodu QR.

    3.3 Parametry stylistyczne

    Stylizacja

    Ustawienia wymiarów

    Pozwala użytkownikom określić ogólny rozmiar kodu QR.

    Ustawienia marginesów

    Pozwala użytkownikom określić białą przestrzeń otaczającą kod QR.

    3.4 Podgląd wyniku

    Zapewnia podgląd w czasie rzeczywistym wygenerowanego kodu QR.

    Wyjście QR

    3.5 Przyciski akcji

    Wygeneruj kod QR

    Uruchamia proces tworzenia kodu QR.

    Kod QR w C#

    Zapisz kod QR

    Otwiera dialog do zapisywania kodu QR.

    Oszczędź

    Resetujuj formularz

    Czyści wszystkie poprzednie dane wejściowe i wybory.

    Resetuj

    Krok 4: Napisz logikę zaplecza

    4.1 Konfiguracja i inicjalizacja

    Zawiera niezbędne przestrzenie nazw: IronQr i IronSoftware.Drawing.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-4.cs
    using IronQr;
    using IronSoftware.Drawing;
    using Color = IronSoftware.Drawing.Color;
    
    
    Imports IronQr
    Imports IronSoftware.Drawing
    Imports Color = IronSoftware.Drawing.Color
    $vbLabelText   $csharpLabel
    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-5.cs
    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

    4.2 Konfiguracja klucza licencyjnego

    Stosuje ważny klucz licencyjny dla biblioteki IronQR:

    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" swoim rzeczywistym kluczem licencyjnym.

    4.3 Zarządzanie katalogami

    Sprawdza lub tworzy niezbędne katalogi.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-7.cs
    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

    Ścieżka do katalogu kodów QR jest określona w konstruktorze klasy QR_Generator jako qrCodesDirectory, co łączy ścieżkę startową aplikacji z nazwą folderu "QR Codes":

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-8.cs
    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

    Zapewnia komponenty dialogu koloru i funkcji narzędziowych.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-9.cs
    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 do formatu IronSoftware.Drawing.Color używając ciągu szesnastkowego, i aktualizuje albo kolor pierwszoplanowy, albo tło kodu QR, w zależności od wyboru. Zaktualizowano również interfejs użytkownika, aby odzwierciedlić nowy wybór kolorów:

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-10.cs
    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

    Pozwala użytkownikowi wybrać logo.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-11.cs
    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

    4.6 Generowanie kodów QR

    Zawiera logikę do generowania kodów QR na podstawie danych wejściowych użytkownika.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-12.cs
    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

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

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-14.cs
    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

    4.7 Zapisywanie kodu QR

    Obsługuje zapisywanie wygenerowanego kodu QR.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-15.cs
    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
    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-16.cs
    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

    4.8 Resetujowanie aplikacji

    Czyści dane wejściowe użytkownika i resetuje stan formularza.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-17.cs
    private void btn_reset_Click(object sender, EventArgs e)
    {
        ResetFields();
    }
    
    private void ResetFields()
    {
        txt_QR.Text = string.Empty;
        txt_dimension.Value = 200;
        txt_margin.Value = 0;
        bgColor = Color.White;
        color = Color.Black;
        txt_selected_color.BackColor = System.Drawing.Color.White;
        txt_selected_bgcolor.BackColor = System.Drawing.Color.Black;
        logoBmp = null;
        selected_logo.Image = null;
        pictureBox.Image = null;
    }
    Private Sub btn_reset_Click(ByVal sender As Object, ByVal e As EventArgs)
    	ResetFields()
    End Sub
    
    Private Sub ResetFields()
    	txt_QR.Text = String.Empty
    	txt_dimension.Value = 200
    	txt_margin.Value = 0
    	bgColor = Color.White
    	color = Color.Black
    	txt_selected_color.BackColor = System.Drawing.Color.White
    	txt_selected_bgcolor.BackColor = System.Drawing.Color.Black
    	logoBmp = Nothing
    	selected_logo.Image = Nothing
    	pictureBox.Image = Nothing
    End Sub
    $vbLabelText   $csharpLabel

    4.9 Obsługa błędów

    Wyświetla komunikaty o błędach użytkownikom.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-18.cs
    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

    4.10 Pełny przykład kodu

    Pełen kod łączący wszystkie powyższe funkcje można znaleźć w przykładowym pliku podpiętym do Twojego projektu.

    :path=/static-assets/qr/content-code-examples/tutorials/csharp-qr-code-generator-application-19.cs
    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ę

    Gdy aplikacja jest uruchamiana, główne okno pojawia się jako zorganizowane w sekcje do wejścia, stylizacji, wyjścia i działań. Postępuj zgodnie z interfejsem użytkownika, aby wprowadzić dane, dostosować kod QR i wygenerować oraz zapisać kod QR zgodnie z potrzebami.

    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.

    For those interested in exploring the capabilities of IronQR further, it's worth noting that IronQR offers a free trial to get you started. Jeżeli zdecydujesz się zintegrować IronQR w swoich projektach, licencje zaczynają się od $799, zapewniając opłacalne rozwiązanie dla profesjonalnej klasy generowania kodów QR.

    Często Zadawane Pytania

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

    Aby stworzyć aplikację do generowania kodów QR w języku C#, można skorzystać z biblioteki IronQR. Należy rozpocząć od skonfigurowania aplikacji Windows Forms w Visual Studio, zainstalować IronQR za pośrednictwem NuGet i zaprojektować interfejs użytkownika aplikacji. Następnie należy zaimplementować logikę generowania kodów QR, wykorzystując funkcje IronQR, takie jak wybór kolorów i osadzanie logo.

    Jakie są zalety korzystania z biblioteki kodów QR dla platformy .NET?

    Biblioteka kodów QR dla platformy .NET, taka jak IronQR, oferuje zaawansowane funkcje, takie jak wysoka dokładność odczytu kodów QR, opcje dostosowywania do generowania kodów QR oraz obsługa różnych środowisk .NET. Umożliwia również zmianę rozmiaru i stylizacji kodów QR.

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

    W języku C# można obsługiwać błędy podczas generowania kodów QR poprzez wdrożenie odpowiednich mechanizmów obsługi błędów przy użyciu bloków try-catch. IronQR ułatwia płynne zarządzanie błędami, zapewniając skuteczne rozwiązywanie wszelkich problemów pojawiających się podczas tworzenia kodów QR.

    Czy mogę osadzać logo w kodach QR za pomocą biblioteki kodów QR?

    Tak, za pomocą biblioteki IronQR można osadzać logo w kodach QR. Ta funkcja pozwala wzmocnić branding kodów QR poprzez włączenie niestandardowych logo do projektu.

    Jak zapisać kody QR wygenerowane w aplikacji C#?

    Możesz zapisywać kody QR wygenerowane w aplikacji C#, korzystając z funkcji IronQR do określenia katalogów przechowywania. Pozwala to na efektywne zarządzanie i przechowywanie wygenerowanych kodów QR w ramach aplikacji.

    Jakie kroki należy wykonać, aby skonfigurować klucz licencyjny dla biblioteki kodów QR?

    Aby skonfigurować klucz licencyjny dla IronQR, należy wbudować kod licencyjny w swoją aplikację. Zazwyczaj wymaga to dodania określonych linii kodu dostarczonych przez IronQR w celu aktywacji biblioteki IronQR przy użyciu zakupionej licencji.

    Jak mogę stylizować kody QR na konkretne kolory w mojej aplikacji C#?

    IronQR pozwala stylizować kody QR za pomocą określonych kolorów, korzystając z funkcji dostosowywania kolorów. Możesz wybrać kolory dla pierwszego planu i tła kodu QR, korzystając z okien dialogowych wyboru kolorów zintegrowanych z aplikacją.

    Jak wygląda proces instalacji biblioteki kodów QR w Visual Studio?

    Aby zainstalować bibliotekę kodów QR, taką jak IronQR, w Visual Studio, użyj menedżera pakietów NuGet. Wyszukaj „IronQR” i kliknij „Zainstaluj”, aby dodać ją do swojego projektu. Alternatywnie możesz użyć konsoli menedżera pakietów, wpisując polecenie „Install-Package IronQR”.

    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
    Gotowy, aby rozpocząć?
    Nuget Pliki do pobrania 63,676 | Wersja: 2026.4 just released
    Still Scrolling Icon

    Wciąż przewijasz?

    Czy chcesz szybko dowodu? PM > Install-Package IronQR
    uruchom próbkę obserwuj, jak Twój URL staje się kodem QR.