IRONSOFTWAREHOME
VIDEOLAR

C# ve IronBarcode Kullanarak .NET 5 için Barkodları Nasıl Okursunuz?

Curtis Chau
Curtis Chau
Updated: 20 Haziran 2026

#Google ML KitBarkod Tarama'dan IronBarcode'a Geçiş

Bu kılavuz, iki durumdan birinde olan ekipler içindir: bir Android uygulamasını .NET MAUI veya .NET 9'a aktarıyorsunuz ve ML Kit'in barkod okuyucusunu yönetilen bir alternatifle değiştirmeniz gerekiyor veya çapraz platform barkod tartışmasındaGoogle ML Kitönerildi ve NuGet paketini eklemeye gittiğinizde, onun mevcut olmadığını keşfettiniz.

Google ML Kit Barkod Taraması yerel bir Android ve iOS kütüphanesidir. Kotlin/Java için Maven bağımlılığı olarak (com.google.mlkit:barcode-scanning:17.3.0 paketli veya com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 paketsiz) ve Swift için CocoaPod olarak (GoogleMLKit/BarcodeScanning) sunulur. ML Kit, Haziran 2020'den beri bağımsız bir üründür ve artık Firebase gerektirmez, ancak resmi bir .NET SDK'sı, dotnet add package google-mlkit-barcode ve Google'dan gelen birinci taraf C# API yoktur. Yıllar içinde topluluk tarafından sürdürülen Xamarin/MAUI bağlamaları ortaya çıkmıştır ancak ML Kit temel SDK'sını güncellediğinde bozulmaktadırlar.

IronBarcode, NuGet'ten kurulan, standart .NET desenleriyle entegre olan ve Windows, Linux, macOS, Docker, Azure ve AWS üzerinde çalışan yerel bir .NET kütüphanesidir. Bu kılavuz, Kotlin veya Java'da yazdığınız desenleri eşdeğer C# koduna nasıl çevireceğinizi gösterir.

Geçiş Bağlamı

ML Kit'ten IronBarcode'a geçerken, sadece sözdizimsel değil, yapısal olarak birkaç değişiklik olur:

Geri çağrılar dönüş değerlerine dönüşür. ML Kit, Android'in Task API'sini addOnSuccessListener ve addOnFailureListener ile kullanır. IronBarcode'un BarcodeReader.Read() senkron bir şekilde bir koleksiyon döndürüyor. Onu doğrudan yineleyin. Geri çağırma kaydı yok, iş parçacığı koordinasyonu yok.

Tarayıcı nesnesi yok. ML Kit, bir BarcodeScannerOptions nesnesi oluşturmanızı, bir tarayıcı örneği almak için BarcodeScanning.getClient(options) çağırmanızı ve ardından scanner.process(inputImage) çağırmanızı gerektirir. IronBarcode, statik yöntemler kullanır — BarcodeReader.Read() giriş noktasıdır. Yönetilecek veya atılacak bir örnek yok.

InputImage yapısı yok. ML Kit'in InputImage nesnesi, Android'e özgü bir kaynaktan oluşturulmalı: InputImage.fromFilePath(context, uri), InputImage.fromBitmap(bitmap, rotation) veya InputImage.fromMediaImage(image, rotation). IronBarcode, bir dosya yolu dizesi, Stream, byte[] veya System.Drawing.Bitmap kabul eder. Android bağlamı yok, URI yok, döndürme meta verisi yok.

Google Play Hizmetleri yok. Paketlenmemiş ML Kit modeli Google Play Hizmetleri üzerinden çalışır. Paketlenmiş varyant, modeli APK içine gönderir (yaklaşık 2,4 MB ekleyerek) ve Play Hizmetleri kontrolünü atlayarak çalışır, ancak hiçbiri .NET hedeflerinde mevcut değildir.IronBarcode böyle bir bağımlılığa sahip değil — .NET'in desteklediği herhangi bir platformda aynı şekilde çalışır.

.NET'te Hızlı Kurulum

Projenizde varsa herhangi bir Xamarin/MAUI ML Kit bağlama paketini kaldırın, ardından IronBarcode'u kurun:

dotnet add package BarCode

Lisans anahtarını uygulama başlangıcında, uygulama türünüze bağlı olarak Program.cs, MauiProgram.cs veya Startup.cs içinde ekleyin:

// NuGet: dotnet add package BarCode
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

Lisans, ilk BarcodeReader.Read() veya BarcodeWriter.CreateBarcode() çağrısından önce herhangi bir noktada ayarlanabilir. Ücretsiz deneme mevcuttur; deneme modundaki su işareti üretilen barkodlara su işareti uygular, ancak okumayı kısıtlamaz.

Barkod Okuma: Kotlin'den C#'a

Temel Tek Barkod Okuma

İşte Kotlin'de ML Kit ile tipik bir okuma, bir dosya URI'sinden tek bir QR kodu tarama:

// 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}")
    }
Text

IronBarcode ile C#'ta eşdeğeri:

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}");
}

Sonuç, doğrudan bir dönüş değeri olarak hemen mevcuttur. barcode.Value, barcode.rawValue ile uyuşur. barcode.Format, barcode.format ile uyuşur. Hata yönetimi, ayrı bir arıza dinleyicisi yerine standart try/catch kullanır.

Çoklu Barkod Okuma

ML Kit, tek bir InputImage tarar ve bir liste döndürür. Bir görüntüde birden fazla barkod varsa, başarı dinleyicisinin listesini yineleyin:

// 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") }
Text

IronBarcode ile, ExpectMultipleBarcodes = true 'i BarcodeReaderOptions içinde ayarlayın ve sonuç koleksiyonunu yineleyin:

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);
}

Format Özellikleri: setBarcodeFormats'ten BarcodeReaderOptions'a

ML Kit, hangi formatları arayacağınızı setBarcodeFormats() ile belirtmenizi gerektirir. Onu atlamazsanız, ML Kit tüm formatları arar.IronBarcode aynı şekilde çalışır — format kısıtlamalarını atlamak her şeyi arar, ancak beklenen türleri belirtmek performansı artırır.

ML Kit KotlinIronBarcode C#
Barcode.FORMAT_QR_CODEBarcodeEncoding.QRCode
Barcode.FORMAT_CODE_128BarcodeEncoding.Code128
Barcode.FORMAT_CODE_39BarcodeEncoding.Code39
Barcode.FORMAT_CODE_93BarcodeEncoding.Code93
Barcode.FORMAT_EAN_13BarcodeEncoding.EAN13
Barcode.FORMAT_EAN_8BarcodeEncoding.EAN8
Barcode.FORMAT_UPC_ABarcodeEncoding.UPCA
Barcode.FORMAT_UPC_EBarcodeEncoding.UPCE
Barcode.FORMAT_PDF417BarcodeEncoding.PDF417
Barcode.FORMAT_DATA_MATRIXBarcodeEncoding.DataMatrix
Barcode.FORMAT_AZTECBarcodeEncoding.Aztec
Barcode.FORMAT_ITFBarcodeEncoding.ITF
Barcode.FORMAT_CODABARBarcodeEncoding.Codabar
Barcode.FORMAT_ALL_FORMATSExpectBarcodeTypes 'i atlayın

IronBarcode'da format bayraklarını kullanma:

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);

Bitwise OR kombinasyonu, ML Kit'in vararg format listesi ile aynı şekilde çalışır.

Sonuç Erişimi: rawValue ve format

ML Kit'in sonuç nesnesi rawValue (bir String?) ve format (bir Int sabit değeri) sunar. IronBarcode'un sonuç nesnesi Value (bir string) ve Format (bir BarcodeEncoding enum değeri) sunar.

//ML Kit Kotlin— result fields
val rawValue: String? = barcode.rawValue
val format: Int = barcode.format
val boundingBox: Rect? = barcode.boundingBox
val displayValue: String? = barcode.displayValue
Text
//IronBarcode C#— result fields
string value = barcode.Value;
BarcodeEncoding format = barcode.Format;
int page = barcode.PageNumber; // populated for PDF / multi-page input
C#

barcode.Value, IronBarcode'da her zaman null olmayan bir dizedir - okuma başarılıysa, değer mevcuttur. barcode.Format, doğrudan karşılaştırabileceğiniz BarcodeEncoding enum üyesidir: if (barcode.Format == BarcodeEncoding.QRCode).

.NET'te Ne Farklı

Geri çağırma yerine senkron API. Bu en önemli yapısal değişikliktir. ML Kit'in scanner.process(), Android anlamında bir Task<List<Barcode>> döndürür — dinleyicileri zincirlersiniz. IronBarcode'un BarcodeReader.Read(), sonucu satır içinde döndürür. Bir MAUI uygulamasında UI iş parçacığından uzak çalıştırmanız gerekiyorsa, Task.Run() içinde sarın:

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;
    });
}

Bağlam parametresi yok. Bir InputImage oluşturan her ML Kit çağrısı, bir Android Context gerektirir.IronBarcode yalnızca bir dosya yolu veya akışa ihtiyaç duyar. Barkod mantığından bağlam iş parçacığı yönetimini kaldırmak, kodu önemli ölçüde basitleştirir.

Google Play Hizmetleri yok. Standart ML Kit modeli Play Hizmetleri aracılığıyla çalışır - BarcodeScanning.getClient(), Çalışma zamanında Play Hizmetleri kullanılabilirliğini kontrol eder ve kullanılamıyorsa hata verir. IronBarcode'da çalışma zamanı hizmeti kontrolü yoktur. Ya resmi okur ya da standart bir hata fırlatır.

Standart istisna işlemesi. ML Kit'in addOnFailureListener, bir Java Exception alt sınıfı alır. .NET'te, hatalar standart System.Exception hataları olarak yüzeye çıkar, normal yolla try/catch ile yakalanabilir.

PDF Belgelerden Okuma

ML Kit'in PDF desteği yoktur. Bir InputImage.fromFilePath() URI'si ya başarısız olur ya da Android sürümüne bağlı olarak yalnızca ilk sayfayı rasterleştirilmiş bir görüntü olarak okur. Aktarma senaryonuz belgeleri içeriyorsa — fatura işleme, lojistik manifestolar, form tarama —IronBarcode PDF'leri yerel olarak işler:

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}");
}

Görüntü çıkartma adımı yok, üçüncü taraf PDF kütüphanesi yok, ayrı render ile sayfa yineleme döngüsü yok. PDF yolunu geçin, sayfalarıyla birlikte tüm barkod değerlerini geri alın.

Yeni Yetenekler: Üretim

ML Kit barkod üretmez — yalnızca okur. Aktardığınız uygulamanız etiketi, bileti veya QR kodları üretmesi gerekiyorsa,IronBarcode aynı pakette bu kapsamı içerir.

Gönderi etiketleri için Code 128:

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-2024-98341", BarcodeEncoding.Code128)
    .ResizeTo(400, 120)
    .SaveAsPng("shipping-label.png");

QR kod oluşturma:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/track/98341", 500)
    .SaveAsPng("tracking-qr.png");

Logo ve renk içeren QR kod:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500)
    .AddBrandLogo("company-logo.png")
    .ChangeBarCodeColor(System.Drawing.Color.DarkBlue)
    .SaveAsPng("product-qr.png");

HTTP yanıtı için bayt dizisi olarak barkodu döndürme:

using IronBarCode;

// In anASP.NET Corecontroller action
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode)
    .ToPngBinaryData();

return File(barcodeBytes, "image/png");
C#

Bu desenlerin ML Kit eşdeğerleri yoktur. Tam .NET barkod kütüphanesinde çalışarak kullanılabilir yeni kapasiteler.

Sunucu Tarafı Yığın İşleme

ML Kit, çağrı başına bir görüntü işler, Android/iOS çalışma zamanı gerektirir ve sunucu tarafı yürütme kavramına sahip değildir. IronBarcode, dosyaları bir döngüde işler, ASP.NET Core'da çalışır ve normal olarak ölçeklenir:

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}");
}

Bu desen — görüntüleri bir klasörden okuma, barkodları çıkarma, sonuçları toplama — ML Kit ile mümkün değildir. Bu, standart bir IronBarcode iş akışıdır.

Özellik Karşılaştırması

ÖzellikGoogle ML KitIronBarcode
.NET NuGet paketiNoneBarCode
C# / .NET APINoneEvet
Barkod okumaEvet (Android/iOS)Evet (tüm platformlar)
Barkod oluşturmaHayırEvet
QR kod üretimiHayırEvet
QR logo yerleştirmeHayırEvet
PDF girdisiHayırEvet
Çok sayfalı belge desteğiHayırEvet
Kamera/kare girdisiEvetGörüntü dosyası üzerinden
Sunucu tarafı dağıtımHayırEvet
ASP.NET CoreHayırEvet
Azure FunctionsHayırEvet
Docker / LinuxHayırEvet
Google Play Hizmetleri gerekliYalnızca paketlenmemiş varyantHayır
Firebase bağımlılığıHayır (Haziran 2020'den beri bağımsız)Hayır
Senkron .NET APIHayırEvet
Bağımlılık enjeksiyon dostuHayırEvet (statik API)
ExpectMultipleBarcodes seçeneğiSonuç listesi üzerindenBarcodeReaderOptions
Biçim belirtimisetBarcodeFormats()ExpectBarcodeTypes
Hız/doğruluk takasıSabit (model tabanlı)ReadingSpeed enum
FiyatlandırmaÜcretsiz (cihaz üzerinde, yalnızca mobil)$999'dan itibaren (Lite) süresiz
PlatformlarAndroid, iOSWindows, Linux, macOS, Docker, Azure, AWS

Geçiş Kontrol Listesi

Android kod tabanını aktarıyorsanız veya gayri resmi bir Xamarin ML Kit bağlama değiştiriyorsanız, projeinizde bu desenleri arayın ve yukarıdaki çevirileri uygulayın:

  • Gradle dosyalarındaki com.google.mlkit:barcode-scanning → kaldırın, BarCode NuGet ekleyin
  • BarcodeScannerOptions.Builder()new BarcodeReaderOptions { }
  • BarcodeScanning.getClient(options) → kaldır (IronBarcode'da tarayıcı örneği yok)
  • InputImage.fromFilePath(context, uri) → dosya yolu dizisi argümanı
  • InputImage.fromBitmap(bitmap, rotation)BarcodeReader.Read(stream) veya bayt dizisi aşırı yüklemesi
  • scanner.process(inputImage)BarcodeReader.Read(path, options)
  • .addOnSuccessListener { barcodes -> }Read() dönüş değerini yineleyin
  • .addOnFailureListener { e -> }Read() etrafında try/catch kullanın
  • barcode.rawValuebarcode.Value
  • barcode.formatbarcode.Format
  • Barcode.FORMAT_QR_CODEBarcodeEncoding.QRCode
  • Barcode.FORMAT_CODE_128BarcodeEncoding.Code128
  • Barcode.FORMAT_ALL_FORMATSExpectBarcodeTypes 'i atlayın
  • using Google.MLKit.BarcodeScanning; (Xamarin bağlama) → using IronBarCode;
  • IronBarCode.License.LicenseKey, MauiProgram.cs, Program.cs veya Startup.cs içinde ayarlanmalıdır

Geri çağırma tabanlı koddan senkron koda yapısal değişim ana çalışmadır. Format sabitleri ve sonuç alanı adları doğrudan eşlemelerdir. PDF ve üretim desteği tamamen eklentiseldir — hiçbir geçiş gerektirmez, sadece yeni kod.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez