C#'ta bir .NET MAUI Barkod Tarayıcı Nasıl Oluşur?
IronBarcode, .NET MAUI uygulamanızın içerisinden doğrudan resim dosyalarından barkod taramanıza olanak tanır -- kamera akışı, sürücü yapılandırması veya platforma özgü izin döngüleri gerekmez.
JPEG, PNG, GIF, TIFF ve BMP dosyalarından barkodları tek bir yöntem çağrısıyla tarayabilirsiniz. Aynı kod, değişiklik yapmadan Windows, Android ve iOS'u hedefler. Yukarıdaki kod örneklerini takip etmek için ücretsiz deneme ile başlayın.
Barkod Tarama için Bir .NET MAUI Projesi Nasıl Oluşturulur?
Visual Studio'da bir .NET MAUI projesi kurmak oldukça basittir. Visual Studio 2022 veya daha yenisini başlatın, Yeni bir proje oluşturun seçeneğini seçin, .NET MAUI Uygulaması şablonunu seçin, proje adınızı girin ve hedef platformlarınızı seçin. Bu eğitim Windows dağıtımına odaklanır, ancak aynı proje Android ve iOS üzerinde de çalışır. .NET MAUI, C# ve XAML kullanarak tek bir ortak kod tabanı üzerinden yerel mobil ve masaüstü uygulamalar oluşturmaya yönelik Microsoft'un çok platformlu framework'üdür.
Kamera tabanlı çözümler gibi CameraView ayarları ve MauiProgram.cs kaydı gerektiren ZXing.Net.MAUI'den farklı olarak, IronBarcode özel bir yapılandırma gerektirmez. Sizin MauiProgram.cs varsayılan şablon durumunda kalır. Bu, başlangıç kodunuzu üçüncü taraf işleyici kayıtlarından özgür tutar ve başlangıç zamanında oluşabilecek hata riski alanını azaltır.
IronBarcode'u yüklemek için Paket Yöneticisi Konsolu'nda bu komutu çalıştırın:
Install-Package BarCode
Bu tek paket, barkod tarama, QR kod tanıma, çoklu barkod algılama ve barkod oluşturma imkanı sunar. Ek bağımlılıklar gerekmez.
IronBarcode'u üretimde etkinleştirmek için lisans anahtarınızı App.xaml.cs veya MauiProgram.cs içerisine ayarlayın:
IronBarCode.License.LicenseKey = "YOUR_IRONBARCODE_LICENSE_KEY";
IronBarCode.License.LicenseKey = "YOUR_IRONBARCODE_LICENSE_KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR_IRONBARCODE_LICENSE_KEY"
Bir anahtarı IronBarcode lisans sayfası'ndan alabilir veya ücretsiz deneme lisansı ile başlayabilirsiniz.
Görüntü Tabanlı Tarama için İzinler Nasıl Farklılık Gösterir?
Geleneksel kamera tabanlı barkod tarayıcılar, platform manifestlerinde açık izinler gerektirir. Android'de, AndroidManifest.xml eklemeniz gerekiyor:
<uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
iOS'ta, NSCameraUsageDescription'i Info.plist'te beyan edersiniz. Çalışma zamanında reddedilen izinlerin ele alınması, gözden kaçması kolay hata yolları ekler.
IronBarcode bir kamera önizlemesi yerine bir dosya akışından okuduğu için, sadece dosya sistemine erişim ihtiyacınız var. Windows'ta bu otomatik olarak sağlanır. Android ve iOS'ta, kullanıcı bir resim seçtiğinde kullanıcı onayını FilePicker yönetir -- manuel izin talepleri gerekmez.
Bir MAUI Barkod Tarayıcı için Hangi XAML Arayüzü En İyi Çalışır?
Çoğu barkod tarama senaryosunu kapsayan minimal bir arayüz -- bir resim seçici düğmesi, bir resim görüntüleme alanı ve bir sonuçlar etiketi içerir. .NET MAUI ContentPage için bu düzeni oluşturan aşağıdaki XAML:
<?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="BarcodeScanner.MainPage">
<ScrollView>
<VerticalStackLayout Spacing="20" Padding="30">
<Label Text="MAUI Barcode Scanner"
FontSize="24"
HorizontalOptions="Center" />
<Button x:Name="SelectImageBtn"
Text="Select Image File"
Clicked="OnSelectImage" />
<Image x:Name="SelectedImageDisplay"
HeightRequest="250" />
<Label x:Name="ResultsLabel"
Text="Barcode results will appear here" />
</VerticalStackLayout>
</ScrollView>
</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="BarcodeScanner.MainPage">
<ScrollView>
<VerticalStackLayout Spacing="20" Padding="30">
<Label Text="MAUI Barcode Scanner"
FontSize="24"
HorizontalOptions="Center" />
<Button x:Name="SelectImageBtn"
Text="Select Image File"
Clicked="OnSelectImage" />
<Image x:Name="SelectedImageDisplay"
HeightRequest="250" />
<Label x:Name="ResultsLabel"
Text="Barcode results will appear here" />
</VerticalStackLayout>
</ScrollView>
</ContentPage>
Düzen, dosya seçiciyi tetiklemek için bir düğme, seçilen görüntü için bir görüntüleme alanı ve çözümlenmiş barkod değerleri için bir etiket sunar. Tüm .NET MAUI hedef platformlarında platforma özgü ayarlamalar yapmadan doğru bir şekilde işler.
Üretim uygulamaları için, birden fazla barkod sonucunu kaydırılabilir bir listede görüntülemek için, özellikle birden fazla barkod içeren belgeleri tararken, ResultsLabel'i CollectionView ile değiştirmeyi düşünün.
.NET MAUI'de Görüntü Dosyalarından Barkodları Nasıl Tararsınız?
MainPage.xaml.cs içindeki arka plan kodu, resim seçimini ve barkod okumayı yönetir. BarcodeReader.Read bir dosya yolunu kabul eder ve bir BarcodeResults koleksiyonu döndürür. Koleksiyondaki her öğe barkod Value, BarcodeType ve konum koordinatlarını açığa çıkarır.
İşte tam uygulama:
using IronBarCode;
namespace BarcodeScanner;
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private async void OnSelectImage(object sender, EventArgs e)
{
try
{
// Open the system file picker filtered to image types
var result = await FilePicker.PickAsync(new PickOptions
{
FileTypes = FilePickerFileType.Images,
PickerTitle = "Select a barcode image"
});
if (result != null)
{
// Display the selected image in the UI
var stream = await result.OpenReadAsync();
SelectedImageDisplay.Source = ImageSource.FromStream(() => stream);
// Decode all barcodes found in the image
var barcodes = BarcodeReader.Read(result.FullPath);
if (barcodes.Count > 0)
{
// Build a display string listing each barcode type and value
string output = string.Join("\n",
barcodes.Select(b => $"{b.BarcodeType}: {b.Value}"));
ResultsLabel.Text = output;
}
else
{
ResultsLabel.Text = "No barcodes detected in image";
}
}
}
catch (Exception ex)
{
ResultsLabel.Text = $"Error: {ex.Message}";
}
}
}
using IronBarCode;
namespace BarcodeScanner;
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private async void OnSelectImage(object sender, EventArgs e)
{
try
{
// Open the system file picker filtered to image types
var result = await FilePicker.PickAsync(new PickOptions
{
FileTypes = FilePickerFileType.Images,
PickerTitle = "Select a barcode image"
});
if (result != null)
{
// Display the selected image in the UI
var stream = await result.OpenReadAsync();
SelectedImageDisplay.Source = ImageSource.FromStream(() => stream);
// Decode all barcodes found in the image
var barcodes = BarcodeReader.Read(result.FullPath);
if (barcodes.Count > 0)
{
// Build a display string listing each barcode type and value
string output = string.Join("\n",
barcodes.Select(b => $"{b.BarcodeType}: {b.Value}"));
ResultsLabel.Text = output;
}
else
{
ResultsLabel.Text = "No barcodes detected in image";
}
}
}
catch (Exception ex)
{
ResultsLabel.Text = $"Error: {ex.Message}";
}
}
}
Imports IronBarCode
Namespace BarcodeScanner
Public Partial Class MainPage
Inherits ContentPage
Public Sub New()
InitializeComponent()
End Sub
Private Async Sub OnSelectImage(sender As Object, e As EventArgs)
Try
' Open the system file picker filtered to image types
Dim result = Await FilePicker.PickAsync(New PickOptions With {
.FileTypes = FilePickerFileType.Images,
.PickerTitle = "Select a barcode image"
})
If result IsNot Nothing Then
' Display the selected image in the UI
Dim stream = Await result.OpenReadAsync()
SelectedImageDisplay.Source = ImageSource.FromStream(Function() stream)
' Decode all barcodes found in the image
Dim barcodes = BarcodeReader.Read(result.FullPath)
If barcodes.Count > 0 Then
' Build a display string listing each barcode type and value
Dim output As String = String.Join(vbCrLf, barcodes.Select(Function(b) $"{b.BarcodeType}: {b.Value}"))
ResultsLabel.Text = output
Else
ResultsLabel.Text = "No barcodes detected in image"
End If
End If
Catch ex As Exception
ResultsLabel.Text = $"Error: {ex.Message}"
End Try
End Sub
End Class
End Namespace
BarcodeReader.Read verilen yoldaki dosyayı işler, mevcut tüm barkod sembolojilerini otomatik olarak tespit eder ve sonuçları hemen döndürür. Bu yöntem, Code 128, Code 39, QR Code, Data Matrix, PDF417 ve EAN-13 dahil olmak üzere tüm büyük 1D ve 2D barkod formatlarını destekler.
FilePicker.PickAsync çağrısı, kullanıcıların yanlışlıkla resim olmayan dosyaları seçmesini önlemek için seçiciyi resim türleriyle sınırlar. result null ise, kullanıcı iptal etti demektir -- if (result != null) koruması bunu sessizce idare eder.
Taranan Sonuçları Bir Diyalog Kutusunda Nasıl Gösterirsiniz?
Kısa onay mesajları için, DisplayAlert ek UI elemanları gerektirmeden bir modül diyalog kutusu sağlar:
private async void ShowScanSummary(BarcodeResults barcodes)
{
if (barcodes.Count > 0)
{
// Inform the user how many barcodes were detected
string message = $"Found {barcodes.Count} barcode(s) in the image.";
await DisplayAlert("Scan Complete", message, "OK");
}
else
{
await DisplayAlert("No Results", "No barcodes were found in the image.", "OK");
}
}
private async void ShowScanSummary(BarcodeResults barcodes)
{
if (barcodes.Count > 0)
{
// Inform the user how many barcodes were detected
string message = $"Found {barcodes.Count} barcode(s) in the image.";
await DisplayAlert("Scan Complete", message, "OK");
}
else
{
await DisplayAlert("No Results", "No barcodes were found in the image.", "OK");
}
}
Private Async Sub ShowScanSummary(barcodes As BarcodeResults)
If barcodes.Count > 0 Then
' Inform the user how many barcodes were detected
Dim message As String = $"Found {barcodes.Count} barcode(s) in the image."
Await DisplayAlert("Scan Complete", message, "OK")
Else
Await DisplayAlert("No Results", "No barcodes were found in the image.", "OK")
End If
End Sub
Bu desen, basit onay akışları için iyi çalışır. Çözümlenen değerlere göre harekete geçmesi gereken uygulamalar için -- örneğin, bir barkod envanter yönetim sisteminde bir ürünün barkodunu aramak gibi -- barcodes koleksiyonunu iş mantığı katmanınıza doğrudan OnSelectImage işlemcisinden iletin.
Birden Fazla Barkodu Nasıl Tarar ve Tespit Hızını Nasıl Ayarlarsınız?
Bir resim birden fazla barkod içerdiğinde, IronBarcode varsayılan olarak hepsini algılar. Hangi formatların beklenildiğini biliyorsanız ve daha iyi performans istiyorsanız, BarcodeReaderOptions'i BarcodeReader.Read çağrılmadan önce yapılandırın:
using IronBarCode;
// Target only QR codes and Code 128 for faster detection
var options = new BarcodeReaderOptions
{
ExpectMultipleBarcodes = true,
ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
Speed = ReadingSpeed.Balanced
};
var barcodes = BarcodeReader.Read(imagePath, options);
foreach (var barcode in barcodes)
{
Console.WriteLine($"Type: {barcode.BarcodeType} | Value: {barcode.Value}");
}
using IronBarCode;
// Target only QR codes and Code 128 for faster detection
var options = new BarcodeReaderOptions
{
ExpectMultipleBarcodes = true,
ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
Speed = ReadingSpeed.Balanced
};
var barcodes = BarcodeReader.Read(imagePath, options);
foreach (var barcode in barcodes)
{
Console.WriteLine($"Type: {barcode.BarcodeType} | Value: {barcode.Value}");
}
Imports IronBarCode
' Target only QR codes and Code 128 for faster detection
Dim options As New BarcodeReaderOptions With {
.ExpectMultipleBarcodes = True,
.ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128,
.Speed = ReadingSpeed.Balanced
}
Dim barcodes = BarcodeReader.Read(imagePath, options)
For Each barcode In barcodes
Console.WriteLine($"Type: {barcode.BarcodeType} | Value: {barcode.Value}")
Next
ExpectBarcodeTypes özelliği tespit motorunu belirtilen sembolojilere daraltır. Speed'i ReadingSpeed.Faster olarak ayarlamak, yüksek kontrastlı, bozulmamış görüntüler için uygundur. ReadingSpeed.Detailed, ek görüntü düzeltme geçişleri uygular ve döndürme, eğim ve düşük çözünürlük girdilerini ek işlem süresi karşılığında işler.
ExpectMultipleBarcodes = true okuma işlemini erken dönmek yerine ilk eşleşmeden sonra taramaya devam etmesini söyler. Tek barkodlu senaryolarda, bu seçeneği devre dışı bırakmak, her taramadan birkaç milisaniye tasarruf sağlar.
Bu yapılandırma, tarayıcıyı bir dizi uygulama için pratik hale getirir: ürün barkodlarını okuyan bir perakende uygulaması, gönderi fotoğraflarındaki basılı barkod etiketlerini işleyen bir depo aracı veya yüklenen faturalar üzerindeki QR kodlarını çıkaran bir belge iş akışı.
Zorlayıcı veya Düşük Kaliteli Görselleri Nasıl Yönetirsiniz?
Üretim görüntüleri nadiren kusursuz olur. Sert ışıklandırma altında çekilmiş depo fotoğrafları, e-posta istemcilerinden alınan ekran görüntüleri ve taranmış belgeler, gürültü, sıkıştırma hataları ve geometrik bozulmaları beraberinde getirir. IronBarcode, kod çözmeden önce resimleri önceden işlemek için ImageFilterCollection'i açığa çıkarır.
using IronBarCode;
using IronSoftware.Drawing;
// Apply corrections for a low-quality warehouse photo
var options = new BarcodeReaderOptions
{
ImageFilters = new ImageFilterCollection
{
new SharpenFilter(),
new ContrastFilter(1.2f),
new DenoiseFilter()
},
Speed = ReadingSpeed.Detailed
};
var barcodes = BarcodeReader.Read(imagePath, options);
using IronBarCode;
using IronSoftware.Drawing;
// Apply corrections for a low-quality warehouse photo
var options = new BarcodeReaderOptions
{
ImageFilters = new ImageFilterCollection
{
new SharpenFilter(),
new ContrastFilter(1.2f),
new DenoiseFilter()
},
Speed = ReadingSpeed.Detailed
};
var barcodes = BarcodeReader.Read(imagePath, options);
Imports IronBarCode
Imports IronSoftware.Drawing
' Apply corrections for a low-quality warehouse photo
Dim options As New BarcodeReaderOptions With {
.ImageFilters = New ImageFilterCollection From {
New SharpenFilter(),
New ContrastFilter(1.2F),
New DenoiseFilter()
},
.Speed = ReadingSpeed.Detailed
}
Dim barcodes = BarcodeReader.Read(imagePath, options)
SharpenFilter sıkıştırılmış veya odak dışı yakalamalardan kenar tanımını kurtarır. ContrastFilter ışığın düzensiz olduğu durumlarda yardımcı olur. DenoiseFilter düşük çözünürlüklü taramalardan gelen lekeleri azaltır. Bu filtreleri ReadingSpeed.Detailed ile birleştirmek, zorlu materyallerde okuma oranlarını en üst düzeye çıkarır.
.NET MAUI uygulamaları kullanıcı tarafından yüklenen görüntüleri çeşitli kaynaklardan kabul ediyorsa, varsayılan olarak muhafazakar bir filtre seti uygulamak ve ikinci bir denemede daha agresif bir düzeltmeye çıkmak, yaygın durumda görünür bir gecikme eklemeden kullanıcı deneyimini iyileştirir. Ayrıca, bir Uri veya byte[]'i direkt olarak BarcodeReader.Read'ye iletebilirsiniz, bu dosya sisteminden ziyade bir ağ yanıtından gelen görüntüler için kullanışlıdır. IronBarcode kullanım kılavuzlarına ek girdi kaynak örnekleri için bakın.
Görüntü Tabanlı Tarama Neden .NET MAUI Uygulamaları İçin Uygundur?
Canlı kamera taraması, bir CameraView kontrolü üzerinden platforma özgü izinler, kamera önizleme için yaşam döngüsü yönetimi ve odak olaylarının ele alınmasını gerektirir. iOS'ta bu AVCaptureSession'yi de yapılandırmak anlamına gelir; Android'de, CameraX. Her platform kendi hata modlarını ekler.
Görüntü tabanlı tarama, bu endişe kategorisinin tamamını ortadan kaldırır. IronBarcode API referansı, BarcodeReader.Read'in bir dosya yolu, Stream, Bitmap veya byte[] kabul ettiğini gösterir -- MAUI uygulamanızın üretebileceği herhangi bir temsil. Bu, görüntü FilePicker, bir ağ indirmesi, bit eşlemine dönüştürülmüş bir PDF sayfası veya bir e-posta eki olup olmadığını aynı tarama mantığının çalıştığı anlamına gelir.
Kamera donanımı kapalı kaldığı için pil tüketimi daha düşüktür. Canlı önizlemeden kaynaklanan bir kullanıcı arayüzü titreşimi yoktur ve uygulama askıya alınıp tekrar başladığında kamera yaşam döngüsü olaylarını yönetmeye gerek yoktur. Tablet ve masaüstü form faktörlerinde -- bir canlı kamera vizörünün nadiren uygun olduğu yerlerde -- görüntü tabanlı kod çözme doğal varsayılandır, bir uzlaşma değil. Kullanıcılar, cihaz türünden bağımsız olarak bulut depolama, yerel klasörler veya kamera rulolarından dosyaları aynı FilePicker çağrısı ile açabilirler.
Kullanıcıların barkod etiketlerini fotoğraflayıp yüklediği iş akışları için -- ASP.NET barkod tarayıcı web uygulamalarında yaygın -- aynı BarcodeReader.Read çağrısı hem mobil istemcide hem de sunucuda çalışır, iki tarama uygulamasını sürdürme gereğini ortadan kaldırır.
IronBarcode, ZXing.Net.MAUI ile Nasıl Karşılaştırılır?
ZXing.Net.MAUI, canlı kamera taramayı hedefler ve bir ürün gereksinimi olarak gerçek zamanlı vizör geri bildirimi gerektiğinde iyi çalışır. CameraView entegrasyonu, platform işlemci kaydı ve çalışma zamanı izin talepleri gerektirir.
IronBarcode, çoğu kurumsal doküman iş akışını kapsayan dosya tabanlı ve akış tabanlı kod çözmeyi hedefler. Daha geniş bir semboloji yelpazesini destekler; buna PDF417, Data Matrix ve Code 128 dahildir ve ZXing tarafından sunulmayan görüntü filtreleme ön işleme sağlar. Kullanıcıların nesneleri canlı olarak taramak yerine görüntü yakaladıkları veya yükledikleri uygulamalar için IronBarcode daha doğrudan bir uyum sağlar.
Uygulamanızın, dosya tabanlı kod çözmenin yanı sıra canlı kamera taramasına da ihtiyacı varsa, her iki kütüphaneyi birleştirebilirsiniz: vizör iş akışı için ZXing.Net.MAUI ve toplu dosya işleme için IronBarcode.
Sonraki Adımlarınız Neler?
IronBarcode ile bir .NET MAUI barkod tarayıcı oluşturmak, 30 satırdan az C# kodu gerektirir. Resim dosyası yaklaşımı, MAUI kod tabanınızı kamera izin mantığından ve platforma özgü başlangıç kodlarından arındırır, ve aynı tarama çağrısı Windows, Android ve iOS'ta aynı şekilde çalışır.
IronBarcode API dökümantasyonu, ek yetenekler içerir: PDF belgelerinden barkod okuma, birden fazla resmi toplu işleme, özel görüntü filtreleri yazma ve barkodları okumayla birlikte oluşturma. Özellikler genel bakışı, desteklenen her sembol ve formatı listeler.
Ücretsiz deneme başlatın ve projenizde IronBarcode'u test edin veya üretim dağıtımı için hazır olduğunuzda bir lisans satın alın.
Sıkça Sorulan Sorular
.NET MAUI'de kamera olmadan barkod tarayıcı nasıl oluşturulur?
IronBarcode'u NuGet üzerinden yükleyin (`Install-Package BarCode`), ardından `FilePicker.PickAsync`'ten elde edilen yol ile `BarcodeReader.Read(filePath)` çağrısını yapın. Kamera izinleri veya `CameraView` kurulumu gerekmez.
IronBarcode, .NET MAUI'de Android ve iOS'ta barkod tarıyor mu?
Evet. Aynı `BarcodeReader.Read` çağrısı Windows, Android ve iOS'ta platforma özgü kod yolları veya manifesto değişiklikleri olmadan çalışır.
IronBarcode, barkod tarama için hangi resim formatlarını destekliyor?
IronBarcode, JPEG, PNG, GIF, TIFF ve BMP dosyalarından barkodları okur. Ayrıca `Stream`, `Bitmap` ve `byte[]` girişlerini kabul eder, böylece ağ yanıtlarından gelen görüntüler önce diske yazılmadan çalışır.
.NET MAUI'de tek bir resimden birden fazla barkodu nasıl tararsınız?
`BarcodeReaderOptions` içinde `ExpectMultipleBarcodes = true` ayarlayın ve seçenekleri `BarcodeReader.Read`'e iletin. Okuyucu, tek bir `BarcodeResults` koleksiyonu içinde algılanan tüm barkodları döndürür.
IronBarcode ile ZXing.Net.MAUI arasındaki fark nedir?
ZXing.Net.MAUI, bir `CameraView` kontrolü aracılığıyla canlı kamera taramasını hedefler. IronBarcode, dosya tabanlı ve akış tabanlı kod çözmeyi hedefler, daha fazla semboloji destekler (PDF417 ve Veri Matrisi dahil) ve düşük kaliteli girdiler için resim filtre ön işleme sağlar.
Bulanık veya düşük kaliteli görüntülerde barkod algılamayı nasıl geliştirebilirsiniz?
Bir `ImageFilterCollection`'ı `BarcodeReaderOptions`'a `SharpenFilter`, `ContrastFilter` ve `DenoiseFilter` ile ekleyin ve `Speed = ReadingSpeed.Detailed` olarak ayarlayın. Bu, kod çözme geçişinden önce görüntü düzeltmeleri uygular.
IronBarcode, .NET MAUI'de hangi barkod formatlarını destekliyor?
IronBarcode, tüm büyük 1D ve 2D sembolojileri destekler: Code 128, Code 39, QR Code, Veri Matrisi, PDF417, EAN-13, EAN-8, UPC-A, UPC-E, Aztec ve daha fazlası. Tam liste IronBarcode özellik sayfasında yer almaktadır.




