Como ler códigos de barras em C# for .NET 5 usando IronBarcode
Migrating from Kit de aprendizado de máquina do Google Barcode Scanning to IronBarcode
Este guia destina-se a equipes em uma das duas situações: você está migrando um aplicativo Android for .NET MAUI ou .NET 9 e precisa substituir o leitor de código de barras do ML Kit por uma alternativa gerenciada, ou você recebeu a recomendação do Kit de aprendizado de máquina do Google em uma discussão sobre código de barras multiplataforma e descobriu — ao tentar adicionar o pacote NuGet — que ele não existe.
O Kit de aprendizado de máquina do Google Barcode Scanning é uma biblioteca nativa para Android e iOS. Ele vem como uma dependência Maven (com.google.mlkit:barcode-scanning:17.3.0 agrupada, ou com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 não agrupada) para Kotlin/Java e como um CocoaPod (GoogleMLKit/BarcodeScanning) para Swift. O ML Kit tem sido um produto independente desde junho de 2020 e não requer mais o Firebase, mas não há um SDK oficial para .NET, não há dotnet add package google-mlkit-barcode, e não há uma API C# de primeira parte do Google. Vínculos Xamarin/MAUI mantidos pela comunidade apareceram ao longo dos anos, mas eles quebram quando o ML Kit atualiza seu SDK subjacente.
IronBarcode é uma biblioteca nativa do .NET que é instalada a partir do NuGet, integra-se com padrões .NET padrão e funciona no Windows, Linux, macOS, Docker, Azure e AWS. Este guia mostra como traduzir os padrões que você escreveu em Kotlin ou Java para código C# equivalente.
O Contexto de Portabilidade
Ao migrar do ML Kit para o IronBarcode, algumas coisas mudam estruturalmente — e não apenas sintaticamente:
Callbacks se tornam valores de retorno. O ML Kit usa a API do Android Task com addOnSuccessListener e addOnFailureListener. BarcodeReader.Read() do IronBarcode retorna uma coleção de forma síncrona. Você itera diretamente. Sem registro de retorno de chamada, sem coordenação de threads.
Nenhum objeto scanner. O ML Kit requer que você construa um objeto BarcodeScannerOptions, chame BarcodeScanning.getClient(options) para obter uma instância de scanner, e então chame scanner.process(inputImage). O IronBarcode usa métodos estáticos — BarcodeReader.Read() é o ponto de entrada. Não há instâncias para gerenciar ou descartar.
Nenhuma construção de InputImage. O InputImage do ML Kit deve ser construído a partir de uma fonte específica do Android: InputImage.fromFilePath(context, uri), InputImage.fromBitmap(bitmap, rotation), ou InputImage.fromMediaImage(image, rotation). O IronBarcode aceita uma string de caminho de arquivo, um Stream, um byte[], ou um System.Drawing.Bitmap. Sem contexto do Android, sem URI, sem metadados de rotação.
Sem Google Play Services. O modelo não embutido do ML Kit executa através dos Google Play Services. A variante embutida leva o modelo dentro do APK (adicionando cerca de 2,4 MB) e evita a verificação dos Play Services, mas nenhuma variante está disponível para alvos .NET. O IronBarcode não possui essa dependência — ele funciona de forma idêntica em qualquer plataforma compatível com o .NET .
Configuração rápida em .NET
Remova quaisquer pacotes de vinculação do Xamarin/MAUI ML Kit que existam em seu projeto e, em seguida, instale o IronBarcode:
dotnet add package BarCode
Adicione a chave de licença na inicialização do aplicativo — em Program.cs, MauiProgram.cs, ou Startup.cs, dependendo do tipo do seu aplicativo:
// NuGet: dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// NuGet: dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
A licença pode ser definida em qualquer ponto antes da primeira chamada BarcodeReader.Read() ou BarcodeWriter.CreateBarcode(). Está disponível um período de teste gratuito; O modo de avaliação gera marcas d'água com códigos de barras, mas não restringe a leitura.
Leitura de códigos de barras: Kotlin para C
Leitura básica de código de barras único
Aqui está um exemplo típico de leitura do ML Kit em Kotlin, que escaneia um único código QR de um URI de arquivo:
// Android Kotlin — ML Kit
val options = BarcodeScannerOptions.Builder()
.setBarcodeFormats(Barcode.FORMAT_QR_CODE)
.build()
val scanner = BarcodeScanning.getClient(options)
val inputImage = InputImage.fromFilePath(context, imageUri)
scanner.process(inputImage)
.addOnSuccessListener { barcodes ->
val barcode = barcodes.firstOrNull()
if (barcode != null) {
Log.d("MLKit", "Value: ${barcode.rawValue}")
Log.d("MLKit", "Format: ${barcode.format}")
}
}
.addOnFailureListener { e ->
Log.e("MLKit", "Scan failed: ${e.message}")
}
O equivalente em C# com IronBarcode:
using IronBarCode;
try
{
var results = BarcodeReader.Read("captured-image.jpg");
var barcode = results.FirstOrDefault();
if (barcode != null)
{
Console.WriteLine($"Value: {barcode.Value}");
Console.WriteLine($"Format: {barcode.Format}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Scan failed: {ex.Message}");
}
using IronBarCode;
try
{
var results = BarcodeReader.Read("captured-image.jpg");
var barcode = results.FirstOrDefault();
if (barcode != null)
{
Console.WriteLine($"Value: {barcode.Value}");
Console.WriteLine($"Format: {barcode.Format}");
}
}
catch (Exception ex)
{
Console.WriteLine($"Scan failed: {ex.Message}");
}
Imports IronBarCode
Try
Dim results = BarcodeReader.Read("captured-image.jpg")
Dim barcode = results.FirstOrDefault()
If barcode IsNot Nothing Then
Console.WriteLine($"Value: {barcode.Value}")
Console.WriteLine($"Format: {barcode.Format}")
End If
Catch ex As Exception
Console.WriteLine($"Scan failed: {ex.Message}")
End Try
O resultado está disponível imediatamente como um valor de retorno. barcode.Value corresponde a barcode.rawValue. barcode.Format corresponde a barcode.format. O tratamento de erros utiliza o padrão try/catch em vez de um ouvinte de falhas separado.
Leitura de múltiplos códigos de barras
O ML Kit escaneia um único InputImage e retorna uma lista. Para vários códigos de barras em uma imagem, você itera a lista do ouvinte de sucesso:
// Android Kotlin — ML Kit, multiple barcodes
val options = BarcodeScannerOptions.Builder()
.setBarcodeFormats(Barcode.FORMAT_ALL_FORMATS)
.build()
val scanner = BarcodeScanning.getClient(options)
val inputImage = InputImage.fromFilePath(context, imageUri)
scanner.process(inputImage)
.addOnSuccessListener { barcodes ->
for (barcode in barcodes) {
val rawValue = barcode.rawValue
val format = barcode.format
processBarcode(rawValue, format)
}
}
.addOnFailureListener { e -> Log.e("MLKit", e.message ?: "Unknown error") }
Com o IronBarcode, defina ExpectMultipleBarcodes = true em BarcodeReaderOptions e itere a coleção de resultados:
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("warehouse-shelf.jpg", options);
foreach (var barcode in results)
{
Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}");
ProcessBarcode(barcode.Value, barcode.Format);
}
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("warehouse-shelf.jpg", options);
foreach (var barcode in results)
{
Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}");
ProcessBarcode(barcode.Value, barcode.Format);
}
Imports IronBarCode
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim results = BarcodeReader.Read("warehouse-shelf.jpg", options)
For Each barcode In results
Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}")
ProcessBarcode(barcode.Value, barcode.Format)
Next
Especificação de formato: defina os formatos de código de barras como Opções do Leitor de Código de Barras
O ML Kit requer que você especifique quais formatos procurar via setBarcodeFormats(). Se você omitir esse parâmetro, o ML Kit pesquisará em todos os formatos. O IronBarcode funciona da mesma forma — omitir as restrições de formato permite a busca em tudo, mas especificar os tipos esperados melhora o desempenho.
| Kit ML Kotlin | IronBarcode C# |
|---|---|
Barcode.FORMAT_QR_CODE |
BarcodeEncoding.QRCode |
Barcode.FORMAT_CODE_128 |
BarcodeEncoding.Code128 |
Barcode.FORMAT_CODE_39 |
BarcodeEncoding.Code39 |
Barcode.FORMAT_CODE_93 |
BarcodeEncoding.Code93 |
Barcode.FORMAT_EAN_13 |
BarcodeEncoding.EAN13 |
Barcode.FORMAT_EAN_8 |
BarcodeEncoding.EAN8 |
Barcode.FORMAT_UPC_A |
BarcodeEncoding.UPCA |
Barcode.FORMAT_UPC_E |
BarcodeEncoding.UPCE |
Barcode.FORMAT_PDF417 |
BarcodeEncoding.PDF417 |
Barcode.FORMAT_DATA_MATRIX |
BarcodeEncoding.DataMatrix |
Barcode.FORMAT_AZTEC |
BarcodeEncoding.Aztec |
Barcode.FORMAT_ITF |
BarcodeEncoding.ITF |
Barcode.FORMAT_CODABAR |
BarcodeEncoding.Codabar |
Barcode.FORMAT_ALL_FORMATS |
Omitir ExpectBarcodeTypes |
Utilizando sinalizadores de formatação no IronBarcode:
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.EAN13
};
var results = BarcodeReader.Read("product-image.jpg", options);
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.EAN13
};
var results = BarcodeReader.Read("product-image.jpg", options);
Imports IronBarCode
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True,
.ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128 Or BarcodeEncoding.EAN13
}
Dim results = BarcodeReader.Read("product-image.jpg", options)
A combinação OR bit a bit funciona da mesma forma que a lista de formato vararg do ML Kit.
Acesso aos resultados: valor bruto e formato
O objeto de resultado do ML Kit expõe rawValue (um String?) e format (uma constante Int). O resultado do IronBarcode expõe Value (um string) e Format (um valor enumerado BarcodeEncoding).
// Kit ML Kotlin — result fields
val rawValue: String? = barcode.rawValue
val format: Int = barcode.format
val boundingBox: Rect? = barcode.boundingBox
val displayValue: String? = barcode.displayValue
//IronBarcode C#— result fields
string value = barcode.Value;
BarcodeEncoding format = barcode.Format;
int page = barcode.PageNumber; // populated for PDF / multi-page input
//IronBarcode C#— result fields
string value = barcode.Value;
BarcodeEncoding format = barcode.Format;
int page = barcode.PageNumber; // populated for PDF / multi-page input
'IronBarcode VB.NET— result fields
Dim value As String = barcode.Value
Dim format As BarcodeEncoding = barcode.Format
Dim page As Integer = barcode.PageNumber ' populated for PDF / multi-page input
barcode.Value é sempre uma string não nula no IronBarcode— se a leitura tiver sucesso, o valor está presente. barcode.Format é o membro da enumeração BarcodeEncoding, que você pode comparar diretamente: if (barcode.Format == BarcodeEncoding.QRCode).
O que há de diferente no .NET?
API síncrona em vez de callbacks. Essa é a mudança estrutural mais significativa. O scanner.process() do ML Kit retorna um Task<List<Barcode>> no sentido do Android — você encadeia ouvintes. O BarcodeReader.Read() do IronBarcode retorna o resultado inline. Se você precisar executá-lo fora do thread da interface do usuário em um aplicativo MAUI, envolva-o em Task.Run():
using IronBarCode;
// In a MAUI ViewModel or page code-behind
var results = await Task.Run(() => BarcodeReader.Read(imagePath));
foreach (var barcode in results)
{
// update UI on main thread
MainThread.BeginInvokeOnMainThread(() =>
{
ResultLabel.Text = barcode.Value;
});
}
using IronBarCode;
// In a MAUI ViewModel or page code-behind
var results = await Task.Run(() => BarcodeReader.Read(imagePath));
foreach (var barcode in results)
{
// update UI on main thread
MainThread.BeginInvokeOnMainThread(() =>
{
ResultLabel.Text = barcode.Value;
});
}
Imports IronBarCode
Imports System.Threading.Tasks
Imports Microsoft.Maui.Dispatching
' In a MAUI ViewModel or page code-behind
Dim results = Await Task.Run(Function() BarcodeReader.Read(imagePath))
For Each barcode In results
' update UI on main thread
MainThread.BeginInvokeOnMainThread(Sub()
ResultLabel.Text = barcode.Value
End Sub)
Next
Nenhum parâmetro de contexto. Cada chamada do ML Kit que constrói um InputImage requer um Context do Android. O IronBarcode precisa apenas de um caminho de arquivo ou fluxo de dados. Remover o encadeamento de contexto da lógica do código de barras simplifica consideravelmente o código.
Sem Google Play Services. O modelo padrão do ML Kit é executado pelo Play Services — BarcodeScanning.getClient() verifica a disponibilidade do Play Services em tempo de execução e lança uma exceção se indisponível.IronBarcode não possui verificação de serviço em tempo de execução. Ou lê a imagem ou lança uma exceção padrão.
Tratamento de exceção padrão. O addOnFailureListener do ML Kit recebe uma subclasse Java Exception. Não .NET, falhas emergem como lançamentos padrão @@--CODE-1354@@, capturáveis com try/catch da forma normal.
Leitura de documentos PDF
O ML Kit não oferece suporte a PDF. InputImage.fromFilePath() com um URI .pdf falha ou lê apenas a primeira página como uma imagem rasterizada, dependendo da versão do Android. Se o seu cenário de portabilidade envolver documentos — processamento de faturas, manifestos logísticos, digitalização de formulários — o IronBarcode lida com PDFs nativamente:
using IronBarCode;
// Read all barcodes from all pages of a PDF
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("invoice-batch.pdf", options);
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}");
}
using IronBarCode;
// Read all barcodes from all pages of a PDF
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("invoice-batch.pdf", options);
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}");
}
Imports IronBarCode
' Read all barcodes from all pages of a PDF
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim results = BarcodeReader.Read("invoice-batch.pdf", options)
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}")
Next
Sem etapa de extração de imagem, sem biblioteca PDF de terceiros, sem loop de iteração de página com renderização separada. Forneça o caminho do PDF e obtenha todos os valores dos códigos de barras com seus respectivos números de página.
Novas capacidades: Geração
O ML Kit não gera códigos de barras — ele apenas os lê. Se a sua aplicação adaptada precisar gerar etiquetas, bilhetes ou códigos QR, o IronBarcode oferece essa funcionalidade no mesmo pacote.
Código 128 para etiquetas de envio:
using IronBarCode;
BarcodeWriter.CreateBarcode("SHIP-2024-98341", BarcodeEncoding.Code128)
.ResizeTo(400, 120)
.SaveAsPng("shipping-label.png");
using IronBarCode;
BarcodeWriter.CreateBarcode("SHIP-2024-98341", BarcodeEncoding.Code128)
.ResizeTo(400, 120)
.SaveAsPng("shipping-label.png");
Imports IronBarCode
BarcodeWriter.CreateBarcode("SHIP-2024-98341", BarcodeEncoding.Code128) _
.ResizeTo(400, 120) _
.SaveAsPng("shipping-label.png")
Geração de código QR:
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com/track/98341", 500)
.SaveAsPng("tracking-qr.png");
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com/track/98341", 500)
.SaveAsPng("tracking-qr.png");
Imports IronBarCode
QRCodeWriter.CreateQrCode("https://example.com/track/98341", 500) _
.SaveAsPng("tracking-qr.png")
Código QR com logotipo e cor:
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500)
.AddBrandLogo("company-logo.png")
.ChangeBarCodeColor(System.Drawing.Color.DarkBlue)
.SaveAsPng("product-qr.png");
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500)
.AddBrandLogo("company-logo.png")
.ChangeBarCodeColor(System.Drawing.Color.DarkBlue)
.SaveAsPng("product-qr.png");
Imports IronBarCode
QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500) _
.AddBrandLogo("company-logo.png") _
.ChangeBarCodeColor(System.Drawing.Color.DarkBlue) _
.SaveAsPng("product-qr.png")
Retorna o código de barras como um array de bytes para uma resposta HTTP:
using IronBarCode;
// In anASP.NET Corecontroller action
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode)
.ToPngBinaryData();
return File(barcodeBytes, "image/png");
using IronBarCode;
// In anASP.NET Corecontroller action
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode)
.ToPngBinaryData();
return File(barcodeBytes, "image/png");
Imports IronBarCode
' In an ASP.NET Core controller action
Dim barcodeBytes As Byte() = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode) _
.ToPngBinaryData()
Return File(barcodeBytes, "image/png")
Nenhum desses padrões possui equivalentes no ML Kit. São novas funcionalidades disponíveis porque você está trabalhando em uma biblioteca completa de código de barras .NET, em vez de um scanner exclusivo para dispositivos móveis.
Processamento em lote no servidor
O ML Kit processa uma imagem por chamada, requer o ambiente de execução Android/iOS e não possui o conceito de execução no lado do servidor. O IronBarcode processa arquivos em um loop, é executado noASP.NET Coree escala normalmente:
using IronBarCode;
// Process a folder of scanned document images
var imageFiles = Directory.GetFiles("/data/scans", "*.jpg");
var allResults = new List<(string File, string Value, BarcodeEncoding Format)>();
foreach (var file in imageFiles)
{
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Faster,
ExpectMultipleBarcodes = false
};
var results = BarcodeReader.Read(file, options);
foreach (var barcode in results)
{
allResults.Add((file, barcode.Value, barcode.Format));
}
}
// Write results to CSV, database, etc.
foreach (var (file, value, format) in allResults)
{
Console.WriteLine($"{file}: [{format}] {value}");
}
using IronBarCode;
// Process a folder of scanned document images
var imageFiles = Directory.GetFiles("/data/scans", "*.jpg");
var allResults = new List<(string File, string Value, BarcodeEncoding Format)>();
foreach (var file in imageFiles)
{
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Faster,
ExpectMultipleBarcodes = false
};
var results = BarcodeReader.Read(file, options);
foreach (var barcode in results)
{
allResults.Add((file, barcode.Value, barcode.Format));
}
}
// Write results to CSV, database, etc.
foreach (var (file, value, format) in allResults)
{
Console.WriteLine($"{file}: [{format}] {value}");
}
Imports IronBarCode
Imports System.IO
' Process a folder of scanned document images
Dim imageFiles = Directory.GetFiles("/data/scans", "*.jpg")
Dim allResults = New List(Of (File As String, Value As String, Format As BarcodeEncoding))()
For Each file In imageFiles
Dim options = New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Faster,
.ExpectMultipleBarcodes = False
}
Dim results = BarcodeReader.Read(file, options)
For Each barcode In results
allResults.Add((file, barcode.Value, barcode.Format))
Next
Next
' Write results to CSV, database, etc.
For Each result In allResults
Console.WriteLine($"{result.File}: [{result.Format}] {result.Value}")
Next
Esse padrão — ler uma pasta de imagens, extrair códigos de barras e agregar resultados — não é possível com o ML Kit. É um fluxo de trabalho padrão do IronBarcode.
Comparação de recursos
| Recurso | Kit de aprendizado de máquina do Google | IronBarcode |
|---|---|---|
| Pacote NuGet .NET | None | BarCode |
| API C# / .NET | None | Sim |
| Leitura de código de barras | Sim (Android/iOS) | Sim (todas as plataformas) |
| Geração de código de barras | Não | Sim |
| Geração de código QR | Não | Sim |
| Incorporação de logotipo QR | Não | Sim |
| Entrada de PDF | Não | Sim |
| Suporte para documentos com várias páginas | Não | Sim |
| Entrada de câmera/quadro | Sim | Por meio de arquivo de imagem |
| Implantação no lado do servidor | Não | Sim |
| ASP.NET Core | Não | Sim |
| Azure Functions | Não | Sim |
| Docker / Linux | Não | Sim |
| Serviços do Google Play necessários | Variante não embutida apenas | Não |
| Dependência Firebase | Não (autônomo desde junho de 2020) | Não |
| API .NET síncrona | Não | Sim |
| Compatível com injeção de dependência | Não | Sim (API estática) |
ExpectMultipleBarcodes opção |
Por meio da lista de resultados | BarcodeReaderOptions |
| Especificação de formato | setBarcodeFormats() |
ExpectBarcodeTypes |
| equilíbrio entre velocidade e precisão | Fixo (baseado em modelo) | ReadingSpeed enum |
| Preços | Grátis (no dispositivo, apenas móvel) | A partir de $749 (Lite) perpétua |
| Plataformas | Android, iOS | Windows, Linux, macOS, Docker, Azure, AWS |
Lista de verificação para migração
Se você estiver migrando um código-fonte do Android ou substituindo uma vinculação não oficial do Xamarin ML Kit, procure esses padrões em seu projeto e aplique as traduções acima:
com.google.mlkit:barcode-scanningem arquivos Gradle → remova, adicioneBarCodeNuGetBarcodeScannerOptions.Builder()→new BarcodeReaderOptions { }BarcodeScanning.getClient(options)→ remova (nenhuma instância de scanner no IronBarcode)InputImage.fromFilePath(context, uri)→ argumento de string de caminho de arquivoInputImage.fromBitmap(bitmap, rotation)→BarcodeReader.Read(stream)ou sobrecarga de array de bytesscanner.process(inputImage)→BarcodeReader.Read(path, options).addOnSuccessListener { barcodes -> }→ iterar valor de retorno deRead().addOnFailureListener { e -> }→ try/catch em torno deRead()barcode.rawValue→barcode.Valuebarcode.format→barcode.FormatBarcode.FORMAT_QR_CODE→BarcodeEncoding.QRCodeBarcode.FORMAT_CODE_128→BarcodeEncoding.Code128Barcode.FORMAT_ALL_FORMATS→ omitirExpectBarcodeTypesusing Google.MLKit.BarcodeScanning;(vinculação Xamarin) →using IronBarCode;IronBarCode.License.LicenseKeydeve ser definido emMauiProgram.cs,Program.cs, ouStartup.cs
A principal tarefa consiste na mudança estrutural de código baseado em callbacks para código síncrono. As constantes de formato e os nomes dos campos de resultado são mapeamentos diretos. O suporte para PDF e geração de arquivos é puramente aditivo — não requer migração, apenas novo código.
Perguntas frequentes
Por que devo migrar da leitura de código de barras do Google ML Kit para o IronBarcode?
Entre os motivos comuns estão a simplificação do licenciamento (removendo a complexidade do SDK e da chave de tempo de execução), a eliminação dos limites de taxa de transferência, a obtenção de suporte nativo para PDF, a melhoria da implantação em Docker/CI/CD e a redução do código repetitivo da API em produção.
Como faço para substituir as chamadas da API do Google ML Kit pelo IronBarcode?
Substitua o código padrão de criação de instâncias e licenciamento por `IronBarCode.License.LicenseKey = "key"`. Substitua as chamadas de leitura por `BarcodeReader.Read(path)` e as chamadas de gravação por `BarcodeWriter.CreateBarcode(data, encoding)`. Os métodos estáticos não exigem gerenciamento de instâncias.
Quanta alteração de código ocorre ao migrar da leitura de código de barras do Google ML Kit para o IronBarcode?
A maioria das migrações resulta em menos linhas de código. O código repetitivo de licenciamento, os construtores de instância e a configuração explícita de formato são removidos. As operações principais de leitura/gravação são mapeadas para equivalentes mais curtos em IronBarcode, com objetos de resultado mais limpos.
Preciso manter o Google ML Kit Barcode Scanning e o IronBarcode instalados durante a migração?
Não. A maioria das migrações são substituições diretas, e não operações paralelas. Migre uma classe de serviço por vez, substitua a referência do NuGet e atualize os padrões de instanciação e chamada de API antes de passar para a próxima classe.
Qual é o nome do pacote NuGet para IronBarcode?
O pacote é 'IronBarCode' (com B e C maiúsculos). Instale-o com 'Install-Package IronBarCode' ou 'dotnet add package IronBarCode'. A diretiva using no código é 'using IronBarCode;'.
Como o IronBarcode simplifica a implantação do Docker em comparação com a leitura de código de barras do Google ML Kit?
IronBarcode é um pacote NuGet sem arquivos SDK externos ou configuração de licença montada. No Docker, defina a variável de ambiente IRONBARCODE_LICENSE_KEY e o pacote cuidará da validação da licença na inicialização.
O IronBarcode detecta automaticamente todos os formatos de código de barras após a migração do Google ML Kit?
Sim. O IronBarcode detecta automaticamente a simbologia em todos os formatos suportados. A enumeração explícita de BarcodeTypes não é necessária. Se o formato já for conhecido e o desempenho for importante, o BarcodeReaderOptions permite restringir o espaço de busca como uma otimização.
O IronBarcode consegue ler códigos de barras de PDFs sem uma biblioteca separada?
Sim. O método `BarcodeReader.Read("document.pdf")` processa arquivos PDF nativamente. Os resultados incluem o número da página, o formato, o valor e a confiança de cada código de barras encontrado. Não é necessária nenhuma etapa externa de renderização de PDF.
Como o IronBarcode lida com o processamento paralelo de códigos de barras?
Os métodos estáticos do IronBarcode são sem estado e thread-safe. Use Parallel.ForEach diretamente em listas de arquivos sem gerenciamento de instâncias por thread. BarcodeReaderOptions.MaxParallelThreads controla o orçamento interno de threads.
Quais propriedades de resultado são alteradas ao migrar da leitura de código de barras do Google ML Kit para o IronBarcode?
Renomeações comuns: BarcodeValue torna-se Value, BarcodeType torna-se Format. Os resultados do IronBarcode também incluem Confidence e PageNumber. Uma função de busca e substituição em toda a solução lida com as renomeações no código de processamento de resultados existente.
Como configuro o licenciamento do IronBarcode em um pipeline de CI/CD?
Armazene IRONBARCODE_LICENSE_KEY como um segredo de pipeline e atribua IronBarCode.License.LicenseKey no código de inicialização do aplicativo. Um único segredo abrange todos os ambientes, incluindo desenvolvimento, teste, homologação e produção.
O IronBarcode suporta a geração de códigos QR com estilos personalizados?
Sim. O método QRCodeWriter.CreateQrCode() suporta cores personalizadas através do método ChangeBarCodeColor(), incorporação de logotipo através do método AddBrandLogo(), níveis configuráveis de correção de erros e múltiplos formatos de saída, incluindo PNG, JPG, PDF e fluxo de dados.

