Altbilgi içeriğine atla
IRONBARCODE KULLANARAK

IronBarcode ile MAUI Barkod Tarayıcı: Adım Adım Rehber

Mobil uygulamalar, envanter yönetimi, satış noktası sistemleri ve ürün takibi için giderek artan bir şekilde barkod taramasına güveniyor. Bir MAUI barkod tarayıcı inşa etmek, QR kodları, Veri Matrisi ve diğer barkod formatlarını algılamak için kamera beslemesini görüntü dosyası işlemesiyle birleştirerek barkod algılamayı doğrudan .NET MAUI uygulamanıza entegre etmenize olanak tanır. Birçok kütüphane kamera önizlemesine odaklanırken, IronBarcode zor koşullar altında bile barkodları doğru bir şekilde okumada mükemmeldir -- eğimli açılar, kötü aydınlatma ve hasar görmüş etiketler ekstra yapılandırma gerektirmeden ele alınır.

Bu kılavuz, IronBarcode kullanarak bir .NET MAUI projesinde barkod taramanın her adımını anlatır. Sonunda, tek bir görüntü dosyasından birden fazla barkod tarayabilir, cihaz kamerasından barkodları yakalayabilir ve kütüphaneyi çapraz platform projelerinize sorunsuz bir şekilde entegre edebilirsiniz.

MAUI Barkod Tarayıcı İnşa Etmek İçin Gereken Önkoşullar Nelerdir?

Başlamadan önce geliştirme ortamınızı düzenli hale getirdiğinizden emin olun:

  • Visual Studio 2022 (v17.8 veya üstü) .NET MAUI iş yükü yüklü
  • .NET 10 SDK -- resmi .NET sitesinden indirin
  • Temel C# bilgisi -- asenkron/await kalıplarına aşinalık faydalı olacaktır
  • Fiziksel cihaz veya emülatör kamera testine ayarlanmış
  • IronBarcode lisansı -- değerlendirme için ücretsiz deneme mevcuttur

Geliştirme sırasında MAUI iş yükünün yüklü olması, projenizi oluştururken önemli ölçüde sorun giderme süresinden tasarruf eder. Visual Studio Installer'da "Bireysel bileşenler" altında ".NET Çoklu-platform App UI geliştirme" arayarak bunu doğrulayabilirsiniz.

IronBarcode MAUI'nde Nasıl Yer Alıyor?

.NET MAUI, Android, iOS, macOS ve Windows'u hedefleyen tek bir kod tabanı sunar. Bu ortamda barkod taramasıyla ilgili zorluk, her platformun kamera erişimini farklı ele almasıdır. IronBarcode, bu durumu görüntü işleme katmanında çalışarak ele alır -- görüntüyü MAUI'nin MediaPicker ile yakalayıp, ardından analizi için baytları IronBarcode'a aktarırsınız.

Bu ilgisizlik ayrıcalığı sizin kodunuzu temiz tutar ve platforma özel barkod SDK'larından kaçınmayı sağlar. IronBarcode'ın çevrimdışı işleme modeli ayrıca, barkod verilerinin asla cihazdan ayrılmaması anlamına gelir ki, bu düzenlenmiş endüstrilerde önemlidir.

Desteklenen Barkod Formatları

IronBarcode geniş bir format yelpazesini okur, bunlar arasında:

IronBarcode tarafından desteklenen barkod formatları
Format Kategorisi Formatlar Yaygın Kullanım Alanları
1D Lineer Kod 128, Kod 39, EAN-13, UPC-A, ITF Perakende, lojistik, sağlık
2D Matriks QR Kodu, Veri Matrisi, Aztek, PDF417 Mobil ödemeler, biletleme, üretim
Posta Hizmetleri USPS, Royal Mail, Deutsche Post Nakliye ve posta hizmetleri
Özel Formatlar MaxiCode, GS1, MicroPDF417 Tedarik zinciri, taşımacılık, paketler

Bir MAUI Barkod Tarama Projesi Nasıl Kurulur?

Visual Studio 2022'de yeni bir .NET MAUI Uygulama projesi oluşturarak başlayın. Adını BarcodeScannerApp koyun ve hedef çerçeve olarak .NET 10'u seçin. Visual Studio, Android, iOS, macOS ve Windows için platforma özgü klasörlerle standart MAUI proje yapısını oluşturur.

IronBarcode'u NuGet Üzerinden Yükleme

NuGet Paket Yöneticisi Konsolu'nu açın ve şunu çalıştırın:

Install-Package BarCode

Alternatif olarak, Çözüm Gezgini'nde projenize sağ tıklayıp "NuGet Paketlerini Yönet" seçeneğini seçin, IronBarCode arayın ve en son kararlı sürümünü yükleyin. .NET MAUI projeleri için özel olarak, IronBarcode'un NuGet paketi gerekli tüm yerel bağımlılıkları içerir.

Lisansınızı Etkinleştirme

Kurulumdan sonra, uygulama yaşam döngüsünün başında lisans anahtarınızla IronBarcode'u etkinleştirin. En iyi yer, uygulama oluşturucu çalışmadan önce MauiProgram.cs içindedir:

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

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

Iron Software web sitesinden ücretsiz bir deneme lisans anahtarı edinin. Deneme anahtarları geliştirme sırasında sınırlama olmadan tüm özellikleri değerlendirmenize izin verir, ancak tam lisans uygulayana kadar çıktı üzerine deneme filigranı eklenebilir.

Android ve iOS İçin Kamera İzinleri Nasıl Yapılandırılır?

Platforma özgü kamera izinleri, barkod tarama işlevselliği için esastır. Her platformda, MediaPicker.CapturePhotoAsync() başarılı olmadan önce manifest dosyalarında özel bir yapılandırma gereklidir.

Android İzinleri

Kamera erişimini bildirmek için Platforms/Android/AndroidManifest.xml düzenleyin:

<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

android.permission.CAMERA girişi, kullanıcıdan çalışma zamanı izni ister. uses-feature beyanları, Google Play Store'a uygulamanızın kamera donanımı ve otomatik odaklama özelliğine ihtiyaç duyduğunu bildirir. Bunlar olmadan, Android cihazlar izin isteğini onaylayabilir ancak yine de dahili olarak kamera erişimi engellenebilir.

Android 13 ve sonrası (API seviyesi 33+), ayrıca MainActivity.cs içinde ActivityCompat.RequestPermissions kullanarak detaylı medya izinlerini ele almanız gerekebilir. MAUI MediaPicker soyutlaması bunların çoğunu otomatik olarak halleder, ancak yayımlamadan önce fiziksel cihaz testi önerilir.

iOS İzinleri

Kamera kullanım açıklamasını eklemek için Platforms/iOS/Info.plist'yı değiştirebilirsiniz:

<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, her gizli izin için insan tarafından okunabilir bir açıklama gerektirir. Apple'ın App Store inceleme süreci, bu açıklama eksik veya belirsizse uygulamanızı reddedecektir. Metin, uygulama kameraya erişim talep ettiğinde kullanıcıya gösterilen sistem izin iletişim kutusunda görünür.

iPadOS için, canlı kameranın yanı sıra kullanıcıların kaydedilmiş fotoğraflardan da barkod taraması yapmalarına izin vermeyi planlıyorsanız NSPhotoLibraryUsageDescription eklemeyi de düşünün.

Windows ve macOS

Windows Masaüstü ve macOS hedeflerinde, kamera erişim izinleri sırasıyla uygulama manifesti ve hak Dosyaları aracılığıyla yönetilir. MAUI çerçevesi bunların çoğunu şablon seviyesinde ele alır, ancak Package.appxmanifest üzerinde Windows'ta web kamerası cihaz yeteneğini içerdiğinden emin olun.

Barkod Tarayıcı Arayüzünü Nasıl Oluşturursunuz?

Kullanıcılara tarama işlemi sırasında net geri bildirim veren bir kullanıcı arayüzünü MainPage.xaml içinde tasarlayın. Minimal ama işlevsel bir düzen, bir görüntü önizlemesi, bir sonuç görüntüleme alanı ve bir tarama tetikleme düğmesi içerir:

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

Düzen iki tarama yolu sağlar: kamerayla yeni bir fotoğraf çekmek ve galeriden mevcut bir görüntü seçmek. Bu, kullanıcıların önceden barkodları fotoğrafladığı veya eposta yoluyla görüntüler aldığı iş akışları için önemlidir. FormatLabel tespit edilen barkod formatını ve çözümlenen değeri gösterir, bu da hata ayıklama ve kullanıcı doğrulaması sırasında işe yarar.

Tarama Durumu Geri Bildirimi Ekleme

Daha cilalı bir deneyim için, tarama düğmelerini işlem sırasında gösterilecek bir ActivityIndicator içinde sarmayı düşünün. IronBarcode'un asenkron API'si bunu kolaylaştırır -- IsRunning = true ayarlayabilir ve BarcodeReader.ReadAsync çağrısını yapmadan önce finally bloğunda sıfırlayabilirsiniz.

Barkod Okuyucu İşlevselliğini Nasıl Uygularsınız?

Temel tarama mantığını MainPage.xaml.cs içinde uygulayın. Aşağıdaki kod, uygun asenkron kalıplar ve hata yönetimi ile hem kamera yakalamasını hem de galeri seçimlerini yönetir:

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
$vbLabelText   $csharpLabel

Bu uygulama, görüntü işleme mantığını kamera ve galeri yolları arasında çoğaltmamak için paylaşılan bir ScanFromSource yardımcı yöntem kullanır. AnyBitmap.FromBytes yöntemi, JPEG, PNG, WebP ve diğer yaygın görüntü formatlarını otomatik olarak işler -- manuel format algılama gerekmez.

Sonuç nesnesi, diğer özelliklerin yanı sıra first.Value (çözümlenen dize), first.BarcodeType (format enum) ve first.BarcodeImage (tespit edilen barkod bölgesinin kırpılmış görüntüsü) gibi özellikleri sunar. Tam liste için BarcodeResult sınıf dokümantasyonuna bakın.

Tarama Uygulamanızı Test Etme

Kod yerleştirildikten sonra standart bir barkoda karşı test yapabilirsiniz:

IronBarcode Kullanarak MAUI Barkod Tarayıcı Nasıl Oluşturulur: Şekil 2 - Girdi test barkodu

Tarandıktan sonra, kodlanmış değer ekranda görünür:

IronBarcode Kullanarak MAUI Barkod Tarayıcı Nasıl Oluşturulur: Şekil 3 - Tarandıktan Sonra Barkod Değeri

Gelişmiş Tarama Seçenekleri Nasıl Yapılandırılır?

IronBarcode, belirli kullanım durumunuz için algılama davranışını ince ayarlamanıza olanak tanıyan bir BarcodeReaderOptions nesnesi sunar. Bu seçenekleri anlamak, uygulamanızın ihtiyaçlarına göre hızı ve doğruluğu dengelemenize yardımcı olur.

Belirli Barkod Türlerini Hedefleme

Beklediğiniz tam barkod türlerini belirtmek, işlem süresini önemli ölçüde azaltır çünkü IronBarcode, ihtiyaç duyulmayan format kontrollerini atlar:

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)
$vbLabelText   $csharpLabel

IronBarcode Kullanarak MAUI Barkod Tarayıcı Nasıl Oluşturulur: Şekil 4 - Aynı görüntüden birden fazla kod tarandı

ExpectMultipleBarcodes = true ayarlanması, IronBarcode'a ilk sonucu bulduktan sonra taramaya devam etmesini söyler, bu da tek bir paket fişinin bir düzine barkod içerebileceği depo iş akışları için önemlidir.

Okuma Hız Seçenekleri

ReadingSpeed enum dört seviye sunar: ExtremeDetail, Detailed, Balanced ve QuickScan. Barkodların temiz ve iyi aydınlatılmış olduğu yüksek hacimli senaryolar için QuickScan kullanın. Düşük çözünürlüklü kamera çekimlerinden veya kısmen zarar görmüş etiketlerden tarama yaparken Detailed veya ExtremeDetail seçeneğine geçin.

BarcodeReaderOptions'ı ayarlamak için görüntü düzeltme filtreleri ve güvenlik eşikleri dahil daha fazla bilgi için dokümantasyon kapsamlı örnekler sağlar.

Görüntü Düzeltme ve Ön İşleme

IronBarcode, döndürülmüş, eğilmiş veya kötü aydınlatılmış barkodları otomatik olarak ele alan yerleşik görüntü düzeltmeleri içerir. Ayrıca ön işleme filtrelerini BarcodeReaderOptions.ImageFilters üzerinden manuel olarak uygulayabilirsiniz:

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)
    }
}
$vbLabelText   $csharpLabel

Ön işleme filtreleri, özellikle düşük kaliteli kamera sensörlerine sahip eski Android cihazlarını hedefleyen veya kullanıcıların barkodları depolar veya açık alanlar gibi suboptimal aydınlatma koşullarında fotoğraflayacağı durumlarda faydalıdır.

Yaygın Sorun Giderme Senaryoları Nasıl Yönetilir?

İyi yapılandırılmış bir MAUI barkod tarayıcıya sahip olsanız bile, cihazlara özgü davranışlardan, görüntü kalitesi sorunlarından veya platform kısıtlamalarından kaynaklanan sorunlar ortaya çıkabilir.

Kamera Açılmıyor

Kamera başlatılamazsa, hem AndroidManifest.xml hem de Info.plist içinde izinlerin doğru şekilde bildirildiğini doğrulayın. Sonra, sıcak yükleme yerine temiz bir derlemeden uygulamayı yeniden dağıtın. Android'de, ayrıca test cihazınızın standart olmayan bir kamera yapılandırması kullanıp kullanmadığını kontrol edin -- birden fazla kameraya sahip bazı cihazlar, belirli lens seçimi gerektirir.

Simülatörde MediaPicker.CapturePhotoAsync() desteklenmez. Her zaman kamera özelliklerini fiziksel bir cihazda test edin. Emülatör PickPhotoAsync için galeri seçimini destekler, bu da önceden yüklenmiş görüntülerle temel UI testi için kullanılabilir.

Zayıf Tarama Doğruluğu

IronBarcode, sonuç sağlamıyor veya yanlış değerler döndürüyorsa bu ayarlamaları deneyin:

  • Speed değerini ReadingSpeed.Detailed veya ExtremeDetail olarak arttırın
  • Görüntü filtresi hattına SharpenFilter ve ContrastFilter ekleyin
  • Yakalanan görüntü çözünürlüğünün en az 720p olduğundan emin olun; düşük çözünürlükler Veri Matrisi gibi yoğun formatlarla kaçırılan algılamalara neden olur
  • Barkod türünün ExpectBarcodeTypes maskenize dahil edilip edilmediğini kontrol edin

Format spesifik sorunlar için ek teşhis adımları IronBarcode sorun giderme kılavuzunda yer almaktadır.

Bellek Yönetimi

Büyük kamera görüntüleri, MemoryStream içine yüklendiğinde önemli hafıza tüketir. Tüm akış nesnelerinde yok edilebilmeleri için her zaman using ifadelerini kullanın. Kullanıcıların sıralı şekilde birden fazla öğeyi taradığı sürekli tarama iş akışları için, çöp toplayıcıyı beklemek yerine işleme tamat ekranından sonra açıkça bitmap.Dispose()'yi çağırın.

Android cihazlar sınırlı bellek alanına sahipse, temiz, yüksek kontrastlı barkodları taramak, IronBarcode'a iletmeden önce görüntüyü küçültmeyi düşünün. Tam çözünürlük olmadan doğru bir şekilde kodları çözmeye gerek yoktur.

Platforma Özgü iOS Davranışı

iOS üzerinde, uygulamanız kameraya ilk erişim talep ettiğinde sistem, tek seferlik bir diyalog görüntüler. Kullanıcı bunu reddederse, CapturePhotoAsync'e yapılan sonraki aramalar bir PermissionException fırlatacaktır. Bu durumu, ayarları kullanarak kullanıcıyı Yönlendirme ile ele alın, bunu AppInfo.ShowSettingsUI() ile yapabilirsiniz.

App Store'a göndermeden önce Info.plist içinde NSCameraUsageDescription olduğundan emin olun. Eksik gizlilik dizeleri, inceleme ekibinden ayrıntılı açıklama olmadan otomatik reddine neden olur. İzin isteği zamanlaması ve mesajlaşma konusunda en iyi pratikler için Apple İnsan Arayüz Kılavuzlarına göz atın.

Sonraki Adımlarınız Neler?

Artık, IronBarcode ile çalışan bir MAUI barkod tarayıcısına sahip olduğunuzdan, uygulamanızın gereksinimlerine bağlı olarak birkaç yol mevcuttur:

  • Barkod oluşturma -- IronBarcode, dizge verilerden QR kodlar, Kod 128 etiketler ve diğer formatlar oluşturmak için bir barkod oluşturma API'si içerir
  • Toplu tarama -- BarcodeReader.ReadAsync ile ExpectMultipleBarcodes = true kullanarak döngü içinde birden fazla görüntü dosyasını işleyin; toplu tarama örneklerine bakın
  • PDF barkod çıkarımı -- IronBarcode aynı BarcodeReader sınıfını kullanarak PDF belgelerine gömülü barkodları okuyabilir; PDF barkod okuma dokümantasyonunu inceleyin
  • Stil ve markalama -- renk, logo ve açıklamalarla üretilen barkodların görsel çıktısını özelleştirin; barkod stil seçeneklerine bakın
  • Diğer Iron Software ürünleri -- MAUI uygulamanızın aynı zamanda PDF oluşturma, OCR veya tablo desteği gerektiriyorsa, tutarlı çapraz platform yetenekleri için tam Iron Suite'i keşfedin

Değerlendirme döneminiz sırasında kısıtlama olmadan dağıtım için ücretsiz deneme lisansına başlayın. Üretim lisanslama seçenekleri ve hacim fiyatlandırma için IronBarcode fiyatlandırma sayfasını ziyaret edin. IronBarcode dokümantasyon portalı ve IronBarcode GitHub deposu ek kod örnekleri ve topluluk desteği sağlar.

Sıkça Sorulan Sorular

Bir MAUI barkod tarayıcı için IronBarcode kullanmanın avantajı nedir?

IronBarcode barkodları görüntü katmanında işler, çevrimdışı çalışır, 30'dan fazla formatı destekler ve kötü açılar ve zayıf ışık koşulları gibi zorlu durumları ek yapılandırma gerektirmeden işler.

IronBarcode bir görüntüde birden fazla barkodu algılayabilir mi?

Evet. BarcodeReaderOptions'ta ExpectMultipleBarcodes = true olarak ayarlayın ve BarcodeReader.ReadAsync'yi çağırın. IronBarcode, sonuç koleksiyonunda algılanan tüm barkodları getirir.

MAUI'de Android ve iOS için kamera izinlerini nasıl yapılandırırım?

Android için, AndroidManifest.xml'e CAMERA uses-permission ve uses-feature ögelerini ekleyin. iOS için, Info.plist'e insan okunabilir bir açıklama ile NSCameraUsageDescription ekleyin.

IronBarcode çevrimdışı barkod taramayı destekliyor mu?

Evet. IronBarcode, verileri harici sunuculara göndermeden tamamen cihaz üzerinde işler, bu da gizlilik duyarlı uygulamalar için önemlidir.

IronBarcode MAUI'de hangi barkod formatlarını destekliyor?

IronBarcode; QR Code, Code 128, Code 39, EAN-13, UPC-A, Data Matrix, PDF417, Aztec, MaxiCode ve daha fazlasını destekler. BarcodeEncoding bayrakları kullanarak belirli formatları hedefleyebilirsiniz.

Düşük kaliteli görüntüler için tarama doğruluğunu nasıl artırırım?

Okuma Hızını Detailed veya ExtremeDetail olarak değiştirin, SharpenFilter ve ContrastFilter'ı ImageFilters'e ekleyin ve yakalanan görüntünün en az 720p çözünürlükte olmasını sağlayın.

IronBarcode, bir MAUI uygulamasında PDF dosyalarından barkod okuyabilir mi?

Evet. IronBarcode'un BarcodeReader sınıfı, görüntü dosyaları için kullanılan aynı ReadAsync API ile PDF belgelerine gömülü barkodları çıkarabilir.

Kamera erişimi reddedildiğinde PermissionException'u nasıl yönetirim?

Bir try/catch bloğunda PermissionException'u yakalayın ve kullanıcıyı kamera erişimini tekrar açabilecekleri cihaz Ayarlarına yönlendirmek için AppInfo.ShowSettingsUI()'yi çağırın.

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ı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara