Escáner de códigos QR .NET MAUI

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

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.

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

  1. Visual Studio 2022 con la carga de trabajo .NET MAUI instalada
  2. 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>
XML

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.

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

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

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.

.NET MAUI QR Code Scanner using IronQR — app selecting a QR code image and displaying the decoded value

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.

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.