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. Mientras muchas bibliotecas se enfocan en la vista previa de la cámara, IronBarcode destaca al leer correctamente los códigos de barras incluso bajo condiciones desafiantes: ángulos sesgados, baja iluminación y etiquetas dañadas son manejadas sin configuración extra.
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 aborda esto trabajando en la capa de procesamiento de imágenes: capturas la imagen a través de MediaPicker de MAUI, luego entregas 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 , entre los que se incluyen:
| 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 |
| Correo | 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?
Comienza creando un nuevo proyecto de aplicación .NET MAUI en Visual Studio 2022. Nómbrelo BarcodeScannerApp y seleccione .NET 10 como el marco de trabajo objetivo. 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
Alternativamente, haz clic derecho en tu proyecto en el Explorador de Soluciones, elige "Administrar paquetes de NuGet", busca IronBarCode e instala 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 el constructor de la app se ejecute:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Obtén una clave de licencia de prueba gratuita desde el sitio web de Iron Software. Las claves de prueba te permiten evaluar todas las funciones sin restricciones de tiempo durante el desarrollo, aunque la salida puede incluir una marca de agua de prueba hasta que apliques una 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 manifiestos antes de que MediaPicker.CapturePhotoAsync() tenga éxito.
Permisos de Android
Edita 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" />
La entrada android.permission.CAMERA solicita permiso de ejecución al usuario. Las declaraciones uses-feature informan a la Google Play Store que tu 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 necesites manejar permisos de medios granulares en tu MainActivity.cs usando ActivityCompat.RequestPermissions. La abstracción de MediaPicker de MAUI maneja la mayor parte de esto automáticamente, pero se recomienda realizar pruebas en dispositivos físicos antes de la liberación.
Permisos de iOS
Modifica Platforms/iOS/Info.plist para incluir la descripción de 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>
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 considera agregar NSPhotoLibraryUsageDescription si planeas permitir que los usuarios escaneen códigos de barras desde 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 verifica que Package.appxmanifest en Windows incluya la capacidad del dispositivo de la cámara web.
¿Cómo se crea la interfaz del escáner de código de barras?
Diseña una interfaz de usuario en MainPage.xaml que brinde a los usuarios una retroalimentación 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>
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 del código de barras detectado junto al valor decodificado, lo cual ayuda durante la depuración y verificación del usuario.
Agregar comentarios sobre el estado del escaneo
Para una experiencia pulida, considera envolver los botones de escaneo en un ActivityIndicator que se muestre mientras se procesa. La API asincrónica de IronBarcode hace esto sencillo: puedes 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?
Implementa la lógica central de escaneo 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");
}
}
}
Imports IronBarCode
Imports IronSoftware.Drawing
Namespace BarcodeScannerApp
Public Partial Class MainPage
Inherits ContentPage
Public Sub New()
InitializeComponent()
End Sub
Private Async Sub OnScanClicked(sender As Object, e As EventArgs)
Await ScanFromSource(Function() MediaPicker.Default.CapturePhotoAsync())
End Sub
Private Async Sub OnPickFromGalleryClicked(sender As Object, e As EventArgs)
Await ScanFromSource(Function() MediaPicker.Default.PickPhotoAsync())
End Sub
Private Async Function ScanFromSource(sourceFunc As Func(Of Task(Of FileResult?))) As Task
Try
Dim photo = Await sourceFunc()
If photo Is Nothing Then Return
Using stream = Await photo.OpenReadAsync()
Using memoryStream = New MemoryStream()
Await stream.CopyToAsync(memoryStream)
Dim imageBytes = memoryStream.ToArray()
' Show the captured image in the UI
CapturedImage.Source = ImageSource.FromStream(Function() New MemoryStream(imageBytes))
' Process with IronBarcode
Dim bitmap = AnyBitmap.FromBytes(imageBytes)
Dim options = New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = False
}
Dim results = Await BarcodeReader.ReadAsync(bitmap, options)
If results.Any() Then
Dim first = results.First()
ResultLabel.Text = $"Value: {first.Value}"
FormatLabel.Text = $"Format: {first.BarcodeType}"
Else
ResultLabel.Text = "No barcode detected"
FormatLabel.Text = String.Empty
End If
End Using
End Using
Catch ex As FeatureNotSupportedException
Await DisplayAlert("Unsupported", "Camera is not available on this device.", "OK")
Catch ex As PermissionException
Await DisplayAlert("Permission Required", "Please grant camera permission in Settings.", "OK")
Catch ex As Exception
Await DisplayAlert("Error", $"Scanning failed: {ex.Message}", "OK")
End Try
End Function
End Class
End Namespace
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 cámara y 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 resultado expone first.Value (la cadena decodificada), first.BarcodeType (el enum de formato) y first.BarcodeImage (una imagen recortada de la región del código de barras detectado) 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:

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

¿Cómo configurar las opciones de escaneo avanzadas?
IronBarcode expone un objeto BarcodeReaderOptions que te permite ajustar el comportamiento de detección para tu 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);
Imports System.Threading.Tasks
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True,
.ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128
}
Dim results = Await BarcodeReader.ReadAsync(bitmap, options)

Al configurar ExpectMultipleBarcodes = true se instruye a IronBarcode para que continúe escaneando después de encontrar el primer resultado, lo cual es esencial para flujos de trabajo en el almacén donde un solo albarán puede contener una docena de códigos de barras.
Opciones de velocidad de lectura
El enum ReadingSpeed ofrece cuatro niveles: ExtremeDetail, Detailed, Balanced, y QuickScan. Usa QuickScan para escenarios de gran volumen donde los códigos de barras están limpios y bien iluminados. Cambia a Detailed o ExtremeDetail al escanear desde capturas de cámara de baja resolución o etiquetas que han sido parcialmente dañadas.
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 puedes 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)
}
};
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Detailed,
.ImageFilters = New ImageFilterCollection From {
New SharpenFilter(),
New ContrastFilter(1.2F)
}
}
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 lanza, verifica que los permisos estén correctamente declarados 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, no se admite MediaPicker.CapturePhotoAsync(). Siempre prueba las funciones de la cámara en un dispositivo físico. El emulador admite PickPhotoAsync para la selección de galería, que puedes usar para pruebas básicas de UI con imágenes pre-cargadas.
Mala precisión de escaneo
Si IronBarcode no devuelve resultados o valores incorrectos, pruebe estos ajustes:
- Aumenta el
SpeedaReadingSpeed.DetailedoExtremeDetail - Agrega
SharpenFilteryContrastFiltera la tubería de filtros de imagen - 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.
- Verifica si el tipo de código de barras está incluido en tu 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. Siempre usa instrucciones using en todos los objetos de flujo para asegurar su disposición. Para flujos de trabajo de escaneo continuos donde los usuarios escanean múltiples artículos en secuencia, también llama a bitmap.Dispose() explícitamente después del procesamiento en lugar de esperar a que el recolector de basura.
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 subsiguientes a CapturePhotoAsync lanzarán un PermissionException. Maneja este caso dirigiendo al usuario a Configuración, lo cual puedes hacer con AppInfo.ShowSettingsUI().
Confirma que NSCameraUsageDescription esté presente en Info.plist antes de enviar 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 cadena.
- Escaneo por lotes -- procesa múltiples archivos de imagen en un bucle usando
BarcodeReader.ReadAsyncconExpectMultipleBarcodes = true; ver los ejemplos de escaneo por lotes - Extracción de códigos de barras en PDF -- IronBarcode puede leer códigos de barras incrustados en documentos PDF usando la misma clase
BarcodeReader; Explore la documentación sobre lectura de códigos de barras 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 Iron Software: si tu aplicación MAUI también necesita generación de PDF, OCR o soporte de hojas de cálculo, explora la Suite de Iron completa para 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.



