Saltar al pie de página
USO DE IRONBARCODE

Escáner de código de barras MAUI con IronBarcode: Guía paso a paso

Las aplicaciones móviles dependen cada vez más del escaneo de códigos de barras para la gestión de inventario, sistemas de puntos de venta y seguimiento de productos. Crear un escáner de códigos de barras MAUI te permite integrar la detección de códigos de barras directamente en tu aplicación .NET MAUI, combinando un flujo de cámara con el procesamiento de archivos de imagen para detectar códigos QR, Data Matrix y otros formatos de código de barras. Si bien muchas bibliotecas se centran en la vista previa de la cámara, IronBarcode se destaca en la lectura precisa de códigos de barras incluso en condiciones difíciles (ángulos sesgados, poca iluminación y etiquetas dañadas), todo ello sin necesidad de configuración adicional.

Esta guía recorre cada paso de la implementación del escaneo de códigos de barras en un proyecto .NET MAUI utilizando IronBarcode. Al final, podrá escanear múltiples códigos de barras desde un solo archivo de imagen, capturar códigos de barras desde la cámara de un dispositivo e integrar con confianza la biblioteca en sus propios proyectos multiplataforma.

¿Cuáles son los requisitos previos para construir un escáner de código de barras MAUI?

Antes de comenzar, asegúrese de que su entorno de desarrollo esté en orden:

  • Visual Studio 2022 (v17.8 o posterior) con la carga de trabajo .NET MAUI instalada
  • .NET 10 SDK : descarga desde el sitio oficial de .NET
  • Conocimientos básicos de C# : la familiaridad con los patrones async/await será útil.
  • Dispositivo físico o emulador configurado para probar la cámara
  • Licencia IronBarcode : hay una prueba gratuita disponible para evaluación

Asegurarse de que Visual Studio tenga la carga de trabajo MAUI instalada antes de crear el proyecto ahorra un tiempo significativo en la resolución de problemas más adelante. Puede verificar esto en el instalador de Visual Studio en "Componentes individuales" buscando "Desarrollo de UI de aplicaciones multiplataforma .NET ".

Entendiendo cómo IronBarcode se integra en MAUI

.NET MAUI le ofrece una única base de código orientada a Android, iOS, macOS y Windows. El desafío con el escaneo de códigos de barras en este entorno es que cada plataforma maneja el acceso a la cámara de manera diferente. IronBarcode soluciona este problema trabajando en la capa de procesamiento de imágenes: captura la imagen a través de MediaPicker de MAUI y luego entrega los bytes a IronBarcode para su análisis.

Esta separación de preocupaciones mantiene su código limpio y evita los SDK de código de barras específicos de la plataforma. El modelo de procesamiento fuera de línea de IronBarcode también significa que los datos del código de barras nunca salen del dispositivo, lo que es importante para las aplicaciones en industrias reguladas.

Formatos de códigos de barras compatibles

IronBarcode lee una amplia gama de formatos , incluidos:

Formatos de código de barras compatibles con IronBarcode
Categoría de formato Formatos Casos de uso comunes
1D lineal Código 128, Código 39, EAN-13, UPC-A, ITF Comercio minorista, logística y atención sanitaria
Matriz 2D Código QR, Matriz de datos, Aztec, PDF417 Pagos móviles, venta de billetes, fabricación
Postal USPS, Royal Mail, Deutsche Post Servicios de envío y postales
Especialidad MaxiCode, GS1, MicroPDF417 Cadena de suministro, transporte, paquetería

¿Cómo se configura un proyecto de escaneo de código de barras MAUI?

Comience creando un nuevo proyecto de aplicación .NET MAUI en Visual Studio 2022. Nómbrelo BarcodeScannerApp y seleccione .NET 10 como marco de destino. Visual Studio genera la estructura de proyecto MAUI estándar con carpetas específicas de la plataforma para Android, iOS, macOS y Windows.

Instalación de IronBarcode mediante NuGet

Abra la consola del Administrador de paquetes NuGet y ejecute:

Install-Package BarCode

Como alternativa, haga clic derecho en su proyecto en el Explorador de soluciones, elija "Administrar paquetes NuGet ", busque IronBarCode e instale la última versión estable. Específicamente para proyectos .NET MAUI , el paquete NuGet de IronBarcode incluye todas las dependencias nativas necesarias.

Activando su licencia

Después de la instalación, active IronBarcode con su clave de licencia al comienzo del ciclo de vida de la aplicación. El mejor lugar es en MauiProgram.cs antes de que se ejecute el generador de aplicaciones:

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

Obtenga una clave de licencia de prueba gratuita en el sitio web de IronSoftware. Las claves de prueba le permiten evaluar todas las funciones sin límite de tiempo durante el desarrollo, aunque el resultado puede incluir una marca de agua de prueba hasta que aplique la licencia completa.

¿Cómo configurar los permisos de la cámara para Android e iOS?

Los permisos de cámara específicos de la plataforma son esenciales para la funcionalidad de escaneo de códigos de barras. Cada plataforma requiere una configuración específica en sus archivos de manifiesto antes de que MediaPicker.CapturePhotoAsync() tenga éxito.

Permisos de Android

Edite Platforms/Android/AndroidManifest.xml para declarar el acceso a la cámara:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-feature android:name="android.hardware.camera.autofocus" />
XML

La entrada android.permission.CAMERA solicita permiso de tiempo de ejecución al usuario. Las declaraciones uses-feature informan a Google Play Store que su aplicación requiere hardware de cámara y capacidad de enfoque automático. Sin estos, los dispositivos Android pueden conceder la solicitud de permiso pero aún así bloquear el acceso a la cámara internamente.

Para Android 13 y versiones posteriores (nivel de API 33+), es posible que también debas manejar permisos de medios granulares en tu MainActivity.cs usando ActivityCompat.RequestPermissions. La abstracción MAUI MediaPicker maneja la mayor parte de esto automáticamente, pero se recomienda realizar pruebas físicas del dispositivo antes del lanzamiento.

Permisos de iOS

Modifique Platforms/iOS/Info.plist para incluir la descripción del uso de la cámara:

<key>NSCameraUsageDescription</key>
<string>This app requires camera access to scan barcodes</string>
<key>NSCameraUsageDescription</key>
<string>This app requires camera access to scan barcodes</string>
XML

iOS requiere una explicación legible para humanos para cada permiso sensible a la privacidad. El proceso de revisión de la App Store de Apple rechazará su aplicación si esta descripción falta o es vaga. El texto aparece en el cuadro de diálogo de permisos del sistema que se muestra al usuario la primera vez que la aplicación solicita acceso a la cámara.

Para iPadOS, también considere agregar NSPhotoLibraryUsageDescription si planea permitir que los usuarios escaneen códigos de barras de fotos guardadas además de la cámara en vivo.

Windows y macOS

Para los destinos de Windows Desktop y macOS, los permisos de acceso a la cámara se administran a través del manifiesto de la aplicación y los archivos de derechos respectivamente. El marco MAUI maneja la mayor parte de esto a nivel de plantilla, pero verifique que Package.appxmanifest en Windows incluya la capacidad del dispositivo de cámara web.

¿Cómo se crea la interfaz del escáner de código de barras?

Diseñe una interfaz de usuario en MainPage.xaml que brinde a los usuarios una respuesta clara durante el proceso de escaneo. Un diseño minimalista pero funcional incluye una vista previa de la imagen, un área de visualización de resultados y un botón de activación del escaneo:

<?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="BarcodeScannerApp.MainPage"
             Title="Barcode Scanner">
    <VerticalStackLayout Padding="20" Spacing="20">
        <Label Text="Point the camera at a barcode"
               FontSize="16"
               HorizontalOptions="Center"
               TextColor="#555555" />
        <Image x:Name="CapturedImage"
               HeightRequest="300"
               Aspect="AspectFit"
               BackgroundColor="#F0F0F0" />
        <Label x:Name="ResultLabel"
               Text="Tap Scan to begin"
               FontSize="18"
               HorizontalOptions="Center"
               FontAttributes="Bold" />
        <Label x:Name="FormatLabel"
               Text=""
               FontSize="13"
               HorizontalOptions="Center"
               TextColor="#888888" />
        <Button Text="Scan Barcode"
                Clicked="OnScanClicked"
                BackgroundColor="#007ACC"
                TextColor="White"
                CornerRadius="8"
                HeightRequest="50" />
        <Button Text="Load from Gallery"
                Clicked="OnPickFromGalleryClicked"
                BackgroundColor="#5C5C5C"
                TextColor="White"
                CornerRadius="8"
                HeightRequest="50" />
    </VerticalStackLayout>
</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="BarcodeScannerApp.MainPage"
             Title="Barcode Scanner">
    <VerticalStackLayout Padding="20" Spacing="20">
        <Label Text="Point the camera at a barcode"
               FontSize="16"
               HorizontalOptions="Center"
               TextColor="#555555" />
        <Image x:Name="CapturedImage"
               HeightRequest="300"
               Aspect="AspectFit"
               BackgroundColor="#F0F0F0" />
        <Label x:Name="ResultLabel"
               Text="Tap Scan to begin"
               FontSize="18"
               HorizontalOptions="Center"
               FontAttributes="Bold" />
        <Label x:Name="FormatLabel"
               Text=""
               FontSize="13"
               HorizontalOptions="Center"
               TextColor="#888888" />
        <Button Text="Scan Barcode"
                Clicked="OnScanClicked"
                BackgroundColor="#007ACC"
                TextColor="White"
                CornerRadius="8"
                HeightRequest="50" />
        <Button Text="Load from Gallery"
                Clicked="OnPickFromGalleryClicked"
                BackgroundColor="#5C5C5C"
                TextColor="White"
                CornerRadius="8"
                HeightRequest="50" />
    </VerticalStackLayout>
</ContentPage>
XML

El diseño proporciona dos rutas de escaneo: capturar una nueva foto con la cámara y elegir una imagen existente de la galería. Esto es importante para los flujos de trabajo en los que los usuarios fotografían códigos de barras con antelación o reciben imágenes por correo electrónico. El FormatLabel muestra el formato de código de barras detectado junto con el valor decodificado, lo que ayuda durante la depuración y la verificación del usuario.

Agregar comentarios sobre el estado del escaneo

Para una experiencia mejorada, considere envolver los botones de escaneo en un ActivityIndicator que se muestre mientras el procesamiento está en curso. La API asíncrona de IronBarcode hace que esto sea sencillo: puede configurar IsRunning = true antes de llamar a BarcodeReader.ReadAsync y restablecerlo en el bloque finally.

¿Cómo se implementa la funcionalidad del lector de código de barras?

Implemente la lógica de escaneo central en MainPage.xaml.cs. El código a continuación maneja tanto la captura de la cámara como la selección de la galería, con patrones asincrónicos adecuados y manejo de errores:

using IronBarCode;
using IronSoftware.Drawing;

namespace BarcodeScannerApp;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private async void OnScanClicked(object sender, EventArgs e)
    {
        await ScanFromSource(() => MediaPicker.Default.CapturePhotoAsync());
    }

    private async void OnPickFromGalleryClicked(object sender, EventArgs e)
    {
        await ScanFromSource(() => MediaPicker.Default.PickPhotoAsync());
    }

    private async Task ScanFromSource(Func<Task<FileResult?>> sourceFunc)
    {
        try
        {
            var photo = await sourceFunc();
            if (photo is null) return;

            using var stream = await photo.OpenReadAsync();
            using var memoryStream = new MemoryStream();
            await stream.CopyToAsync(memoryStream);
            var imageBytes = memoryStream.ToArray();

            // Show the captured image in the UI
            CapturedImage.Source = ImageSource.FromStream(() =>
                new MemoryStream(imageBytes));

            // Process with IronBarcode
            var bitmap = AnyBitmap.FromBytes(imageBytes);
            var options = new BarcodeReaderOptions
            {
                Speed = ReadingSpeed.Balanced,
                ExpectMultipleBarcodes = false
            };

            var results = await BarcodeReader.ReadAsync(bitmap, options);

            if (results.Any())
            {
                var first = results.First();
                ResultLabel.Text = $"Value: {first.Value}";
                FormatLabel.Text = $"Format: {first.BarcodeType}";
            }
            else
            {
                ResultLabel.Text = "No barcode detected";
                FormatLabel.Text = string.Empty;
            }
        }
        catch (FeatureNotSupportedException)
        {
            await DisplayAlert("Unsupported",
                "Camera is not available on this device.", "OK");
        }
        catch (PermissionException)
        {
            await DisplayAlert("Permission Required",
                "Please grant camera permission in Settings.", "OK");
        }
        catch (Exception ex)
        {
            await DisplayAlert("Error",
                $"Scanning failed: {ex.Message}", "OK");
        }
    }
}
using IronBarCode;
using IronSoftware.Drawing;

namespace BarcodeScannerApp;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private async void OnScanClicked(object sender, EventArgs e)
    {
        await ScanFromSource(() => MediaPicker.Default.CapturePhotoAsync());
    }

    private async void OnPickFromGalleryClicked(object sender, EventArgs e)
    {
        await ScanFromSource(() => MediaPicker.Default.PickPhotoAsync());
    }

    private async Task ScanFromSource(Func<Task<FileResult?>> sourceFunc)
    {
        try
        {
            var photo = await sourceFunc();
            if (photo is null) return;

            using var stream = await photo.OpenReadAsync();
            using var memoryStream = new MemoryStream();
            await stream.CopyToAsync(memoryStream);
            var imageBytes = memoryStream.ToArray();

            // Show the captured image in the UI
            CapturedImage.Source = ImageSource.FromStream(() =>
                new MemoryStream(imageBytes));

            // Process with IronBarcode
            var bitmap = AnyBitmap.FromBytes(imageBytes);
            var options = new BarcodeReaderOptions
            {
                Speed = ReadingSpeed.Balanced,
                ExpectMultipleBarcodes = false
            };

            var results = await BarcodeReader.ReadAsync(bitmap, options);

            if (results.Any())
            {
                var first = results.First();
                ResultLabel.Text = $"Value: {first.Value}";
                FormatLabel.Text = $"Format: {first.BarcodeType}";
            }
            else
            {
                ResultLabel.Text = "No barcode detected";
                FormatLabel.Text = string.Empty;
            }
        }
        catch (FeatureNotSupportedException)
        {
            await DisplayAlert("Unsupported",
                "Camera is not available on this device.", "OK");
        }
        catch (PermissionException)
        {
            await DisplayAlert("Permission Required",
                "Please grant camera permission in Settings.", "OK");
        }
        catch (Exception ex)
        {
            await DisplayAlert("Error",
                $"Scanning failed: {ex.Message}", "OK");
        }
    }
}
$vbLabelText   $csharpLabel

Esta implementación utiliza un método auxiliar compartido ScanFromSource para evitar duplicar la lógica de procesamiento de imágenes entre las rutas de la cámara y la galería. El método AnyBitmap.FromBytes maneja JPEG, PNG, WebP y otros formatos de imagen comunes automáticamente; no se requiere detección de formato manual.

El objeto de resultado expone first.Value (la cadena decodificada), first.BarcodeType (la enumeración de formato) y first.BarcodeImage (una imagen recortada de la región del código de barras detectada), entre otras propiedades. Consulte la documentación de la clase BarcodeResult para obtener la lista completa.

Prueba de la implementación del escaneo

Con el código en su lugar, puedes probarlo con un código de barras estándar:

Cómo crear un escáner de código de barras MAUI con IronBarcode: Figura 2 - Código de barras de prueba de entrada

Después de escanear, el valor decodificado aparece en la pantalla:

Cómo crear un escáner de código de barras MAUI con IronBarcode: Figura 3 - Valor del código de barras escaneado

¿Cómo configurar las opciones de escaneo avanzadas?

IronBarcode expone un objeto BarcodeReaderOptions que le permite ajustar el comportamiento de detección para su caso de uso específico. Comprender estas opciones le ayudará a equilibrar la velocidad y la precisión en función de las necesidades de su aplicación.

Dirigido a tipos específicos de códigos de barras

Especificar los tipos de códigos de barras exactos que espera reduce drásticamente el tiempo de procesamiento porque IronBarcode omite las verificaciones de formato que no necesita:

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};

var results = await BarcodeReader.ReadAsync(bitmap, options);
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};

var results = await BarcodeReader.ReadAsync(bitmap, options);
$vbLabelText   $csharpLabel

Cómo crear un escáner de código de barras MAUI con IronBarcode: Figura 4 - Múltiples códigos escaneados de la misma imagen

La configuración de ExpectMultipleBarcodes = true le indica a IronBarcode que continúe escaneando después de encontrar el primer resultado, lo cual es esencial para los flujos de trabajo del almacén donde un solo comprobante de embalaje puede contener una docena de códigos de barras.

Opciones de velocidad de lectura

La enumeración ReadingSpeed ofrece cuatro niveles: ExtremeDetail, Detailed, Balanced y QuickScan. Utilice QuickScan para escenarios de gran volumen donde los códigos de barras están limpios y bien iluminados. Cambie a Detailed o ExtremeDetail al escanear desde capturas de cámara de baja resolución o etiquetas que se hayan dañado parcialmente.

Para obtener más información sobre cómo ajustar BarcodeReaderOptions , incluidos los filtros de corrección de imagen y los umbrales de confianza, la documentación proporciona ejemplos detallados.

Corrección y preprocesamiento de imágenes

IronBarcode incluye corrección de imagen incorporada que maneja automáticamente códigos de barras rotados, torcidos o mal iluminados. También puede aplicar filtros de preprocesamiento manualmente a través de BarcodeReaderOptions.ImageFilters:

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Detailed,
    ImageFilters = new ImageFilterCollection
    {
        new SharpenFilter(),
        new ContrastFilter(1.2f)
    }
};
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Detailed,
    ImageFilters = new ImageFilterCollection
    {
        new SharpenFilter(),
        new ContrastFilter(1.2f)
    }
};
$vbLabelText   $csharpLabel

Los filtros de preprocesamiento son particularmente útiles cuando la aplicación apunta a dispositivos Android más antiguos con sensores de cámara de menor calidad, o cuando es probable que los usuarios fotografíen códigos de barras en condiciones de iluminación subóptimas, como almacenes o entornos al aire libre.

¿Cómo manejar situaciones comunes de resolución de problemas?

Incluso con un escáner de código de barras MAUI bien configurado, pueden surgir problemas debido al comportamiento específico del dispositivo, problemas de calidad de la imagen o limitaciones de la plataforma.

La cámara no se abre

Si la cámara no se inicia, verifique que los permisos estén declarados correctamente tanto en AndroidManifest.xml como en Info.plist. Luego, vuelva a implementar la aplicación desde una compilación limpia en lugar de una recarga en caliente. En Android, verifique también si su dispositivo de prueba utiliza una configuración de cámara no estándar: algunos dispositivos con múltiples cámaras requieren una selección de lente explícita.

En el simulador, MediaPicker.CapturePhotoAsync() no es compatible. Pruebe siempre las funciones de la cámara en un dispositivo físico. El emulador admite PickPhotoAsync para la selección de galería, lo que puede usar para pruebas básicas de IU con imágenes precargadas.

Mala precisión de escaneo

Si IronBarcode no devuelve resultados o valores incorrectos, pruebe estos ajustes:

  • Aumente el Speed a ReadingSpeed.Detailed o ExtremeDetail
  • Agregue SharpenFilter y ContrastFilter al flujo de trabajo del filtro de imágenes
  • Asegúrese de que la resolución de la imagen capturada sea de al menos 720p; las resoluciones más bajas provocan detecciones fallidas con formatos densos como Data Matrix.
  • Verifique si el tipo de código de barras está incluido en su máscara ExpectBarcodeTypes

La guía de solución de problemas de IronBarcode cubre pasos de diagnóstico adicionales para problemas específicos del formato.

Gestión de la memoria

Las imágenes de cámara grandes consumen una cantidad significativa de memoria cuando se cargan en MemoryStream. Utilice siempre declaraciones using en todos los objetos de flujo para garantizar su eliminación. Para los flujos de trabajo de escaneo continuo donde los usuarios escanean múltiples elementos en secuencia, también llame a bitmap.Dispose() explícitamente después del procesamiento en lugar de esperar al recolector de elementos no utilizados.

En dispositivos Android con espacio de almacenamiento limitado, considere reducir la resolución de la imagen antes de pasarla a IronBarcode si los escaneos son de códigos de barras limpios y de alto contraste que no requieren una resolución completa para decodificarse con precisión.

Comportamiento de iOS específico de la plataforma

En iOS, la primera vez que la aplicación solicita permiso para la cámara, el sistema muestra un cuadro de diálogo único. Si el usuario lo niega, las llamadas posteriores a CapturePhotoAsync arrojarán un PermissionException. Maneje este caso dirigiendo al usuario a Configuración, lo cual puede hacer con AppInfo.ShowSettingsUI().

Confirme que NSCameraUsageDescription esté presente en Info.plist antes de enviarlo a la App Store. La falta de cadenas de privacidad provoca un rechazo automático sin una explicación detallada del equipo de revisión. Revise las Pautas de interfaz humana de Apple para el acceso a la cámara para conocer las mejores prácticas sobre el tiempo y los mensajes de las solicitudes de permiso.

¿Cuales son tus próximos pasos?

Ahora que tiene un escáner de código de barras MAUI en funcionamiento con IronBarcode, hay varias rutas disponibles según los requisitos de su aplicación:

  • Generar códigos de barras : IronBarcode incluye una API de generación de códigos de barras para crear códigos QR, etiquetas Code 128 y otros formatos a partir de datos de cadenas.
  • Escaneo por lotes : procese múltiples archivos de imagen en un bucle usando BarcodeReader.ReadAsync con ExpectMultipleBarcodes = true; Vea los ejemplos de escaneo por lotes
  • Extracción de código de barras PDF : IronBarcode puede leer códigos de barras incrustados en documentos PDF utilizando la misma clase BarcodeReader; Explora la documentación de lectura de códigos de barras en PDF
  • Estilo y marca : personalice la salida visual de los códigos de barras generados con colores, logotipos y anotaciones; ver las opciones de estilo del código de barras
  • Otros productos de IronSoftware : si su aplicación MAUI también necesita generación de PDF, OCR o compatibilidad con hojas de cálculo, explore la Iron Suite completa para obtener capacidades multiplataforma consistentes.

Comience con una licencia de prueba gratuita para implementar sin restricciones durante su período de evaluación. Para conocer las opciones de licencias de producción y precios por volumen, visite la página de precios de IronBarcode . El portal de documentación de IronBarcode y el repositorio GitHub de IronBarcode proporcionan ejemplos de código adicionales y soporte de la comunidad.

Preguntas Frecuentes

¿Cuál es la ventaja de usar IronBarcode para un escáner de códigos de barras MAUI?

IronBarcode procesa códigos de barras en la capa de imagen, funciona sin conexión, admite más de 30 formatos y maneja condiciones desafiantes como ángulos sesgados y poca iluminación sin configuración adicional.

¿Puede IronBarcode detectar múltiples códigos de barras en una imagen?

Sí. Establezca ExpectMultipleBarcodes = true en BarcodeReaderOptions y llame a BarcodeReader.ReadAsync. IronBarcode devolverá todos los códigos de barras detectados en la colección de resultados.

¿Cómo configuro los permisos de la cámara para Android e iOS en MAUI?

Para Android, agregue los elementos "CÁMARA uses-permission" y "uses-feature" a AndroidManifest.xml. Para iOS, agregue NSCameraUsageDescription con una explicación legible a Info.plist.

¿ IronBarcode admite el escaneo de códigos de barras sin conexión?

Sí. IronBarcode procesa las imágenes completamente en el dispositivo sin enviar datos a servidores externos, lo cual es importante para las aplicaciones que priorizan la privacidad.

¿Qué formatos de código de barras admite IronBarcode en MAUI?

IronBarcode es compatible con códigos QR, Código 128, Código 39, EAN-13, UPC-A, Data Matrix, PDF417, Aztec, MaxiCode y muchos más. Puede seleccionar formatos específicos mediante las opciones de codificación de código de barras.

¿Cómo puedo mejorar la precisión del escaneo para imágenes de mala calidad?

Cambie ReadingSpeed ​​a Detailed o ExtremeDetail, agregue SharpenFilter y ContrastFilter a ImageFilters y asegúrese de que la imagen capturada tenga una resolución de al menos 720p.

¿Puede IronBarcode leer códigos de barras de archivos PDF en una aplicación MAUI?

Sí. La clase BarcodeReader de IronBarcode puede extraer códigos de barras incrustados en documentos PDF utilizando la misma API ReadAsync utilizada para archivos de imagen.

¿Cómo manejo PermissionException cuando se niega el acceso a la cámara?

Capture PermissionException en un bloque try/catch y llame a AppInfo.ShowSettingsUI() para dirigir al usuario a la configuración de su dispositivo, donde puede volver a habilitar el acceso a la cámara.

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

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame