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 aborda esto trabajando en la capa de procesamiento de imágenes - usted captura la imagen a través de MediaPicker de MAUI, a continuación, 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 , 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?
Empieza por crear un nuevo proyecto .NET MAUI App en Visual Studio 2022. Nómbralo BarcodeScannerApp y selecciona .NET 10 como marco de trabajo 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 con el botón derecho en su proyecto en el Explorador de soluciones, seleccione "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 app builder:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
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
Editar 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 Google Play Store de que tu aplicación requiere hardware de cámara y capacidad de autoenfoque. 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 necesite gestionar permisos multimedia granulares en su MainActivity.cs utilizando ActivityCompat.RequestPermissions. La abstracción MAUI MediaPicker maneja la mayor parte de esto de forma automática, pero se recomienda la prueba física del dispositivo antes de su 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>
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, considere también la posibilidad de añadir NSPhotoLibraryUsageDescription si tiene previsto permitir a los usuarios escanear códigos de barras de fotos guardadas además de la cámara en directo.
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 compruebe que Package.appxmanifest en Windows incluye 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 proporcione a los usuarios información clara durante el proceso de escaneado. 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 de código de barras detectado junto con el valor descodificado, lo que ayuda durante la depuración y la verificación del usuario.
Agregar comentarios sobre el estado del escaneo
Para que la experiencia sea mejor, considere la posibilidad de envolver los botones de escaneo en un ActivityIndicator que se muestre mientras se está procesando. La API asíncrona de IronBarcode hace que esto sea sencillo: puede establecer 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?
Implementar el núcleo de la lógica 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 de ayuda 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 automáticamente JPEG, PNG, WebP y otros formatos de imagen comunes, sin necesidad de detección manual del formato.
El objeto resultante expone first.Value (la cadena decodificada), first.BarcodeType (el formato enum), 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 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);
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)
La configuración de ExpectMultipleBarcodes = true indica a IronBarcode que continúe escaneando después de encontrar el primer resultado, lo que resulta esencial para los flujos de trabajo de almacén en los que un solo albarán puede contener una docena de códigos de barras.
Opciones de velocidad de lectura
El ReadingSpeed enum ofrece cuatro niveles: ExtremeDetail, Detailed, Balanced y QuickScan. Utilice QuickScan para situaciones de gran volumen en las que los códigos de barras estén limpios y bien iluminados. Cambie a Detailed o ExtremeDetail cuando escanee a partir de capturas de cámara de baja resolución o etiquetas que hayan 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 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)
}
};
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 inicia, compruebe que los permisos están correctamente declarados en AndroidManifest.xml y 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 la galería, que puede utilizar para realizar pruebas básicas de la interfaz de usuario con imágenes precargadas.
Mala precisión de escaneo
Si IronBarcode no devuelve resultados o valores incorrectos, pruebe estos ajustes:
- Aumente el
SpeedaReadingSpeed.DetailedoExtremeDetail - Añadir
SharpenFilteryContrastFilteral proceso de filtrado 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.
- Compruebe 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 de gran tamaño consumen mucha memoria cuando se cargan en MemoryStream. Utilice siempre declaraciones using en todos los objetos de flujo para garantizar su eliminación. Para flujos de trabajo de escaneo continuo en los que los usuarios escanean varios elementos en secuencia, llame también a bitmap.Dispose() explícitamente después del procesamiento en lugar de esperar al 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 siguientes llamadas a CapturePhotoAsync lanzarán un PermissionException. Maneje este caso dirigiendo al usuario a Configuración, lo que puede hacer con AppInfo.ShowSettingsUI().
Confirma 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 cadena.
- Escaneado por lotes -- procesa múltiples archivos de imagen en un bucle utilizando
BarcodeReader.ReadAsyncconExpectMultipleBarcodes = true; Vea 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 utilizando 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 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.


