Jak zbudować skaner kodów QR w WPF
Windows Presentation Foundation (WPF) to platforma .NET Framework służąca do tworzenia aplikacji desktopowych dla systemu Windows z interfejsami użytkownika zdefiniowanymi w języku XAML. IronQR integruje się bezpośrednio z WPF, umożliwiając skanowanie kodów QR z wybranych przez użytkownika plików graficznych za pomocą zaledwie kilku linii kodu C#.
W tym przewodniku stworzymy aplikację WPF, która otwiera okno dialogowe plików, ładuje wybrany obraz i dekoduje każdy osadzony kod QR za pomocą IronQR. Rozwiązanie obsługuje formaty PNG, JPEG, BMP, GIF, TIFF oraz inne popularne formaty obrazów.
Jak zeskanować kod QR w WPF
- Zainstaluj bibliotekę IronQR C# za pośrednictwem NuGet
- Dodaj
przyciskiblok tekstowydo okna WPF w XAML - Otwórz okno dialogowe plików za pomocą
OpenFileDialog,aby wybrać obraz z dysku - Załaduj obraz za pomocą
AnyBitmap.FromFilei umieść go wQrImageInput - Wywołaj
Readi wyświetl zdekodowaną wartość wTextBlock
Wymagania wstępne
- Visual Studio 2022 z zainstalowanym środowiskiem programistycznym .NET dla komputerów stacjonarnych
- Projekt WPF przeznaczony dla platformy .NET 8 lub nowszej
Zainstaluj IronQR
Zainstaluj bibliotekę IronQR za pomocą NuGet Package Manager Console w Visual Studio. Przejdź do Narzędzia > Menedżer pakietów NuGet > Konsola menedżera pakietów i uruchom:
Install-Package IronQR
Alternatywnie, wyszukaj IronQR na NuGet i zainstaluj najnowszą wersję.
Układ okna WPF
Interfejs użytkownika skanera używa Button do wywołania okna dialogowego pliku i TextBlock do wyświetlenia zdekodowanego wyniku. Dodaj następujący kod znaczników do MainWindow.xaml:
<StackPanel Margin="28" VerticalAlignment="Center">
<TextBlock Text="WPF QR Code Scanner" FontSize="20" FontWeight="Bold" Margin="0,0,0,16"/>
<Button x:Name="ScanButton"
Content="Select Image and Scan QR Code"
Click="OnScanButtonClicked"
Padding="12,8"
Margin="0,0,0,16"
HorizontalAlignment="Left"/>
<TextBlock x:Name="ResultLabel"
Text="Select an image to scan."
TextWrapping="Wrap"
FontSize="14"/>
</StackPanel>
<StackPanel Margin="28" VerticalAlignment="Center">
<TextBlock Text="WPF QR Code Scanner" FontSize="20" FontWeight="Bold" Margin="0,0,0,16"/>
<Button x:Name="ScanButton"
Content="Select Image and Scan QR Code"
Click="OnScanButtonClicked"
Padding="12,8"
Margin="0,0,0,16"
HorizontalAlignment="Left"/>
<TextBlock x:Name="ResultLabel"
Text="Select an image to scan."
TextWrapping="Wrap"
FontSize="14"/>
</StackPanel>
Przykładowe wejście
Użyj poniższego kodu QR jako obrazu testowego. Zapisz go na swoim urządzeniu, wybierz w oknie dialogowym plików, a następnie kliknij Wybierz obraz i zeskanuj kod QR. Wynik dekodowania powinien wyświetlać się jako https://ironsoftware.com.
Przykładowy kod QR — koduje https://ironsoftware.com
Skanowanie kodów QR przy użyciu IronQR
Po kliknięciu przycisku, OnScanButtonClicked otwiera okno dialogowe pliku do wyboru obrazu. Wybrany plik jest ładowany do AnyBitmap, przekazywany do QrReader.Read, a pierwsza zdekodowana wartość jest zapisywana do ResultLabel.
Dodaj następującą metodę OnScanButtonClicked do MainWindow.xaml.cs:
:path=/static-assets/qr/content-code-examples/get-started/wpf-qr-code-scanner.cs
using IronQr;
using IronSoftware.Drawing;
using Microsoft.Win32;
using System.Windows;
private void OnScanButtonClicked(object sender, RoutedEventArgs e)
{
// Open a file dialog to select a QR code image
var dialog = new OpenFileDialog
{
Title = "Select a QR code image",
Filter = "Image Files|*.png;*.jpg;*.jpeg;*.bmp;*.gif;*.tiff"
};
if (dialog.ShowDialog() != true) return;
var imageSource = dialog.FileName;
// Load the image into IronQR
var inputBmp = AnyBitmap.FromFile(imageSource);
// Load the asset into QrImageInput
QrImageInput imageInput = new QrImageInput(inputBmp);
// Create a QR Reader object
QrReader reader = new QrReader();
// Read the input and get all embedded QR Codes
IEnumerable<QrResult> results = reader.Read(imageInput);
// Display the first result
var firstResult = results.FirstOrDefault();
ResultLabel.Text = firstResult != null
? "Scanned Text: " + firstResult.Value
: "No QR code found in the selected image.";
}
Imports IronQr
Imports IronSoftware.Drawing
Imports Microsoft.Win32
Imports System.Windows
Private Sub OnScanButtonClicked(sender As Object, e As RoutedEventArgs)
' Open a file dialog to select a QR code image
Dim dialog As New OpenFileDialog With {
.Title = "Select a QR code image",
.Filter = "Image Files|*.png;*.jpg;*.jpeg;*.bmp;*.gif;*.tiff"
}
If dialog.ShowDialog() <> True Then Return
Dim imageSource As String = dialog.FileName
' Load the image into IronQR
Dim inputBmp As AnyBitmap = AnyBitmap.FromFile(imageSource)
' Load the asset into QrImageInput
Dim imageInput As New QrImageInput(inputBmp)
' Create a QR Reader object
Dim reader As New QrReader()
' Read the input and get all embedded QR Codes
Dim results As IEnumerable(Of QrResult) = reader.Read(imageInput)
' Display the first result
Dim firstResult As QrResult = results.FirstOrDefault()
ResultLabel.Text = If(firstResult IsNot Nothing, "Scanned Text: " & firstResult.Value, "No QR code found in the selected image.")
End Sub
OpenFileDialog zapewnia natywny wybór plików w Windows, filtrowany do powszechnych formatów obrazów. AnyBitmap.FromFile obsługuje dekodowanie formatu dla wejść PNG, JPEG, BMP, GIF i TIFF, podczas gdy QrReader.Read zwraca IEnumerable<QrResult> zawierający jeden wpis na każdy wykryty kod QR. FirstOrDefault bezpiecznie zwraca null, gdy nie zostanie znaleziony żaden kod QR, unikając wyjątków na obrazach bez poprawnego kodu.
Wynik
Po wybraniu obrazu kodu QR i kliknięciu przycisku skanowania, zdekodowana wartość pojawia się w TextBlock poniżej przycisku.
Wartość odkodowanego kodu QR wyświetlona w oknie WPF
Pobierz projekt
Wnioski
IronQR integruje się z aplikacją WPF przy minimalnej konfiguracji — pojedyncze wywołanie QrReader.Read obsługuje cały proces dekodowania na pulpicie. Aby zeskanować wiele kodów QR z jednego obrazu, należy przeiterować całą kolekcję wyników, zamiast wywoływać FirstOrDefault.
Ten sam schemat obejmuje przetwarzanie wsadowe poprzez pętlę po katalogu plików graficznych lub skanowanie w czasie rzeczywistym poprzez przechwytywanie klatek z obrazu z kamery internetowej za pomocą elementu multimedialnego WPF.
Aby dowiedzieć się więcej o czytaniu kodów QR i dostępnych trybach skanowania, zobacz przewodniki Read QR Codes from Image oraz Read QR Codes with Scan Modes.

