Cómo construir un escáner de códigos QR en WPF

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

Windows Presentation Foundation (WPF) es un framework de .NET para construir aplicaciones de escritorio de Windows con interfaces de usuario definidas por XAML. IronQR se integra directamente en WPF, habilitando el escaneo de códigos QR desde archivos de imagen seleccionados por el usuario con solo unas pocas líneas de C#.

En esta guía, construiremos una aplicación WPF que abre un cuadro de diálogo de archivos, carga una imagen seleccionada, y decodifica cualquier código QR incrustado utilizando IronQR. El enfoque es compatible con PNG, JPEG, BMP, GIF, TIFF y otros formatos de imagen comunes.

Requisitos previos

  1. Visual Studio 2022 con la carga de trabajo de desarrollo de escritorio de .NET instalada
  2. Un proyecto WPF dirigido a .NET 8 o posterior

Instalar IronQR

Instala la biblioteca IronQR utilizando la Consola del Administrador de Paquetes NuGet en Visual Studio. Navegar a Herramientas > Administrador de paquetes NuGet > Consola del administrador de paquetes y ejecutar:

Install-Package IronQR

Alternativamente, buscar IronQR en NuGet e instalar la última versión.

Diseño de ventana WPF

La interfaz de usuario del escáner utiliza un Button para activar el cuadro de diálogo de archivos y un TextBlock para mostrar el resultado decodificado. Agregar el siguiente marcado a 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

Ejemplo de entrada

Utiliza el código QR a continuación como imagen de prueba. Guárdalo en tu dispositivo, selecciónalo a través del cuadro de diálogo de archivos, y haz clic en Seleccionar imagen y escanear código QR. El valor decodificado debería mostrarse como https://ironsoftware.com.

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

Código QR de muestra — codifica `https://ironsoftware.com`

Escaneo de códigos QR con IronQR

Cuando se hace clic en el botón, OnScanButtonClicked abre un cuadro de diálogo de archivos para seleccionar una imagen. El archivo seleccionado se carga en un AnyBitmap, se pasa a QrReader.Read, y el primer valor decodificado se escribe en ResultLabel.

Agregar el siguiente método OnScanButtonClicked a 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 proporciona selección de archivos nativa de Windows filtrada a formatos de imagen comunes. AnyBitmap.FromFile maneja la decodificación de formatos para entradas PNG, JPEG, BMP, GIF, y TIFF, mientras QrReader.Read devuelve un IEnumerable<QrResult> conteniendo una entrada por cada código QR detectado. FirstOrDefault devuelve de manera segura null cuando no se encuentra un código QR, evitando excepciones en imágenes sin un código válido.

Salida

Después de seleccionar una imagen de código QR y hacer clic en el botón de escaneo, el valor decodificado aparece en el TextBlock debajo del botón.

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

Valor del código QR decodificado mostrado en la ventana de WPF

Descargar el proyecto

Haz clic aquí para descargar el proyecto completo WpfQrScanner.

Conclusión

IronQR se integra en una aplicación WPF con configuración mínima — una sola llamada QrReader.Read maneja todo el pipeline de decodificación en el escritorio. Para escanear múltiples códigos QR de una sola imagen, iterar sobre la colección completa de resultados en lugar de llamar a FirstOrDefault.

Este mismo patrón se extiende al procesamiento por lotes al recorrer un directorio de archivos de imagen, o al escaneo en tiempo real al capturar cuadros desde una alimentación de cámara web con un elemento de medios WPF.

Para más información sobre la lectura de códigos QR y los modos de escaneo disponibles, consulta las guías Leer códigos QR desde imagen y Leer códigos QR con modos de escaneo.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más
¿Listo para empezar?
Nuget Descargas 63,625 | Versión: 2026.4 recién lanzado
Still Scrolling Icon

¿Aún desplazándote?

¿Quieres una prueba rápida? PM > Install-Package IronQR
ejecuta una muestra observa cómo tu URL se convierte en un código QR.