Jak zbudować skaner kodów QR w WPF

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

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.

Wymagania wstępne

  1. Visual Studio 2022 z zainstalowanym środowiskiem programistycznym .NET dla komputerów stacjonarnych
  2. 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>
XML

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.

Sample QR code encoding https://ironsoftware.com for testing the WPF QR scanner

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
$vbLabelText   $csharpLabel

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.

WPF QR Code Scanner using IronQR — decoded result displayed in the window

Wartość odkodowanego kodu QR wyświetlona w oknie WPF

Pobierz projekt

Kliknij tutaj, aby pobrać kompletny projekt WpfQrScanner.

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.

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.