IRONSOFTWAREHOME
USO DE IRONBARCODE

¿Cómo se construye un escáner de código de barras .NET MAUI en C#?

Curtis Chau
Curtis Chau
Updated: 18 de junio de 2026

IronBarcode le permite escanear códigos de barras directamente desde archivos de imagen dentro de una aplicación .NET MAUI , sin transmisión de cámara, sin configuración de controlador, sin necesidad de bucles de permisos específicos de la plataforma.

Puede escanear códigos de barras de archivos JPEG, PNG, GIF, TIFF y BMP con una sola llamada de método. El mismo código apunta a Windows, Android e iOS sin modificaciones. Comience con una prueba gratuita para seguir los ejemplos de código a continuación.

¿Cómo se crea un proyecto .NET MAUI para escanear códigos de barras?

Configurar un proyecto .NET MAUI en Visual Studio es sencillo. Inicie Visual Studio 2022 o posterior, seleccione Crear un nuevo proyecto , elija la plantilla Aplicación .NET MAUI , ingrese el nombre de su proyecto y seleccione sus plataformas de destino. Este tutorial se centra en la implementación de Windows, aunque el mismo proyecto se ejecuta en Android e iOS. .NET MAUI es el marco multiplataforma de Microsoft para crear aplicaciones nativas móviles y de escritorio con C# y XAML a partir de una única base de código compartida.

A diferencia de las soluciones basadas en cámara, como ZXing.Net.MAUI, que requieren configuración de control CameraView y registro MauiProgram.cs, IronBarcode no necesita configuración especial. Tu MauiProgram.cs se mantiene en el estado de plantilla predeterminado. Esto mantiene su código de inicio libre de registros de controladores de terceros y reduce la superficie para errores de inicialización en el momento del lanzamiento.

Para instalar IronBarcode, ejecute este comando en la consola del Administrador de paquetes :

PM > Install-Package BarCode

Este paquete único le ofrece escaneo de códigos de barras, reconocimiento de códigos QR, detección de múltiples códigos de barras y generación de códigos de barras. No se necesitan dependencias adicionales.

Para activar IronBarcode en producción, establece tu clave de licencia dentro de App.xaml.cs o MauiProgram.cs:

IronBarCode.License.LicenseKey = "YOUR_IRONBARCODE_LICENSE_KEY";

Puede obtener una clave desde la página de licencias de IronBarcode o comenzar con una licencia de prueba gratuita .

¿En qué se diferencian los permisos para el escaneo basado en imágenes?

Los lectores de códigos de barras tradicionales basados ​​en cámaras requieren permisos explícitos en los manifiestos de la plataforma. En Android, añades a AndroidManifest.xml:

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

En iOS, declaras NSCameraUsageDescription en Info.plist. El manejo de permisos denegados en tiempo de ejecución agrega rutas de error que son fáciles de pasar por alto.

Dado que IronBarcode lee desde un flujo de archivos en lugar de una vista previa de la cámara, solo necesita acceso al sistema de archivos. En Windows esto se concede automáticamente. En Android y iOS, FilePicker gestiona el consentimiento del usuario cuando el usuario selecciona una imagen, sin necesidad de solicitudes de permiso manuales.

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

Una interfaz mínima (un botón selector de imágenes, un área de visualización de imágenes y una etiqueta de resultados) cubre la mayoría de los escenarios de escaneo de códigos de barras. El siguiente XAML crea ese diseño para un ContentPage de .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 appear here" />
        </VerticalStackLayout>
    </ScrollView>
</ContentPage>
XML

El diseño proporciona un botón para activar el selector de archivos, un área de visualización para la imagen elegida y una etiqueta para los valores del código de barras decodificados. Se representa correctamente en todas las plataformas de destino .NET MAUI sin ajustes específicos de cada plataforma.

Para aplicaciones de producción, considera reemplazar ResultsLabel con un CollectionView para mostrar múltiples resultados de códigos de barra en una lista desplazable, especialmente al escanear documentos que contienen más de un código de barras.

¿Cómo escanear códigos de barras desde archivos de imagen en .NET MAUI?

El código por detrás en MainPage.xaml.cs gestiona la selección de imágenes y la lectura de códigos de barras. BarcodeReader.Read acepta una ruta de archivo y devuelve una colección BarcodeResults. Cada elemento en la colección expone el Value del código de barras, BarcodeType, y las coordenadas de posición.

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 the system file picker filtered to image types
            var result = await FilePicker.PickAsync(new PickOptions
            {
                FileTypes = FilePickerFileType.Images,
                PickerTitle = "Select a barcode image"
            });

            if (result != null)
            {
                // Display the selected image in the UI
                var stream = await result.OpenReadAsync();
                SelectedImageDisplay.Source = ImageSource.FromStream(() => stream);

                // Decode all barcodes found in the image
                var barcodes = BarcodeReader.Read(result.FullPath);

                if (barcodes.Count > 0)
                {
                    // Build a display string listing each barcode type and value
                    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: {ex.Message}";
        }
    }
}

BarcodeReader.Read procesa el archivo en la ruta dada, detecta automáticamente todas las simbologías de códigos de barra presentes y devuelve resultados inmediatamente. El método admite todos los principales formatos de códigos de barras 1D y 2D, incluidos Código 128, Código 39, Código QR, Data Matrix, PDF417 y EAN-13.

La llamada FilePicker.PickAsync limita el selector a tipos de imagen, por lo que los usuarios no pueden seleccionar accidentalmente archivos que no sean de imagen. Si result es null, el usuario canceló -- la protección if (result != null) maneja eso silenciosamente.

Para mensajes de confirmación breves, DisplayAlert proporciona un diálogo modal sin requerir elementos de UI adicionales:

private async void ShowScanSummary(BarcodeResults barcodes)
{
    if (barcodes.Count > 0)
    {
        // Inform the user how many barcodes were detected
        string message = $"Found {barcodes.Count} barcode(s) in the image.";
        await DisplayAlert("Scan Complete", message, "OK");
    }
    else
    {
        await DisplayAlert("No Results", "No barcodes were found in the image.", "OK");
    }
}

Este patrón funciona bien para flujos de confirmación simples. Para aplicaciones que necesitan actuar sobre los valores decodificados -- por ejemplo, buscar un producto por su código de barras en un sistema de gestión de inventario de códigos de barras -- pasa la colección barcodes a tu capa de lógica empresarial directamente desde el manejador OnSelectImage.

¿Cómo escanear múltiples códigos de barras y ajustar la velocidad de detección?

Cuando una imagen contiene varios códigos de barras, IronBarcode los detecta todos de forma predeterminada. Para un mejor rendimiento cuando sabes qué formatos esperar, configura BarcodeReaderOptions antes de llamar a BarcodeReader.Read:

using IronBarCode;

// Target only QR codes and Code 128 for faster detection
var options = new BarcodeReaderOptions
{
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes     = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    Speed                  = ReadingSpeed.Balanced
};

var barcodes = BarcodeReader.Read(imagePath, options);

foreach (var barcode in barcodes)
{
    Console.WriteLine($"Type: {barcode.BarcodeType} | Value: {barcode.Value}");
}

La propiedad ExpectBarcodeTypes limita el motor de detección a las simbologías especificadas. Establecer Speed en ReadingSpeed.Faster es adecuado para imágenes de alto contraste y sin distorsiones. ReadingSpeed.Detailed aplica pases adicionales de corrección de imagen y maneja rotación, inclinación y entradas de baja resolución a costa de tiempo de procesamiento adicional.

ExpectMultipleBarcodes = true indica al lector que continúe escaneando después de la primera coincidencia en lugar de devolver el resultado anticipadamente. En escenarios de código de barras único, omitir esta opción ahorra algunos milisegundos en cada escaneo.

Esta configuración hace que el escáner sea práctico para una variedad de aplicaciones: una aplicación minorista que lee códigos de barras de productos, una herramienta de almacén que procesa etiquetas de códigos de barras impresas en fotos de envíos o un flujo de trabajo de documentos que extrae códigos QR de facturas cargadas.

¿Cómo manejar imágenes desafiantes o de baja calidad?

Las imágenes de producción rara vez son impecables. Las fotos de almacén tomadas con poca luz, las capturas de pantalla de clientes de correo electrónico y los documentos escaneados introducen ruido, artefactos de compresión y distorsión geométrica. IronBarcode expone ImageFilterCollection para preprocesar imágenes antes de decodificar:

using IronBarCode;
using IronSoftware.Drawing;

// Apply corrections for a low-quality warehouse photo
var options = new BarcodeReaderOptions
{
    ImageFilters = new ImageFilterCollection
    {
        new SharpenFilter(),
        new ContrastFilter(1.2f),
        new DenoiseFilter()
    },
    Speed = ReadingSpeed.Detailed
};

var barcodes = BarcodeReader.Read(imagePath, options);

SharpenFilter recupera la definición de borde de capturas comprimidas o desenfocadas. ContrastFilter ayuda cuando la iluminación es desigual. DenoiseFilter reduce el moteado de escaneos de baja resolución. Combinar estos filtros con ReadingSpeed.Detailed maximiza las tasas de lectura en material difícil.

Para las aplicaciones .NET MAUI que aceptan imágenes cargadas por el usuario desde una variedad de fuentes, aplicar un filtro conservador establecido de manera predeterminada y escalar a una corrección más agresiva en un segundo reintento mejora la experiencia del usuario sin agregar latencia visible en el caso común. También puedes pasar un Uri o byte[] directamente a BarcodeReader.Read, lo cual es útil cuando la imagen llega desde una respuesta de red en lugar del sistema de archivos. Consulte las guías prácticas de IronBarcode para obtener ejemplos de fuentes de entrada adicionales.

¿Por qué el escaneo basado en imágenes es adecuado para las aplicaciones .NET MAUI ?

El escaneo con cámara en vivo a través de un control CameraView requiere concesiones de permiso específicas de la plataforma, gestión del ciclo de vida para la vista previa de la cámara y manejo de eventos de enfoque. En iOS esto también significa configurar AVCaptureSession; en Android, CameraX. Cada plataforma agrega sus propios modos de falla.

El escaneo basado en imágenes elimina toda esa categoría de preocupación. La referencia del API de IronBarcode muestra que BarcodeReader.Read acepta una ruta de archivo, un Stream, un Bitmap, o un byte[] -- cualquier representación que tu aplicación MAUI pueda producir. Esto significa que la misma lógica de escaneo funciona ya sea que la imagen provenga de FilePicker, una descarga de red, una página PDF renderizada a mapa de bits o un archivo adjunto de correo electrónico.

El consumo de batería es menor porque el hardware de la cámara permanece apagado. No hay parpadeo en la interfaz de usuario desde una vista previa en vivo y no es necesario administrar eventos del ciclo de vida de la cámara durante la suspensión y reanudación de la aplicación. En formatos de tableta y escritorio -- donde una vista previa de cámara en vivo rara vez es apropiada -- la decodificación basada en imagen es el estándar natural en lugar de una solución de compromiso. Los usuarios pueden abrir archivos desde almacenamiento en la nube, carpetas locales o rollos de cámara con la misma llamada FilePicker sin importar el tipo de dispositivo.

Para flujos de trabajo donde los usuarios fotografían etiquetas de códigos de barra y las cargan -- común en aplicaciones web ASP.NET escáner de código de barras -- la misma llamada BarcodeReader.Read funciona tanto en el cliente móvil como en el servidor, eliminando la necesidad de mantener dos implementaciones de escaneo.

¿Cómo se compara IronBarcode con ZXing .NET.MAUI?

ZXing .NET.MAUI apunta al escaneo de cámara en vivo y funciona bien cuando la retroalimentación del visor en tiempo real es un requisito del producto. Requiere integración CameraView, registro del manejador de plataforma y solicitudes de permiso en tiempo de ejecución.

IronBarcode apunta a la decodificación basada en archivos y secuencias, que cubre la mayoría de los flujos de trabajo de documentos empresariales. Admite una gama más amplia de simbologías, incluidas PDF417 , Data Matrix y Code 128 , y proporciona un preprocesamiento de filtro de imagen que ZXing no expone. Para aplicaciones donde los usuarios capturan o cargan imágenes en lugar de escanear elementos en vivo, IronBarcode es la opción más adecuada.

Si su aplicación necesita escaneo de cámara en vivo además de decodificación basada en archivos, puede combinar ambas bibliotecas: ZXing .NET.MAUI para el flujo de trabajo del visor y IronBarcode para el procesamiento de archivos por lotes.

¿Cuales son tus próximos pasos?

Construir un escáner de código de barras .NET MAUI con IronBarcode requiere menos de 30 líneas de código C#. El enfoque del archivo de imagen mantiene la base de código de MAUI libre de la lógica de permisos de la cámara y de la inicialización específica de la plataforma, y ​​la misma llamada de escaneo se ejecuta de manera idéntica en Windows, Android e iOS.

La documentación de la API de IronBarcode cubre capacidades adicionales: lectura de códigos de barras de documentos PDF, procesamiento por lotes de múltiples imágenes, escritura de filtros de imágenes personalizados y generación de códigos de barras junto con su lectura. La descripción general de las características enumera todos los formatos y simbologías admitidos.

Comience una prueba gratuita para probar IronBarcode en su proyecto o compre una licencia cuando esté listo para la implementación de producción.

Primer Paso:
arrow pointer
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 estructurados y visualmente atractivos.

...
Leer más

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta