Ir para o conteúdo do rodapé
USANDO O IRONBARCODE

Leitor de código de barras MAUI com IronBarcode: Guia passo a passo

Aplicativos móveis dependem cada vez mais da leitura de códigos de barras para gerenciamento de inventário, sistemas de ponto de venda e rastreamento de produtos. Construir um leitor de código de barras MAUI permite que você integre a detecção de códigos de barras diretamente no seu aplicativo .NET MAUI, combinando um feed de câmera com processamento de arquivos de imagem para detectar QR codes, Data Matrix, e outros formatos de código de barras. Enquanto muitas bibliotecas focam na pré-visualização da câmera, IronBarcode se destaca em ler códigos de barras com precisão mesmo sob condições desafiadoras -- ângulos enviesados, iluminação pobre, e rótulos danificados, todos manuseados sem configuração extra.

Este guia percorre cada etapa da implementação de leitura de códigos de barras em um projeto .NET MAUI usando IronBarcode. Até o final, você será capaz de escanear múltiplos códigos de barras de um único arquivo de imagem, capturar códigos de barras de uma câmera de dispositivo, e integrar com confiança a biblioteca em seus próprios projetos multiplataforma.

Quais São os Pré-requisitos para Construir um Leitor de Código de Barras MAUI?

Antes de começar, certifique-se de que seu ambiente de desenvolvimento está em ordem:

  • Visual Studio 2022 (v17.8 ou posterior) com a carga de trabalho .NET MAUI instalada
  • .NET 10 SDK -- download do site oficial do .NET
  • Conhecimento básico de C# -- familiaridade com padrões async/await ajudará
  • Dispositivo físico ou emulador configurado para teste de câmera
  • Licença IronBarcode -- uma avaliação gratuita está disponível para avaliação

Garantir que o Visual Studio tenha a carga de trabalho MAUI instalada antes de criar seu projeto economiza um tempo significativo de solução de problemas posteriormente. Você pode verificar isso no Visual Studio Installer sob "Componentes Individuais" procurando por "Desenvolvimento de App .NET Multi-plataforma."

Entendendo Como o IronBarcode se Encaixa no MAUI

.NET MAUI lhe dá uma única base de código que tem como alvo Android, iOS, macOS, e Windows. O desafio com a leitura de códigos de barras neste ambiente é que cada plataforma lida com o acesso à câmera de maneira diferente. IronBarcode aborda isso trabalhando na camada de processamento de imagem -- você captura a imagem através do MediaPicker do MAUI, depois passa os bytes para o IronBarcode para análise.

Essa separação de preocupações mantém seu código limpo e evita SDKs de código de barras específicos de plataforma. O modelo de processamento offline do IronBarcode também significa que os dados de código de barras nunca saem do dispositivo, o que importa para aplicativos em indústrias regulamentadas.

Formatos de Código de Barras Suportados

IronBarcode lê uma ampla gama de formatos, incluindo:

Formatos de código de barras suportados pelo IronBarcode
Categoria de Formatos Formatos Casos de Uso Comum
1D Linear Code 128, Code 39, EAN-13, UPC-A, ITF Varejo, logística, saúde
2D Matriz Código QR, Data Matrix, Aztec, PDF417 Pagamentos móveis, bilhética, manufatura
Postal USPS, Royal Mail, Deutsche Post Serviços de envio e postal
Especialidade MaxiCode, GS1, MicroPDF417 Cadeia de suprimentos, transporte, pacotes

Como Configurar um Projeto de Leitura de Código de Barras MAUI?

Comece criando um novo projeto de aplicativo .NET MAUI no Visual Studio 2022. Nomeie-o BarcodeScannerApp e selecione .NET 10 como o framework de destino. O Visual Studio gera a estrutura padrão do projeto MAUI com pastas específicas de plataforma para Android, iOS, macOS e Windows.

Instalando IronBarcode via NuGet

Abra o Console do Gerenciador de Pacotes NuGet e execute:

Install-Package BarCode

Alternativamente, clique com o botão direito no seu projeto no Solution Explorer, escolha 'Gerenciar Pacotes NuGet', procure IronBarCode e instale a versão estável mais recente. Para projetos .NET MAUI especificamente, o pacote NuGet do IronBarcode inclui todas as dependências nativas necessárias.

Ativando sua Licença

Após a instalação, ative o IronBarcode com sua chave de licença no início do ciclo de vida da aplicação. O melhor lugar é em MauiProgram.cs antes de o construtor do aplicativo rodar:

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

Obtenha uma chave de licença de teste gratuito no site da IronSoftware. As chaves de teste permitem avaliar todos os recursos sem restrições de tempo durante o desenvolvimento, embora o resultado possa incluir uma marca d'água de teste até que você aplique uma licença completa.

Como Configurar Permissões de Câmera para Android e iOS?

Permissões de câmera específicas da plataforma são essenciais para a funcionalidade de leitura de código de barras. Cada plataforma requer configuração específica em seus arquivos manifest antes que MediaPicker.CapturePhotoAsync() tenha sucesso.

Permissões Android

Edite Platforms/Android/AndroidManifest.xml para declarar acesso à câmera:

<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

A entrada android.permission.CAMERA solicita permissão de tempo de execução do usuário. As declarações uses-feature informam a Google Play Store que seu aplicativo requer hardware de câmera e capacidade de autofoco. Sem isso, dispositivos Android podem conceder a solicitação de permissão mas ainda bloquear o acesso à câmera internamente.

Para Android 13 e posterior (nível de API 33+), você também pode precisar lidar com permissões de mídia granulares em seu MainActivity.cs usando ActivityCompat.RequestPermissions. A abstração MediaPicker do MAUI lida com a maior parte disso automaticamente, mas é recomendado testar em dispositivos físicos antes do lançamento.

Permissões iOS

Modifique Platforms/iOS/Info.plist para incluir a descrição do uso da câmera:

<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 exige uma explicação legível para cada permissão sensível à privacidade. O processo de revisão da App Store da Apple rejeitará seu aplicativo se esta descrição estiver ausente ou vaga. O texto aparece no diálogo de permissão do sistema mostrado ao usuário na primeira vez que o aplicativo solicita acesso à câmera.

Para iPadOS, também considere adicionar NSPhotoLibraryUsageDescription se planejar permitir que os usuários escaneiem códigos de barras de fotos salvas, além da câmera ao vivo.

Windows e macOS

Para os alvos Windows Desktop e macOS, as permissões de acesso à câmera são gerenciadas através do manifesto do aplicativo e arquivos de direitos, respectivamente. O framework MAUI lida com a maior parte disso no nível do template, mas verifique se Package.appxmanifest no Windows inclui a capacidade do dispositivo webcam.

Como Criar a Interface do Leitor de Código de Barras?

Desenhe uma interface de usuário em MainPage.xaml que dê aos usuários feedback claro durante o processo de escaneamento. Um layout mínimo mas funcional inclui uma pré-visualização de imagem, uma área de exibição de resultado e um botão de ativação de escaneamento:

<?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

O layout oferece dois caminhos de escaneamento: capturar uma nova foto com a câmera e escolher uma imagem existente da galeria. Isso é importante para fluxos de trabalho onde os usuários fotografam códigos de barras com antecedência ou recebem imagens por e-mail. O FormatLabel exibe o formato do código de barras detectado junto com o valor decodificado, o que ajuda durante a depuração e verificação do usuário.

Adicionando Feedback de Status do Escaneamento

Para uma experiência aprimorada, considere envolver os botões de escaneamento em um ActivityIndicator que apareça enquanto o processamento está em andamento. A API assíncrona do IronBarcode torna isso simples -- você pode definir IsRunning = true antes de chamar BarcodeReader.ReadAsync e redefini-lo no bloco finally.

Como Implementar a Funcionalidade do Leitor de Código de Barras?

Implemente a lógica principal de escaneamento em MainPage.xaml.cs. O código abaixo lida tanto com captura de câmera quanto seleção de galeria, com padrões assíncronos adequados e tratamento de erros:

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 implementação utiliza um método auxiliar compartilhado ScanFromSource para evitar duplicar a lógica de processamento de imagem entre os caminhos da câmera e da galeria. O método AnyBitmap.FromBytes lida com formatos de imagem comuns como JPEG, PNG, WebP automaticamente -- sem necessidade de detectar o formato manualmente.

O objeto de resultado expõe first.Value (a string decodificada), first.BarcodeType (o enum do formato), e first.BarcodeImage (uma imagem recortada da região do código de barras detectado) entre outras propriedades. Veja a documentação da classe BarcodeResult para a lista completa.

Testando Sua Implementação de Escaneamento

Com o código implementado, você pode testar com um código de barras padrão:

Como Criar um Scanner de Códigos de Barras MAUI Usando IronBarcode: Figura 2 - Código de barras de teste de entrada

Após o escaneamento, o valor decodificado aparece na tela:

Como Criar um Scanner de Códigos de Barras MAUI Usando IronBarcode: Figura 3 - Valor do Código de Barras Escaneado

Como Configurar Opções Avançadas de Escaneamento?

IronBarcode expõe um objeto BarcodeReaderOptions que permite ajustar o comportamento de detecção para seu caso de uso específico. Compreender essas opções ajuda a equilibrar velocidade contra precisão com base nas necessidades de sua aplicação.

Alvejando Tipos Específicos de Código de Barras

Especificar os tipos exatos de código de barras que você espera reduz drasticamente o tempo de processamento porque o IronBarcode pula verificações de formato desnecessárias:

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

Como Criar um Scanner de Códigos de Barras MAUI Usando IronBarcode: Figura 4 - Vários códigos escaneados da mesma imagem

Definir ExpectMultipleBarcodes = true instrui o IronBarcode a continuar escaneando após encontrar o primeiro resultado, o que é essencial para fluxos de trabalho de armazém onde um único talão de embalagem pode conter uma dúzia de códigos de barras.

Opções de Velocidade de Leitura

O enum ReadingSpeed oferece quatro níveis: ExtremeDetail, Detailed, Balanced, e QuickScan. Use QuickScan para cenários de alto volume onde os códigos de barras são limpos e bem iluminados. Mude para Detailed ou ExtremeDetail ao escanear de capturas de câmera de baixa resolução ou etiquetas que foram parcialmente danificadas.

Para mais sobre ajustar BarcodeReaderOptions, incluindo filtros de correção de imagem e limiares de confiança, a documentação fornece exemplos detalhados.

Correção de Imagem e Pré-processamento

IronBarcode inclui correção de imagem embutida que lida automaticamente com códigos de barras rotacionados, inclinados ou mal iluminados. Você também pode aplicar filtros de pré-processamento manualmente atravé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

Os filtros de pré-processamento são particularmente úteis quando a aplicação alvo dispositivos Android mais antigos com sensores de câmera de baixa qualidade, ou quando os usuários provavelmente fotografarão códigos de barras em condições de iluminação subótimas, como armazéns ou ambientes externos.

Como Lidar com Cenários Comuns de Solução de Problemas?

Mesmo com um scanner de código de barras MAUI bem configurado, problemas podem surgir de comportamento específico de dispositivos, problemas de qualidade de imagem ou restrições de plataforma.

Câmera Não Abre

Se a câmera falhar ao iniciar, verifique se as permissões estão corretamente declaradas em ambos AndroidManifest.xml e Info.plist. Em seguida, faça o redeploy do aplicativo a partir de uma compilação limpa em vez de um hot reload. No Android, também verifique se o dispositivo de teste usa uma configuração de câmera não padrão -- alguns dispositivos com múltiplas câmeras exigem seleção explícita da lente.

No simulador, MediaPicker.CapturePhotoAsync() não é suportado. Sempre teste os recursos da câmera em um dispositivo físico. O emulador suporta PickPhotoAsync para seleção de galeria, que você pode usar para testes básicos de interface com imagens pré-carregadas.

Precisão de Escaneamento Ruim

Se o IronBarcode não retornar resultados ou valores incorretos, tente estes ajustes:

  • Aumente o Speed para ReadingSpeed.Detailed ou ExtremeDetail
  • Adicione SharpenFilter e ContrastFilter ao pipeline de filtro de imagem
  • Certifique-se de que a resolução da imagem capturada seja pelo menos 720p; resoluções mais baixas causam falhas de detecção em formatos densos como Data Matrix
  • Verifique se o tipo de código de barras está incluído na sua máscara ExpectBarcodeTypes

O guia de solução de problemas do IronBarcode abrange etapas de diagnóstico adicionais para problemas específicos de formato.

Gerenciamento de memória

Imagens grandes de câmera consomem memória significativa quando carregadas em MemoryStream. Sempre use instruções using em todos os objetos de stream para garantir descarte. Para fluxos de trabalho de escaneamento contínuo onde os usuários escaneiam vários itens em sequência, também chame bitmap.Dispose() explicitamente após o processamento em vez de esperar pelo coletor de lixo.

Em dispositivos Android com espaço de heap limitado, considere reduzir a amostra da imagem antes de passá-la para o IronBarcode se os escaneamentos forem de códigos de barras limpos e de alto contraste que não exigem resolução total para decodificação precisa.

Comportamento Específico de Plataforma no iOS

No iOS, a primeira vez que seu aplicativo solicita permissão para a câmera, o sistema exibe um diálogo único. Se o usuário negar, chamadas subsequentes para CapturePhotoAsync lançarão um PermissionException. Lide com este caso direcionando o usuário para Configurações, o que você pode fazer com AppInfo.ShowSettingsUI().

Confirme que NSCameraUsageDescription está presente em Info.plist antes de enviar para a App Store. A ausência de strings de privacidade causa rejeição automática sem uma explicação detalhada da equipe de revisão. Revise as Diretrizes de Interface Humana da Apple para acesso à câmera para melhores práticas sobre o momento e a mensagem de solicitação de permissão.

Quais são os seus próximos passos?

Agora que você tem um leitor de código de barras MAUI funcional com IronBarcode, vários caminhos estão disponíveis dependendo dos requisitos do seu aplicativo:

  • Gerar códigos de barras -- IronBarcode inclui uma API de geração de códigos de barras para criar códigos QR, etiquetas Code 128 e outros formatos a partir de dados em string
  • Escaneamento em lote -- processar vários arquivos de imagem em um loop usando BarcodeReader.ReadAsync com ExpectMultipleBarcodes = true; veja os exemplos de digitalização em lote
  • Extração de código de barras em PDF -- IronBarcode pode ler códigos de barras incorporados em documentos PDF usando a mesma classe BarcodeReader; explore a documentação de leitura de código de barras em PDF
  • Estilo e marca -- personalize a saída visual dos códigos de barras gerados com cores, logotipos e anotações; veja as opções de estilo de código de barras
  • Outros produtos da IronSoftware -- se o seu aplicativo MAUI também precisar de geração de PDF, OCR ou suporte a planilhas, explore a completa Iron Suite para capacidades consistentes entre plataformas

Comece com uma licença de teste gratuita para implantar sem restrições durante o seu período de avaliação. Para opções de licenciamento de produção e preços de volume, visite a página de preços do IronBarcode. O portal de documentação do IronBarcode e o repositório do IronBarcode no GitHub fornecem exemplos de código adicionais e suporte à comunidade.

Perguntas frequentes

Qual a vantagem de usar o IronBarcode com um leitor de código de barras MAUI?

O IronBarcode processa códigos de barras na camada de imagem, funciona offline, suporta mais de 30 formatos e lida com condições desafiadoras, como ângulos distorcidos e pouca iluminação, sem necessidade de configuração adicional.

O IronBarcode consegue detectar vários códigos de barras em uma única imagem?

Sim. Defina ExpectMultipleBarcodes = true em BarcodeReaderOptions e chame BarcodeReader.ReadAsync. O IronBarcode retornará todos os códigos de barras detectados na coleção de resultados.

Como configuro as permissões da câmera para Android e iOS no MAUI?

Para Android, adicione os elementos `CAMERA uses-permission` e `uses-feature` ao arquivo `AndroidManifest.xml`. Para iOS, adicione `NSCameraUsageDescription` com uma explicação legível ao arquivo `Info.plist`.

O IronBarcode suporta leitura de código de barras offline?

Sim. O IronBarcode processa imagens inteiramente no dispositivo, sem enviar dados para servidores externos, o que é importante para aplicações que exigem privacidade.

Quais formatos de código de barras o IronBarcode suporta no MAUI?

O IronBarcode suporta códigos QR, Code 128, Code 39, EAN-13, UPC-A, Data Matrix, PDF417, Aztec, MaxiCode e muitos outros. Você pode definir formatos específicos por meio das opções BarcodeEncoding.

Como posso melhorar a precisão da digitalização de imagens de baixa qualidade?

Altere a velocidade de leitura para Detalhada ou Extrema, adicione Filtro de Nitidez e Filtro de Contraste aos Filtros de Imagem e certifique-se de que a imagem capturada tenha resolução de pelo menos 720p.

O IronBarcode consegue ler códigos de barras de arquivos PDF em um aplicativo MAUI?

Sim. A classe BarcodeReader do IronBarcode pode extrair códigos de barras incorporados em documentos PDF usando a mesma API ReadAsync utilizada para arquivos de imagem.

Como lidar com a exceção PermissionException quando o acesso à câmera é negado?

Capture a exceção PermissionException em um bloco try/catch e chame AppInfo.ShowSettingsUI() para direcionar o usuário às configurações do dispositivo, onde ele poderá reativar o acesso à câmera.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me