# C# Generator kodów QR Application
<div class="alert alert-info iron-variant-1" role="alert">
<a href="/csharp/qr/">IronQR</a> to zupełnie nowa biblioteka QR Code .NET od Iron Software. Wykorzystaj najnowsze techniki uczenia maszynowego do odczytu kodów QR z dowolnego kąta z wysoką dokładnością. Generuj i dostosowuj nowe kody QR z łatwością! <a href="/csharp/qr/tutorials/csharp-qr-code-generator/">Rozpocznij z IronQR</a> już teraz!
</div>
Witamy w naszym przewodniku po tworzeniu [kodów QR](https://en.wikipedia.org/wiki/QR_code) 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](/csharp/qr/), 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.
<div class="hsg-featured-snippet">
<h2>Jak stworzyć generator kodów QR w C#</h2>
<ol>
<li>Utwórz aplikację Windows Forms w Visual Studio</li>
<li><a class="js-modal-open" data-modal-id="trial-license-after-download" href="https://www.nuget.org/packages/IronQR/">Zainstaluj bibliotekę QR za pomocą NuGet</a></li>
<li>Zaprojektuj elementy frontendowe formularza</li>
<li>Napisz logikę generowania kodów QR</li>
<li>Uruchom aplikację i zacznij tworzyć kody QR</li>
</ol>
</div>
## Zainstaluj bibliotekę generatora kodów QR w C#
!!!--LIBRARY_START_TRIAL_BLOCK--!!!
-----------
Zanim zaczniemy, musimy zainstalować pakiet `IronQR` z NuGet.
```shell
:ProductInstall
```
## IronQR: biblioteka IronQR dla języka C#
Biblioteka [IronQR](/csharp/qr/) 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](/csharp/qr/examples/read-qr-code/) i [generowania ](/csharp/qr/examples/generate-qr-code/)[kodów QR](/csharp/qr/examples/read-qr-code/), 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.
```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
}
```
Proces rozpoczyna się przez włączenie niezbędnych przestrzeni nazw: `IronQr` i `IronSoftware.Drawing`, z konkretnym zaznaczeniem `Color` z przestrzeni nazw `IronSoftware.Drawing` do obsługi manipulacji obrazami.
Przed rozpoczęciem procesu odczytu kodu QR, konieczne jest aktywowanie oprogramowania za pomocą klucza licencyjnego, przypisując go do `IronQr.License.LicenseKey`. Następnie kod ładuje obraz 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 odbywa się poprzez utworzenie obiektu `QrImageInput`, który służy jako pojemnik na obraz.
Rdzeń tej funkcji znajduje się w klasie `QrReader`, która jest instancjonowana i używana do wykonania operacji odczytu kodu QR. Czytnik analizuje przygotowany obraz, szukając wszystkich zawartych tam kodów QR. Wynikiem tej operacji jest kolekcja obiektów `QrResult`, z których każdy reprezentuje wykryty kod QR w obrazie.
Aby uzyskać dostęp i wykorzystać dane zakodowane w kodach QR, kod iteruje po kolekcji wyników używając pętli `foreach`. Każdy obiekt `QrResult` zawiera właściwości takie jak wartość kodu QR, która może być odczytywana i wyświetlana.
### 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.
```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);
```
### 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.
```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}");
}
}
```
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#.

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

## 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. Wpisz `IronQR` w polu wyszukiwania i naciśnij **Enter**.

3. Znajdź **IronQR** na liście i kliknij **Zainstaluj** obok niego.

### Zainstaluj za pomocą konsoli menedżera pakietów NuGet
1. Przejdź do **Narzędzia > Menedżer pakietów NuGet > Konsola Menedżera pakietów**.
<div class="content-img-align-center">
<img src="/static-assets/qr/tutorials/csharp-qr-code-generator-application/nuget-package-manager.webp" alt="Menedżer pakietów NuGet" class="img-responsive add-shadow img-margin" />
</div>
2. Wpisz `Install-Package IronQr` i naciśnij Enter.
<div class="content-img-align-center">
<img src="/static-assets/qr/tutorials/csharp-qr-code-generator-application/install-ironqr-via-pm.webp" alt="Zainstaluj IronQR" class="img-responsive add-shadow img-margin" />
</div>
## Krok 3: Projekt interfejsu użytkownika
<div class="content-img-align-center">
<img src="/static-assets/qr/tutorials/csharp-qr-code-generator-application/qr-code-generator.webp" alt="Generator kodów QR" class="img-responsive add-shadow img-margin" />
</div>
### 3.1 Nagłówek tytułu
<div class="content-img-align-center">
<img src="/static-assets/qr/tutorials/csharp-qr-code-generator-application/generate-qr-code.webp" alt="Generuj kod QR" class="img-responsive add-shadow img-margin" />
</div>
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.
#### Wybór logo
<div class="content-img-align-center">
<img src="/static-assets/qr/tutorials/csharp-qr-code-generator-application/select-logo.webp" alt="Wybierz logo" class="img-responsive add-shadow img-margin" />
</div>
Obszar "Wybierz logo" pozwala na dodatkową warstwę personalizacji. Użytkownicy mogą przesłać logo, które zostanie osadzone w kodzie QR.
#### Konfiguracja kolorów
<div class="content-img-align-center">
<img src="/static-assets/qr/tutorials/csharp-qr-code-generator-application/background-color.webp" alt="Kolor tła" class="img-responsive add-shadow img-margin" />
</div>
Przyciski do wyboru koloru pozwalają użytkownikom dostosować paletę kolorów swojego kodu QR.
### 3.3 Parametry stylistyczne
<div class="content-img-align-center">
<img src="/static-assets/qr/tutorials/csharp-qr-code-generator-application/styling.webp" alt="Stylizacja" class="img-responsive add-shadow img-margin" />
</div>
#### 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.
<div class="content-img-align-center">
<img src="/static-assets/qr/tutorials/csharp-qr-code-generator-application/qr-output.webp" alt="Wyjście QR" class="img-responsive add-shadow img-margin" />
</div>
### 3.5 Przyciski akcji
#### Wygeneruj kod QR
Uruchamia proces tworzenia kodu QR.
<div class="content-img-align-center">
<img src="/static-assets/qr/tutorials/csharp-qr-code-generator-application/qr-code-in-csharp.webp" alt="Kod QR w C#" class="img-responsive add-shadow img-margin" />
</div>
#### Zapisz kod QR
Otwiera dialog do zapisywania kodu QR.
<div class="content-img-align-center">
<img src="/static-assets/qr/tutorials/csharp-qr-code-generator-application/save.webp" alt="Oszczędź" class="img-responsive add-shadow img-margin" />
</div>
#### Resetujuj formularz
Czyści wszystkie poprzednie dane wejściowe i wybory.
<div class="content-img-align-center">
<img src="/static-assets/qr/tutorials/csharp-qr-code-generator-application/reset.webp" alt="Resetuj" class="img-responsive add-shadow img-margin" />
</div>
## Krok 4: Napisz logikę zaplecza
### 4.1 Konfiguracja i inicjalizacja
Zawiera niezbędne przestrzenie nazw: `IronQr` i `IronSoftware.Drawing`.
```cs
using IronQr;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
```
```cs
public QR_Generator()
{
InitializeComponent();
SetLicenseKey();
EnsureDirectoryExists(qrCodesDirectory);
}
```
### 4.2 Konfiguracja klucza licencyjnego
Stosuje ważny klucz licencyjny dla biblioteki IronQR:
```csharp
private static void SetLicenseKey() {
IronQr.License.LicenseKey = "YOUR_LICENSE_KEY";
}
```
Zastąp `"YOUR_LICENSE_KEY"` swoim rzeczywistym kluczem licencyjnym.
### 4.3 Zarządzanie katalogami
Sprawdza lub tworzy niezbędne katalogi.
```cs
private static void EnsureDirectoryExists(string path)
{
if (!System.IO.Directory.Exists(path))
{
System.IO.Directory.CreateDirectory(path);
}
}
```
Ścieżka do katalogu kodów QR jest zdefiniowana w konstruktorze klasy `QR_Generator` jako `qrCodesDirectory`, która łączy ścieżkę startową aplikacji z nazwą folderu "QR Codes":
```cs
string qrCodesDirectory = System.IO.Path.Combine(Application.StartupPath, "QR Codes");
```
### 4.4 Wybór kolorów
Zapewnia komponenty dialogu koloru i funkcji narzędziowych.
```cs
private string ColorToHex(System.Drawing.Color color)
{
return $"#{color.R:X2}{color.G:X2}{color.B:X2}";
}
```
Metoda `UpdateColor` bierze 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:
```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;
}
}
```
### 4.5 Dodawanie logo
Pozwala użytkownikowi wybrać logo.
```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);
}
}
}
```
### 4.6 Generowanie kodów QR
Zawiera logikę do generowania kodów QR na podstawie danych wejściowych użytkownika.
```cs
private void btn_generate_Click(object sender, EventArgs e)
{
GenerateQRCode();
}
```
Obiekt `QrOptions` definiuje poziom korekcji błędów, poprawiając odporność kodu QR na uszkodzenia lub zasłonięcia. Metoda `CreateStyleOptions` generuje obiekt `QrStyleOptions`, który zawiera niestandardowe ustawienia użytkownika, takie jak kolory, wymiary i logo. Oto szczegółowy opis metody:
```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
};
}
```
### 4.7 Zapisywanie kodu QR
Obsługuje zapisywanie wygenerowanego kodu QR.
```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);
}
}
}
```
```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;
}
```
### 4.8 Resetujowanie aplikacji
Czyści dane wejściowe użytkownika i resetuje stan formularza.
```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;
}
```
### 4.9 Obsługa błędów
Wyświetla komunikaty o błędach użytkownikom.
```cs
private static void ShowError(string title, string message)
{
MessageBox.Show($"{title}: {message}", "Error");
}
```
### 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.
```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");
}
}
}
```
## 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, note that IronQR offers a <a class="js-modal-open" data-modal-id="trial-license">free trial</a> to get you started. Jeśli zdecydujesz się na integrację IronQR w swoich projektach, licencje zaczynają się od `$liteLicense`, oferując ekonomiczne rozwiązanie do generowania kodów QR na poziomie profesjonalnym.
IronQR to zupełnie nowa biblioteka QR Code .NET od Iron Software. Wykorzystaj najnowsze techniki uczenia maszynowego do odczytu kodów QR z dowolnego kąta z wysoką dokładnością. Generuj i dostosowuj nowe kody QR z łatwością! Rozpocznij z IronQR już teraz!
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.
Start using IronQR in your project today with a free trial.
Pierwszy krok:
Zanim zaczniemy, musimy zainstalować pakiet IronQR z NuGet.
PM > Install-Package IronQR
Install-Package IronQR
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. 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.
using IronQr;using IronSoftware.Drawing;using System;using System.Collections.Generic;IronQr.License.LicenseKey = "License-Key";// Load the image file that contains the QR Codevar inputImage = AnyBitmap.FromFile("QRCode.png");// Prepare the image for QR code detectionQrImageInput qrInput = new QrImageInput(inputImage);// Initialize the QR Code readerQrReader qrReader = new QrReader();// Execute QR Code reading on the provided imageIEnumerable<QrResult> qrResults = qrReader.Read(qrInput);// Assuming you have the QR results in qrResults as beforeforeach (var result in qrResults){Console.WriteLine(result.Value); // Print the QR code content to the console}
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
}
ImportsIronQrImportsIronSoftware.DrawingImportsSystemImportsSystem.Collections.GenericIronQr.License.LicenseKey = "License-Key"' Load the image file that contains the QR CodeDim inputImage = AnyBitmap.FromFile("QRCode.png")' Prepare the image for QR code detectionDim qrInput As New QrImageInput(inputImage)' Initialize the QR Code readerDim qrReader As New QrReader()' Execute QR Code reading on the provided imageDim qrResults AsIEnumerable(OfQrResult) = qrReader.Read(qrInput)' Assuming you have the QR results in qrResults as beforeFor Each result In qrResultsConsole.WriteLine(result.Value) ' Print the QR code content to the consoleNext result
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
Proces rozpoczyna się przez włączenie niezbędnych przestrzeni nazw: IronQr i IronSoftware.Drawing, z konkretnym zaznaczeniem Color z przestrzeni nazw IronSoftware.Drawing do obsługi manipulacji obrazami.
Przed rozpoczęciem procesu odczytu kodu QR, konieczne jest aktywowanie oprogramowania za pomocą klucza licencyjnego, przypisując go do IronQr.License.LicenseKey. Następnie kod ładuje obraz 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 odbywa się poprzez utworzenie obiektu QrImageInput, który służy jako pojemnik na obraz.
Rdzeń tej funkcji znajduje się w klasie QrReader, która jest instancjonowana i używana do wykonania operacji odczytu kodu QR. Czytnik analizuje przygotowany obraz, szukając wszystkich zawartych tam kodów QR. Wynikiem tej operacji jest kolekcja obiektów QrResult, z których każdy reprezentuje wykryty kod QR w obrazie.
Aby uzyskać dostęp i wykorzystać dane zakodowane w kodach QR, kod iteruje po kolekcji wyników używając pętli foreach. Każdy obiekt QrResult zawiera właściwości takie jak wartość kodu QR, która może być odczytywana i wyświetlana.
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.
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 Codevar inputImage = AnyBitmap.FromFile("QRCode.png");QrImageInput mixedScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);IEnumerable<QrResult> mixedScanResults = new QrReader().Read(mixedScanInput);QrImageInput mlScanInput = new QrImageInput(inputImage, QrScanMode.OnlyDetectionModel);IEnumerable<QrResult> mlScanResults = new QrReader().Read(mlScanInput);QrImageInput basicScanInput = new QrImageInput(inputImage, QrScanMode.OnlyBasicScan);IEnumerable<QrResult> basicScanResults = new QrReader().Read(basicScanInput);
using IronQr;
using IronQr.Enum;
using IronSoftware.Drawing;
using 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);
ImportsIronQrImportsIronQr.EnumImportsIronSoftware.DrawingImportsSystem.Collections.GenericIronQr.License.LicenseKey = "License-Key"' Load the image file that contains the QR CodeDim inputImage = AnyBitmap.FromFile("QRCode.png")Dim mixedScanInput As New QrImageInput(inputImage, QrScanMode.OnlyDetectionModel)Dim mixedScanResults AsIEnumerable(OfQrResult) = (New QrReader()).Read(mixedScanInput)Dim mlScanInput As New QrImageInput(inputImage, QrScanMode.OnlyDetectionModel)Dim mlScanResults AsIEnumerable(OfQrResult) = (New QrReader()).Read(mlScanInput)Dim basicScanInput As New QrImageInput(inputImage, QrScanMode.OnlyBasicScan)Dim basicScanResults AsIEnumerable(OfQrResult) = (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)
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.
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}"); }}
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}");
}
}
ImportsIronQrImportsIronSoftware.DrawingImportsSystemImportsSystem.Collections.GenericIronQr.License.LicenseKey = "License-Key"Dim imageToScan = AnyBitmap.FromFile("QRCode.png")Dim qrInput As New QrImageInput(imageToScan)Dim qrScanner As New QrReader()Dim scanResults AsIEnumerable(OfQrResult) = qrScanner.Read(qrInput)For Each qrResult AsQrResultIn scanResultsConsole.WriteLine(qrResult.Value)Console.WriteLine(qrResult.Url) For Each coordinate AsIronSoftware.Drawing.PointFIn qrResult.PointsConsole.WriteLine($"{coordinate.X}, {coordinate.Y}") Next coordinateNext qrResult
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
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
Zacznij od uruchomienia Visual Studio na swoim komputerze.
Kliknij przycisk "Utwórz nowy projekt".
Wybierz Windows Forms App jako typ projektu. Pamiętaj, aby wybrać język C#.
4. Wprowadź nazwę swojego projektu i wybierz lokalizację, aby go zapisać. Następnie na kolejnym ekranie wybierz .NET Framework. Następnie kliknij Utwórz.
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
Kliknij prawym przyciskiem myszy na swój projekt w Eksploratorze Rozwiązań i wybierz Zarządzaj pakietami NuGet.
Wpisz IronQR w polu wyszukiwania i naciśnij Enter.
Znajdź IronQR na liście i kliknij Zainstaluj obok niego.
Zainstaluj za pomocą konsoli menedżera pakietów NuGet
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.
Wybór 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
Przyciski do wyboru koloru pozwalają użytkownikom dostosować paletę kolorów swojego kodu QR.
3.3 Parametry stylistyczne
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.
3.5 Przyciski akcji
Wygeneruj kod QR
Uruchamia proces tworzenia kodu QR.
Zapisz kod QR
Otwiera dialog do zapisywania kodu QR.
Resetujuj formularz
Czyści wszystkie poprzednie dane wejściowe i wybory.
Krok 4: Napisz logikę zaplecza
4.1 Konfiguracja i inicjalizacja
Zawiera niezbędne przestrzenie nazw: IronQr i IronSoftware.Drawing.
using IronQr;using IronSoftware.Drawing;using Color = IronSoftware.Drawing.Color;
using IronQr;
using IronSoftware.Drawing;
using Color = IronSoftware.Drawing.Color;
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
'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
4.2 Konfiguracja klucza licencyjnego
Stosuje ważny klucz licencyjny dla biblioteki IronQR:
PrivateShared Sub EnsureDirectoryExists(ByVal path AsString) IfNotSystem.IO.Directory.Exists(path) ThenSystem.IO.Directory.CreateDirectory(path) End IfEnd 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
Ścieżka do katalogu kodów QR jest zdefiniowana w konstruktorze klasy QR_Generator jako qrCodesDirectory, która łączy ścieżkę startową aplikacji z nazwą folderu "QR Codes":
Private Function ColorToHex(ByVal color AsSystem.Drawing.Color) AsString Return $"#{color.R:X2}{color.G:X2}{color.B:X2}"End Function
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 bierze 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 voidUpdateColor(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 AsColor, ByVal display AsControl, ByVal isBackground AsBoolean) If select_color.ShowDialog() = DialogResult.OKThen Dim hexColor = ColorToHex(select_color.Color) targetColor = New Color(hexColor) display.BackColor = select_color.Color End IfEnd Sub
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
Pozwala użytkownikowi wybrać 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 AsObject, ByVal e AsEventArgs) If select_logo.ShowDialog() = DialogResult.OKThenTry logoBmp = New AnyBitmap(select_logo.FileName) selected_logo.Image = Image.FromFile(select_logo.FileName)Catch ex AsExceptionShowError("An error occurred while loading the logo", ex.Message)EndTry End IfEnd Sub
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
4.6 Generowanie kodów QR
Zawiera logikę do generowania kodów QR na podstawie danych wejściowych użytkownika.
Private Sub btn_generate_Click(ByVal sender AsObject, ByVal e AsEventArgs)GenerateQRCode()End Sub
Private Sub btn_generate_Click(ByVal sender As Object, ByVal e As EventArgs)
GenerateQRCode()
End Sub
Obiekt QrOptions definiuje poziom korekcji błędów, poprawiając odporność kodu QR na uszkodzenia lub zasłonięcia. Metoda CreateStyleOptions generuje obiekt QrStyleOptions, który zawiera niestandardowe ustawienia użytkownika, takie jak kolory, wymiary i logo. Oto szczegółowy opis metody:
Private Function CreateStyleOptions() AsQrStyleOptions'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 QrStyleOptionsWith { .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 QrLogoWith { .Bitmap = logoBmp, .Width = 50, .Height = 50, .CornerRadius = 5 }, Nothing) }End Function
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
4.7 Zapisywanie kodu QR
Obsługuje zapisywanie wygenerowanego kodu QR.
private void btn_save_Click(object sender, EventArgs e){SaveQRCode();}private voidSaveQRCode(){ 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 AsObject, ByVal e AsEventArgs)SaveQRCode()End SubPrivate Sub SaveQRCode() If pictureBox.ImageIs Nothing ThenMessageBox.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.OKThenTry pictureBox.Image.Save(saveFileDialog.FileName, DetermineImageFormat(saveFileDialog.FileName))MessageBox.Show("QR Code has been saved!", "Success")Catch ex AsExceptionShowError("An error occurred while saving the QR code", ex.Message)EndTry End IfEnd Sub
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
Private Function DetermineImageFormat(ByVal filePath AsString) AsSystem.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 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
4.8 Resetujowanie aplikacji
Czyści dane wejściowe użytkownika i resetuje stan formularza.
Private Sub btn_reset_Click(ByVal sender AsObject, ByVal e AsEventArgs)ResetFields()End SubPrivate 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 = NothingEnd Sub
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
PrivateShared Sub ShowError(ByVal title AsString, ByVal message AsString)MessageBox.Show($"{title}: {message}", "Error")End Sub
Private Shared Sub ShowError(ByVal title As String, ByVal message As String)
MessageBox.Show($"{title}: {message}", "Error")
End Sub
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.
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; publicQR_Generator() {InitializeComponent();SetLicenseKey();EnsureDirectoryExists(qrCodesDirectory); } private static voidSetLicenseKey() {IronQr.License.LicenseKey = "License-Key"; } private static voidEnsureDirectoryExists(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 stringColorToHex(System.Drawing.Color color) { return $"#{color.R:X2}{color.G:X2}{color.B:X2}"; } private voidUpdateColor(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 voidGenerateQRCode() { 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 QrStyleOptionsCreateStyleOptions() { 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 voidSaveQRCode() { 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.ImageFormatDetermineImageFormat(string filePath) { returnSystem.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 voidResetFields() { 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 voidShowError(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");
}
}
}
ImportsIronQrImportsIronSoftware.DrawingImportsColor = IronSoftware.Drawing.ColorNamespaceIronQR_QR_Generator_WinFormsPartialPublic Class QR_GeneratorInheritsForm Private qrCodesDirectory AsString = System.IO.Path.Combine(Application.StartupPath, "QR Codes") Private bgColor AsColor = Color.White Private color AsColor = Color.Black Private logoBmp? AsAnyBitmap = Nothing Public Sub New()InitializeComponent()SetLicenseKey()EnsureDirectoryExists(qrCodesDirectory) End Sub PrivateShared Sub SetLicenseKey()IronQr.License.LicenseKey = "License-Key" End Sub PrivateShared Sub EnsureDirectoryExists(ByVal path AsString) IfNotSystem.IO.Directory.Exists(path) ThenSystem.IO.Directory.CreateDirectory(path) End If End Sub Private Sub btn_color_Click(ByVal sender AsObject, ByVal e AsEventArgs)UpdateColor(color, txt_selected_color, False) End Sub Private Sub btn_background_Click(ByVal sender AsObject, ByVal e AsEventArgs)UpdateColor(bgColor, txt_selected_bgcolor, True) End Sub Private Function ColorToHex(ByVal color AsSystem.Drawing.Color) AsString Return $"#{color.R:X2}{color.G:X2}{color.B:X2}" End Function Private Sub UpdateColor(ByRef targetColor AsColor, ByVal display AsControl, ByVal isBackground AsBoolean) If select_color.ShowDialog() = System.Windows.Forms.DialogResult.OKThen 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 AsObject, ByVal e AsEventArgs) If select_logo.ShowDialog() = System.Windows.Forms.DialogResult.OKThenTry logoBmp = New AnyBitmap(select_logo.FileName) selected_logo.Image = Image.FromFile(select_logo.FileName)Catch ex AsExceptionShowError("An error occurred while loading the logo", ex.Message)EndTry End If End Sub Private Sub btn_generate_Click(ByVal sender AsObject, ByVal e AsEventArgs)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 AsExceptionShowError("An error occurred during QR code generation or saving", ex.Message)EndTry End Sub Private Function CreateStyleOptions() AsQrStyleOptions'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 QrStyleOptionsWith { .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 QrLogoWith { .Bitmap = logoBmp, .Width = 50, .Height = 50, .CornerRadius = 5 }, Nothing) } End Function Private Sub btn_save_Click(ByVal sender AsObject, ByVal e AsEventArgs)SaveQRCode() End Sub Private Sub SaveQRCode() If pictureBox.ImageIs Nothing ThenMessageBox.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.OKThenTry pictureBox.Image.Save(saveFileDialog.FileName, DetermineImageFormat(saveFileDialog.FileName))MessageBox.Show("QR Code has been saved!", "Success")Catch ex AsExceptionShowError("An error occurred while saving the QR code", ex.Message)EndTry End If End Sub Private Function DetermineImageFormat(ByVal filePath AsString) AsSystem.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 AsObject, ByVal e AsEventArgs)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 PrivateShared Sub ShowError(ByVal title AsString, ByVal message AsString)MessageBox.Show($"{title}: {message}", "Error") End Sub End ClassEndNamespace
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ę
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, note that IronQR offers a free trial to get you started. Jeśli zdecydujesz się na integrację IronQR w swoich projektach, licencje zaczynają się od $999, oferując ekonomiczne rozwiązanie do generowania kodów QR na poziomie profesjonalnym.
Często Zadawane Pytania
Jak mogę stworzyć aplikację generującą kod QR w C#?
Aby stworzyć aplikację generującą kod QR w C#, możesz użyć biblioteki IronQR. Rozpocznij od skonfigurowania aplikacji Windows Forms w Visual Studio, zainstaluj IronQR przez NuGet i zaprojektuj frontend aplikacji. Zrealizuj logikę generowania kodów QR używając funkcji IronQR, takich jak wybór koloru i osadzanie logo.
Jakie są korzyści z używania biblioteki kodu QR dla .NET?
Biblioteka kodu QR dla .NET, taka jak IronQR, oferuje zaawansowane funkcje takie jak wysoka dokładność w odczycie kodów QR, opcje dostosowywania do generowania kodów QR oraz wsparcie dla różnych środowisk .NET. Umożliwia także zmianę rozmiaru i stylizację kodów QR.
Jak obsługiwać błędy podczas generowania kodów QR w C#?
W C#, możesz obsługiwać błędy podczas generowania kodów QR, implementując odpowiednie mechanizmy obsługi błędów, używając bloków try-catch. IronQR ułatwia płynne zarządzanie błędami, zapewniając, że wszelkie problemy podczas tworzenia kodów QR są adresowane efektywnie.
Czy mogę osadzać logo w kodach QR używając biblioteki kodu QR?
Tak, możesz osadzać logo w kodach QR używając biblioteki IronQR. Ta funkcja pozwala na ulepszenie brandingu twoich kodów QR poprzez wkomponowanie niestandardowych logo w design.
Jak zapisywać kody QR generowane w aplikacji C#?
Możesz zapisywać kody QR generowane w aplikacji C# używając funkcjonalności IronQR do określenia katalogów przechowywania. To pozwala na efektywne zarządzanie i przechowywanie generowanych kodów QR w twojej aplikacji.
Jakie kroki są potrzebne do skonfigurowania klucza licencyjnego dla biblioteki kodów QR?
Aby skonfigurować klucz licencyjny dla IronQR, musisz wprowadzić kod licencyjny do swojej aplikacji. Zwykle wymaga to dodania konkretnych linii kodu dostarczonych przez IronQR, aby aktywować bibliotekę z twoją zakupioną licencją.
Jak mogę stylizować kody QR z konkretnymi kolorami w mojej aplikacji C#?
IronQR pozwala na stylizację kodów QR z konkretnymi kolorami używając jego funkcji dostosowywania kolorów. Możesz selekcjonować kolory dla pierwszego planu i tła kodu QR używając dialogów wyboru kolorów zintegrowanych z twoją aplikacją.
Jaki jest 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 'Install', aby dodać ją do projektu. Alternatywnie, użyj Konsoli Menedżera Pakietów z poleceniem 'Install-Package IronQR'.
What is the suggested way to handle errors when using IronQR?
It's recommended to implement error handling in your application to catch exceptions that may occur during QR code generation or reading, ensuring a smooth experience.
Can I run the QR code generator application on different platforms?
Yes, with IronQR's compatibility across various .NET frameworks, you can run the QR code generator application on multiple platforms like Windows, Linux, and macOS.
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ęczników.