Saltar al pie de página
USO DE IRONBARCODE

.NET MAUI Escanear código de barras en Windows Apps con una potente biblioteca de escáner de código de barras

No es necesario luchar con complejos controladores de cámara o interminables bucles de permisos para conseguir que un escáner de código de barras funcione en .NET MAUI. La mayoría de los desarrolladores piensan en "código de barras" e inmediatamente empiezan a preocuparse por la sobrecarga de la cámara en directo. Hay una ruta mejor. Al utilizar la biblioteca IronBarcode .NET, puede escanear códigos de barras directamente desde archivos de imagen, como JPEG o PNG, evitando por completo los quebraderos de cabeza de la gestión de cámaras. Aunque en este tutorial nos centramos en Microsoft Windows, el mismo código se puede utilizar en aplicaciones para Android y en proyectos para iOS.

Comience con una prueba gratuita para seguir el proceso.

¿Cómo crear una aplicación .NET MAUI para escanear códigos de barras?

Configurar un proyecto .NET MAUI en Visual Studio Code o Visual Studio es sencillo, para este tutorial, utilizaremos Visual Studio. Inicie Visual Studio 2022 o posterior, seleccione Crear un nuevo proyecto y elija la plantilla .NET MAUI App. Introduzca el nombre de su proyecto y seleccione las plataformas de destino; para este tutorial, nos centraremos en la implementación de Windows.

A diferencia de soluciones como Scanbot SDK que requieren una compleja inicialización en MauiProgram.cs con configuraciones var builder y configuración de vista previa de la cámara, IronBarcode no requiere ningún registro especial. La clase pública estática MauiProgram permanece sin cambios desde la plantilla por defecto, haciendo la integración notablemente simple para aplicaciones .NET MAUI.

Para instalar el paquete NuGet de IronBarcode, puede utilizar la paleta de comandos (Ctrl+Shift+P en VS Code) o ejecutar el siguiente comando en la consola del gestor de paquetes de Visual Studio:

Install-Package BarCode

Esta única instalación del paquete NuGet proporciona todo lo necesario para el escaneado de códigos de barras, el escaneado de códigos de barras múltiples y el reconocimiento de códigos QR. La última versión es compatible con los principales formatos de códigos de barras sin dependencias adicionales, a diferencia de los escáneres basados en cámaras que a menudo requieren manejadores de permisos y configuraciones de control CameraView.

Para utilizar IronBarcode en un entorno de producción, deberá aplicar una clave de licencia. Puede establecer esto en su MauiProgram.cs o dentro del constructor App.xaml.cs:

IronBarCode.License.LicenseKey = "YOUR_IRONBARCODE_LICENSE_KEY";
IronBarCode.License.LicenseKey = "YOUR_IRONBARCODE_LICENSE_KEY";
$vbLabelText   $csharpLabel

Gestión de permisos para iOS y Android

Una de las principales ventajas de utilizar una biblioteca .NET basada en imágenes es la simplificación del modelo de permisos. Los escáneres tradicionales basados en cámaras requieren los siguientes permisos en su AndroidManifest.xml:

  • <uses-permission android:name="android.permission.CAMERA" />
  • <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Cuando se construye para iOS y Android, estos permisos requeridos a menudo pueden dar lugar a errores de "permiso denegado" si no se gestionan a la perfección. Sin embargo, dado que IronBarcode escanea a partir de una imagen var o de un flujo de archivos, sólo es necesario asegurarse de que la aplicación tiene acceso al sistema de archivos.

¿Qué diseño de interfaz funciona mejor para un escáner de código de barras MAUI?

Una interfaz limpia y funcional permite a los usuarios seleccionar un archivo de imagen que contenga códigos de barras y ver los resultados del escaneado. El siguiente XAML crea una sencilla pero eficaz interfaz de usuario de escáner de código de barras para su aplicación .NET MAUI:

<?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="BarcodeScanner.MainPage">
    <ScrollView>
        <VerticalStackLayout Spacing="20" Padding="30">
            <Label Text="MAUI Barcode Scanner"
                   FontSize="24"
                   HorizontalOptions="Center" />
            <Button x:Name="SelectImageBtn"
                    Text="Select Image File"
                    Clicked="OnSelectImage" />
            <Image x:Name="SelectedImageDisplay"
                   HeightRequest="250" />
            <Label x:Name="ResultsLabel"
                   Text="Barcode results will display here" />
        </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="BarcodeScanner.MainPage">
    <ScrollView>
        <VerticalStackLayout Spacing="20" Padding="30">
            <Label Text="MAUI Barcode Scanner"
                   FontSize="24"
                   HorizontalOptions="Center" />
            <Button x:Name="SelectImageBtn"
                    Text="Select Image File"
                    Clicked="OnSelectImage" />
            <Image x:Name="SelectedImageDisplay"
                   HeightRequest="250" />
            <Label x:Name="ResultsLabel"
                   Text="Barcode results will display here" />
        </VerticalStackLayout>
    </ScrollView>
</ContentPage>
$vbLabelText   $csharpLabel

Este diseño proporciona un botón para la selección del archivo de imagen, un área para mostrar la imagen seleccionada y una etiqueta para los resultados de la detección del código de barras. El diseño funciona en todas las plataformas de destino .NET MAUI, manteniendo el rendimiento nativo en Windows.

¿Cómo implementar la detección de códigos de barras a partir de archivos de imagen?

En su MainPage.xaml.cs, puede utilizar métodos de ciclo de vida como async void OnAppearing para inicializar la configuración o comprobar si el usuario ha proporcionado el acceso a archivos necesario.

La clase parcial pública MainPage contiene la lógica de exploración. El método BarcodeReader.Read de IronBarcode maneja toda la complejidad de la detección de códigos de barras, soportando el escaneo de códigos de barras desde formatos JPEG, PNG, GIF, TIFF y BMP. Aquí está la implementación completa:

using IronBarCode;
namespace BarcodeScanner;
public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }
    private async void OnSelectImage(object sender, EventArgs e)
    {
        try
        {
            // Open file picker for image selection
            var result = await FilePicker.PickAsync(new PickOptions
            {
                FileTypes = FilePickerFileType.Images,
                PickerTitle = "Select a barcode image"
            });
            if (result != null)
            {
                // Display the selected image
                var stream = await result.OpenReadAsync();
                SelectedImageDisplay.Source = ImageSource.FromStream(() => stream);
                // Read barcodes from the image file
                var barcodes = BarcodeReader.Read(result.FullPath);
                // Display all detected barcode values
                if (barcodes.Count > 0)
                {
                    string output = string.Join("\n",
                        barcodes.Select(b => $"{b.BarcodeType}: {b.Value}"));
                    ResultsLabel.Text = output;
                }
                else
                {
                    ResultsLabel.Text = "No barcodes detected in image";
                }
            }
        }
        catch (Exception ex)
        {
            ResultsLabel.Text = $"Error occurred: {ex.Message}";
        }
    }
}
using IronBarCode;
namespace BarcodeScanner;
public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }
    private async void OnSelectImage(object sender, EventArgs e)
    {
        try
        {
            // Open file picker for image selection
            var result = await FilePicker.PickAsync(new PickOptions
            {
                FileTypes = FilePickerFileType.Images,
                PickerTitle = "Select a barcode image"
            });
            if (result != null)
            {
                // Display the selected image
                var stream = await result.OpenReadAsync();
                SelectedImageDisplay.Source = ImageSource.FromStream(() => stream);
                // Read barcodes from the image file
                var barcodes = BarcodeReader.Read(result.FullPath);
                // Display all detected barcode values
                if (barcodes.Count > 0)
                {
                    string output = string.Join("\n",
                        barcodes.Select(b => $"{b.BarcodeType}: {b.Value}"));
                    ResultsLabel.Text = output;
                }
                else
                {
                    ResultsLabel.Text = "No barcodes detected in image";
                }
            }
        }
        catch (Exception ex)
        {
            ResultsLabel.Text = $"Error occurred: {ex.Message}";
        }
    }
}
$vbLabelText   $csharpLabel

Resultado

.NET MAUI Escanea Códigos de Barras en Aplicaciones Windows con una Potente Librería de Escaneo de Códigos de Barras: Imagen 1 - Código de barras escaneado

El método BarcodeReader.Read detecta y descodifica automáticamente todos los formatos de código de barras presentes en el archivo de imagen. Cada resultado incluye el tipo de código de barras, el valor y la información de ubicación. Este enfoque elimina la necesidad de permisos de cámara, configuraciones específicas de Android e iOS, o el manejo de eventos de detección de códigos de barras que requieren las soluciones basadas en cámaras como el SDK de Scanbot.

private async void ProcessResults(BarcodeResults barcodes)
{
    if (barcodes.Count > 0)
    {
        string msg = $"Found {barcodes.Count} barcodes.";
        // Use await DisplayAlert to show results to the user
        await DisplayAlert("Scan Success", msg, "OK");
    }
    else
    {
        await DisplayAlert("No Results", "No barcodes were found in the image.", "OK");
    }
}
private async void ProcessResults(BarcodeResults barcodes)
{
    if (barcodes.Count > 0)
    {
        string msg = $"Found {barcodes.Count} barcodes.";
        // Use await DisplayAlert to show results to the user
        await DisplayAlert("Scan Success", msg, "OK");
    }
    else
    {
        await DisplayAlert("No Results", "No barcodes were found in the image.", "OK");
    }
}
$vbLabelText   $csharpLabel

Proporcionar comentarios de los usuarios con await DisplayAlert

En un entorno móvil o de escritorio, es crucial proporcionar información inmediata. En lugar de actualizar una etiqueta, puede utilizar el método await DisplayAlert para mostrar un cuadro de diálogo modal una vez finalizada la exploración. Esto garantiza que el usuario reconoce el resultado antes de continuar.

¿Cómo se pueden escanear varios BarCodes y configurar las opciones de detección?

Cuando su archivo de imagen contiene varios códigos de barras, IronBarcode los detecta todos automáticamente. Para un rendimiento optimizado cuando conozca los tipos de códigos de barras esperados, utilice BarcodeReaderOptions:

using IronBarCode;
// Configure options for scanning multiple barcodes
var options = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    Speed = ReadingSpeed.Balanced
};
var barcodes = BarcodeReader.Read(imagePath, options);
// Process each detected barcode
foreach (var barcode in barcodes)
{
    Console.WriteLine($"Found: {barcode.Value}");
}
using IronBarCode;
// Configure options for scanning multiple barcodes
var options = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    Speed = ReadingSpeed.Balanced
};
var barcodes = BarcodeReader.Read(imagePath, options);
// Process each detected barcode
foreach (var barcode in barcodes)
{
    Console.WriteLine($"Found: {barcode.Value}");
}
$vbLabelText   $csharpLabel

Escaneado de múltiples códigos de barras

.NET MAUI Escanea Códigos de Barras en Aplicaciones Windows con una Potente Librería de Escaneo de Códigos de Barras: Imagen 2 - Salida para escanear múltiples códigos de barras

Especificar ExpectBarcodeTypes mejora la velocidad de escaneado al centrar la detección en los formatos relevantes. La propiedad Velocidad equilibra la precisión con el rendimiento; utilice ReadingSpeed.Faster para imágenes prístinas o ReadingSpeed.Detailed para escaneos difíciles con rotación o ruido.

Esta flexibilidad hace que el escáner de códigos de barras .NET MAUI sea adecuado para diversos escenarios: aplicaciones minoristas que leen códigos de productos, sistemas de almacén que procesan etiquetas de envío o flujos de trabajo de documentos que extraen códigos QR incrustados.

¿Por qué elegir el escaneado de códigos de barras basado en imágenes?

El escaneado de códigos de barras basado en imágenes ofrece claras ventajas para el desarrollo de códigos de barras de escaneado MAUI en .NET. Mientras que Scanbot SDK y otras herramientas similares se centran en la funcionalidad de vista previa de la cámara en directo, el enfoque de IronBarcode ofrece una integración más directa, un comportamiento coherente en todas las plataformas y la capacidad de procesar archivos de imagen existentes de cualquier origen, incluidos documentos escaneados, archivos adjuntos de correo electrónico o cargas de usuarios.

Para implementaciones en Android e iOS, el mismo código funciona sin modificaciones, sin necesidad de permisos de cámara o configuraciones específicas de la plataforma.

Características avanzadas: Superposición de RA frente a procesamiento de imágenes

Mientras que algunos SDK se centran en una superposición de RA (Realidad Aumentada) en vivo para resaltar los códigos de barras en una alimentación de cámara, IronBarcode se centra en la precisión de alta velocidad para imágenes estáticas. Esto es ideal para aplicaciones multiplataforma en las que los usuarios pueden cargar recibos, etiquetas de envío o capturas de pantalla en lugar de escanear artículos "en vivo" sobre el terreno.

Al eliminar la necesidad de una cámara en directo, se reduce el consumo de batería y se evita el parpadeo de la interfaz de usuario que suele asociarse a los componentes de realidad aumentada para móviles.

Conclusión

La creación de un escáner de códigos de barras .NET MAUI con IronBarcode requiere un código mínimo, al tiempo que ofrece sólidas capacidades de detección de códigos de barras. El enfoque basado en archivos de imagen simplifica el desarrollo al eliminar los permisos de la cámara, las configuraciones específicas del dispositivo y la compleja inicialización. Usted se centra en la lógica de su aplicación mientras IronBarcode se encarga de la digitalización.

La documentación completa de la API cubre funciones adicionales, como la lectura de códigos de barras en PDF, el procesamiento por lotes y los filtros de imagen avanzados. ¿Listo para implementar la lectura de códigos de barras en su proyecto .NET MAUI multiplataforma? Compra una licencia para uso de producción, o explora el conjunto completo de características con una prueba gratuita.

Empiece con IronBarcode ahora.
green arrow pointer

Preguntas Frecuentes

¿Cómo puedo crear un escáner de código de barras en .NET MAUI?

Puede crear un escáner de código de barras en .NET MAUI utilizando la biblioteca IronBarcode .NET, que le permite escanear códigos de barras directamente desde archivos de imagen como JPEG o PNG. Este método evita la complejidad de gestionar flujos de cámaras en directo.

¿Puedo utilizar IronBarcode para escanear códigos de barras en Android e iOS?

Sí, puede utilizar el mismo código IronBarcode para escanear códigos de barras en proyectos Android e iOS. La biblioteca es compatible con estas plataformas, lo que permite una integración perfecta.

¿Cuáles son las ventajas de utilizar IronBarcode for .NET para aplicaciones MAUI?

El uso de IronBarcode en aplicaciones .NET MAUI simplifica la lectura de códigos de barras eliminando la necesidad de manejar complejos controladores de cámara o permisos. Permite escanear directamente desde archivos de imagen, haciendo el proceso más fácil y eficiente.

¿Es difícil gestionar flujos de cámara en .NET MAUI para la lectura de códigos de barras?

La gestión de flujos de cámara en .NET MAUI para la lectura de códigos de barras puede ser compleja debido a los controladores de cámara y los bucles de permisos. Sin embargo, con IronBarcode, puede evitar estos retos escaneando códigos de barras desde archivos de imagen.

¿Admite IronBarcode escanear códigos QR además de códigos de barras?

Sí, IronBarcode admite el escaneado tanto de códigos de barras como de códigos QR, proporcionando una solución versátil para diversos tipos de necesidades de escaneado de códigos en sus aplicaciones.

¿Está IronBarcode limitado únicamente a aplicaciones Windows?

No, aunque este tutorial se centra en Microsoft Windows, IronBarcode también es compatible con Android e iOS, lo que lo convierte en una opción flexible para el desarrollo multiplataforma.

¿Qué formatos de archivo de imagen admite IronBarcode para la digitalización?

IronBarcode admite el escaneado desde varios formatos de archivo de imagen, incluidos JPEG y PNG, lo que permite una amplia gama de casos de uso en el escaneado de códigos de barras.

Jordi Bardia
Ingeniero de Software
Jordi es más competente en Python, C# y C++. Cuando no está aprovechando sus habilidades en Iron Software, está programando juegos. Compartiendo responsabilidades para pruebas de productos, desarrollo de productos e investigación, Jordi agrega un valor inmenso a la mejora continua del producto. La experiencia variada lo mantiene ...
Leer más