Cómo construir un escáner de códigos QR en WPF
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.
Cómo escanear un código QR en WPF
- Instalar la biblioteca C# IronQR a través de NuGet
- Agregar un `Button` y un `TextBlock` a la ventana WPF en XAML
- Abrir un cuadro de diálogo de archivos con `OpenFileDialog` para seleccionar una imagen del disco
- Cargar la imagen con `AnyBitmap.FromFile` y envolverla en un `QrImageInput`
- Llamar a `Read` y mostrar el valor decodificado en el `TextBlock`
Requisitos previos
- Visual Studio 2022 con la carga de trabajo de desarrollo de escritorio de .NET instalada
- 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>
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.
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
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.
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.

