Escáner de códigos QR .NET MAUI
Introducción
.NET MAUI (.NET Multi-platform App UI) es un framework multiplataforma para construir aplicaciones nativas móviles y de escritorio desde una única base de código C#. Un único proyecto puede dirigirse a Android, iOS, macOS y Windows, compartiendo diseños de interfaz de usuario y lógica de negocio en todas las plataformas. La integración de MAUI con el ecosistema .NET significa que los desarrolladores pueden llegar a los usuarios móviles sin abandonar las herramientas o lenguajes familiares.
En este artículo, explicaremos cómo construir un escáner de códigos QR nativo en una aplicación .NET MAUI utilizando IronQR para decodificar códigos QR seleccionados desde la biblioteca de fotos del dispositivo.
Cómo construir un escáner de códigos QR en .NET MAUI
- Instale la biblioteca IronQR C# para escanear códigos QR en móviles
- Diseñe el diseño de la aplicación en `MainPage.xaml`
- Utilice `FilePicker` para permitir que el usuario seleccione una imagen de código QR desde el dispositivo
- Cargue la imagen y envuélvala en un `QrImageInput`
- Llame a `Read` y muestre el valor decodificado en un `Label`
IronQR: Biblioteca de códigos QR de C
Para leer códigos QR en la aplicación, utilizaremos la biblioteca IronQR .NET. Proporciona una API sencilla para detectar y decodificar códigos QR de cualquier fuente de imagen, incluidos archivos seleccionados en un dispositivo móvil. IronQR se ejecuta en todas las plataformas objetivo de MAUI y no requiere conocimientos especializados en códigos de barras para integrarse.
IronQR puede decodificar códigos QR estándar, códigos Micro QR y códigos rMQR, y acepta entrada de imágenes como archivos, flujos o mapas de bits. Se puede instalar en segundos a través de NuGet Package Manager.
Pasos para construir un escáner de códigos QR en .NET MAUI
Siga estos pasos para agregar escaneo de códigos QR a una aplicación .NET MAUI.
Prerrequisitos
- Visual Studio 2022 con la carga de trabajo .NET MAUI instalada
- Un proyecto .NET MAUI dirigido a Android o iOS
Instale IronQR
Instala la biblioteca IronQR utilizando la Consola del Administrador de Paquetes NuGet en Visual Studio. Navegue a Tools > NuGet Package Manager > Package Manager Console y ejecute:
Install-Package IronQR
Alternativamente, busque IronQR en NuGet e instale la última versión.
Diseño Front-End
La interfaz de usuario del escáner consta de un botón para iniciar la selección de imágenes, una vista de imagen para previsualizar el código QR seleccionado y una etiqueta para mostrar el resultado decodificado.
Reemplace el contenido de MainPage.xaml con lo siguiente:
<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MauiQrScanner.MainPage">
<ScrollView>
<VerticalStackLayout
Spacing="25"
Padding="30,0"
VerticalOptions="Center">
<Button
x:Name="scanButton"
Text="Select QR Code Image"
SemanticProperties.Hint="Select Image"
Clicked="OnScanButtonClicked"
HorizontalOptions="Center" />
<Image
x:Name="qrImage"
SemanticProperties.Description="Selected QR Code"
HeightRequest="200"
HorizontalOptions="Center" />
<Label
x:Name="resultLabel"
Text="Scanned Text: "
HorizontalOptions="Center"
VerticalOptions="Center" />
</VerticalStackLayout>
</ScrollView>
</ContentPage>
<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MauiQrScanner.MainPage">
<ScrollView>
<VerticalStackLayout
Spacing="25"
Padding="30,0"
VerticalOptions="Center">
<Button
x:Name="scanButton"
Text="Select QR Code Image"
SemanticProperties.Hint="Select Image"
Clicked="OnScanButtonClicked"
HorizontalOptions="Center" />
<Image
x:Name="qrImage"
SemanticProperties.Description="Selected QR Code"
HeightRequest="200"
HorizontalOptions="Center" />
<Label
x:Name="resultLabel"
Text="Scanned Text: "
HorizontalOptions="Center"
VerticalOptions="Center" />
</VerticalStackLayout>
</ScrollView>
</ContentPage>
Entrada de muestra
Utiliza el código QR a continuación como imagen de prueba. Guárdelo en su dispositivo y luego selecciónelo a través del selector de archivos de la aplicación. El valor decodificado debería mostrarse como https://ironsoftware.com.
Código QR de muestra — codifica `https://ironsoftware.com`
Escaneo de código QR con IronQR
Cuando se pulsa el botón de escaneo, FilePicker abre la biblioteca de imágenes del dispositivo. Después de que el usuario seleccione una foto, la ruta completa se carga en un AnyBitmap, que se pasa a QrReader.Read(). El valor decodificado del primer código QR detectado se muestra en la etiqueta de resultados.
Agregue el siguiente método a MainPage.xaml.cs:
using IronQr;
using IronSoftware.Drawing;
private async void OnScanButtonClicked(object sender, EventArgs e)
{
// Start scanning QR codes
var images = await FilePicker.Default.PickAsync(new PickOptions
{
PickerTitle = "Pick image",
FileTypes = FilePickerFileType.Images
});
var imageSource = images.FullPath.ToString();
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
resultLabel.Text = "Scanned Text: " + results.First().Value;
}
using IronQr;
using IronSoftware.Drawing;
private async void OnScanButtonClicked(object sender, EventArgs e)
{
// Start scanning QR codes
var images = await FilePicker.Default.PickAsync(new PickOptions
{
PickerTitle = "Pick image",
FileTypes = FilePickerFileType.Images
});
var imageSource = images.FullPath.ToString();
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
resultLabel.Text = "Scanned Text: " + results.First().Value;
}
Imports IronQr
Imports IronSoftware.Drawing
Private Async Sub OnScanButtonClicked(sender As Object, e As EventArgs)
' Start scanning QR codes
Dim images = Await FilePicker.Default.PickAsync(New PickOptions With {
.PickerTitle = "Pick image",
.FileTypes = FilePickerFileType.Images
})
Dim imageSource = images.FullPath.ToString()
Dim inputBmp = 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
resultLabel.Text = "Scanned Text: " & results.First().Value
End Sub
FilePicker.Default.PickAsync es proporcionado por la capa de abstracción de la plataforma MAUI y funciona en Android, iOS y Windows sin ningún código específico de la plataforma. AnyBitmap.FromFile maneja la decodificación de la imagen, y QrReader.Read devuelve un IEnumerable<QrResult> con una entrada por cada código QR encontrado en la imagen.
Resultado
Seleccionar una imagen de código QR activa el escaneo. El valor decodificado aparece en la etiqueta de resultados debajo de la vista previa de la imagen.
Código QR seleccionado y valor decodificado mostrado en la etiqueta de resultados
Descargar el proyecto
Haga clic aquí para descargar el proyecto completo MauiQrScanner.
Conclusión
En este artículo, demostramos cómo construir un escáner de códigos QR nativo en una aplicación .NET MAUI utilizando IronQR. La API FilePicker proporciona una selección de imágenes nativas de la plataforma en Android, iOS y Windows, mientras que QrReader.Read de IronQR maneja la decodificación en una sola llamada. El mismo enfoque se escala a múltiples códigos QR por imagen iterando sobre la colección completa de resultados en lugar de llamar a .First().
IronQR requiere una licencia para desarrollo y uso comercial. Los detalles de las licencias están disponibles aquí.
Para un análisis más profundo de la lectura de propiedades de códigos QR más allá del valor, consulte las guías Leer valor del código QR y Leer tipo de código QR.

