Przejdź do treści stopki
KORZYSTANIE Z IRONBARCODE

Jak zbudować skaner kodów kreskowych MAUI w C#?

IronBarcode pozwala skanować kody kreskowe bezpośrednio z plików graficznych w aplikacji .NET MAUI — bez strumienia z kamery, bez konfiguracji sterowników i bez pętli uprawnień specyficznych dla platformy.

Możesz skanować BARCODES z plików JPEG, PNG, GIF, TIFF i BMP za pomocą jednego wywołania metody. Ten sam kod działa na systemach Windows, Android i iOS bez konieczności modyfikacji. Zacznij od bezpłatnej wersji próbnej, aby śledzić poniższe przykłady kodu.

Jak utworzyć projekt .NET MAUI do skanowania BarCodeów?

Konfiguracja projektu .NET MAUI w Visual Studio jest prosta. Uruchom program Visual Studio 2022 lub nowszą wersję, wybierz opcję Utwórz nowy projekt, wybierz szablon aplikacji .NET MAUI, wprowadź nazwę projektu i wybierz platformy docelowe. Ten sam projekt działa na systemach Android i iOS, jednak niniejszy samouczek skupia się na wdrożeniu w systemie Windows. .NET MAUI to wielopłatformowy framework firmy Microsoft służący do tworzenia natywnych aplikacji mobilnych i desktopowych w językach C# i XAML na podstawie jednej wspólnej bazy kodu.

W odroznieniu od rozwiazan opartych na kamerze, takich jak ZXing.Net.MAUI, ktore wymagaja CameraView ustawienia kontroli i MauiProgram.cs rejestracji, IronBarcode nie wymaga specjalnej konfiguracji. Twoj MauiProgram.cs pozostaje w stanie domyslnego szablonu. Dzięki temu kod Twojego startupu będzie wolny od rejestracji handlerów stron trzecich i zmniejszy się obszar podatny na błędy inicjalizacji w momencie uruchomienia.

Aby zainstalować IronBarcode, uruchom to polecenie w konsoli menedżera pakietów:

Install-Package BarCode

Ten pojedynczy pakiet zapewnia skanowanie kodów kreskowych, rozpoznawanie kodów QR, wykrywanie wielu kodów kreskowych oraz generowanie kodów kreskowych. Nie są wymagane żadne dodatkowe zależności.

Aby aktywowac IronBarcode w srodowisku produkcyjnym, umiesc klucz licencyjny w App.xaml.cs lub MauiProgram.cs:

IronBarCode.License.LicenseKey = "YOUR_IRONBARCODE_LICENSE_KEY";
IronBarCode.License.LicenseKey = "YOUR_IRONBARCODE_LICENSE_KEY";
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR_IRONBARCODE_LICENSE_KEY"
$vbLabelText   $csharpLabel

Klucz można uzyskać na stronie licencyjnej IronBarcode lub rozpocząć korzystanie z bezpłatnej licencji próbnej.

Czym różnią się uprawnienia w przypadku skanowania opartego na obrazach?

Tradycyjne skanery BarCode oparte na kamerach wymagają wyraźnych uprawnień w manifestach platformy. W systemie Android, dodaj do AndroidManifest.xml:

  • <uses-permission android:name="android.permission.CAMERA" />
  • <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

W systemie iOS, deklaruj NSCameraUsageDescription w Info.plist. Obsługa odmowy uprawnień w czasie wykonywania powoduje dodanie ścieżek błędów, które łatwo przeoczyć.

Ponieważ IronBarcode odczytuje dane ze strumienia plików, a nie z podglądu kamery, potrzebny jest jedynie dostęp do systemu plików. W systemie Windows jest to zapewnione automatycznie. W systemach Android i iOS, FilePicker obsluguje zgode uzytkownika na wybor obrazu -- nie sa wymagane zadne reczne zadania uprawnien.

Który interfejs XAML najlepiej sprawdza się w skanerze BarCode MAUI?

Minimalny interfejs — przycisk wyboru obrazu, obszar wyświetlania obrazu i etykieta wyników — obejmuje większość scenariuszy skanowania kodów kreskowych. Ponizszy kod XAML tworzy ten uklad dla .NET MAUI 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>
<?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

Układ zawiera przycisk uruchamiający selektor plików, obszar wyświetlania wybranego obrazu oraz etykietę z odkodowanymi wartościami BarCode. Wyświetla się poprawnie na wszystkich platformach docelowych .NET MAUI bez konieczności dostosowywania do konkretnej platformy.

W aplikacjach produkcyjnych, rozważ zamiane ResultsLabel na CollectionView, aby wyswietlic wiele wynikow kodow kreskowych na przewijanej liscie, zwlaszcza przy skanowaniu dokumentow zawierajacych wiecej niz jeden kod kreskowy.

Jak skanować BarCodes z plików graficznych w .NET MAUI?

Kod w MainPage.xaml.cs obsluguje wybor obrazu i czytanie kodow kreskowych. BarcodeReader.Read przyjmuje sciezke pliku i zwraca kolekcje BarcodeResults. Kazdy element w kolekcji udostepnia Value kodu kreskowego, BarcodeType i wspolrzedne pozycji.

Oto pełna implementacja:

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

BarcodeReader.Read przetwarza plik na podanej sciezce, automatycznie wykrywa wszystkie symbologie kodow kreskowych i natychmiast zwraca wyniki. Metoda obsługuje wszystkie główne formaty BARCODE 1D i 2D, w tym Code 128, Code 39, QR Code, Data Matrix, PDF417 i EAN-13.

Wywolanie FilePicker.PickAsync ogranicza wybierak do typow obrazow, dzieki czemu uzytkownicy nie moga przypadkowo wybrac plikow nie bedacych obrazami. Jesli result jest null, uzytkownik anulowal -- mechanizm if (result != null) obsluguje to w sposób nieslyszalny.

Jak wyświetlić wyniki skanowania w oknie dialogowym?

Dla krotkich potwierdzen DisplayAlert zapewnia modalne okno dialogowe bez koniecznosci dodawania dodatkowych elementow interfejsu uzytkownika:

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

Ten wzorzec sprawdza się dobrze w przypadku prostych procesów potwierdzania. Dla aplikacji, ktore musza dzialac na podstawie zdekodowanych wartosci -- na przyklad, przeszukiwanie produktu po jego kodzie kreskowym w systemie zarzadzania zapasami kodow kreskowych -- przekaz kolekcje barcodes bezposrednio do warstwy logiki biznesowej z obslugujacego OnSelectImage.

Jak skanować wiele BarCodes i dostosować szybkość wykrywania?

Gdy obraz zawiera kilka kodów kreskowych, IronBarcode domyślnie wykrywa je wszystkie. Dla lepszej wydajnosci, jesli wiesz, jakie formaty sie spodziewac, skonfiguruj BarcodeReaderOptions przed wywolaniem BarcodeReader.Read:

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

Wlasciwosc ExpectBarcodeTypes ogranicza silnik wykrywania do okreslonych symbologii. Ustawienie Speed na ReadingSpeed.Faster jest odpowiednie dla wysoko-kontrastowych, nieodksztalconych obrazow. ReadingSpeed.Detailed stosuje dodatkowe passy korekcji obrazu i obsluguje rotacje, przekrzywienia oraz niskie rozdzielczosci kosztem dodatkowego czasu przetwarzania.

ExpectMultipleBarcodes = true instruuje czytnik, aby kontynuowal skanowanie po pierwszym dopasowaniu zamiast zakonczania wczesnie. W scenariuszach z jednym kodem BarCode pominięcie tej opcji skraca czas każdego skanowania o kilka milisekund.

Taka konfiguracja sprawia, że skaner nadaje się do szerokiego zakresu zastosowań: aplikacji detalicznej odczytującej kody BarCode produktów, narzędzia magazynowego przetwarzającego wydrukowane etykiety z kodami BarCode na zdjęciach przesyłek lub systemu obiegu dokumentów wyodrębniającego kody QR z przesłanych faktur.

Jak radzisz sobie z trudnymi lub niskiej jakości obrazami?

Obrazy produkcyjne rzadko są idealne. Zdjęcia magazynowe wykonane w ostrym świetle, zrzuty ekranu z klientów poczty elektronicznej i zeskanowane dokumenty zawierają szumy, artefakty kompresji i zniekształcenia geometryczne. IronBarcode udostepnia ImageFilterCollection do przetwarzania wstepnego obrazow przed ich dekodowaniem:

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

SharpenFilter odzyskuje definicje krawedzi z kompresowanych lub nieostrych zdan. ContrastFilter pomaga w przypadku nierownomiernego oswietlenia. DenoiseFilter redukuje szum z niskorozdzielczych skanow. Laczenie tych filtrów z ReadingSpeed.Detailed maksymalizuje wspolczynnik odczytu materialow trudnych.

W przypadku aplikacji .NET MAUI, które akceptują obrazy przesłane przez użytkowników z różnych źródeł, zastosowanie domyślnie konserwatywnego zestawu filtrów i przejście do bardziej agresywnej korekty przy drugiej próbie poprawia komfort użytkowania bez powodowania widocznego opóźnienia w typowych przypadkach. Mozesz takze przekazac Uri lub byte[] bezposrednio do BarcodeReader.Read, co jest przydatne, gdy obraz pochodzi z odpowiedzi sieciowej, a nie z systemu plikow. Dodatkowe przykłady źródeł danych można znaleźć w poradnikach IronBarcode.

Dlaczego skanowanie oparte na obrazach nadaje się do aplikacji .NET MAUI?

Skanowanie na zywo z kamery poprzez kontrole CameraView wymaga specyficznych dla platformy uprawnien, zarzadzania cyklem zycia podgladu kamery oraz obslugi zdarzen ustawiania ostrosci. W systemie iOS oznacza to rowniez konfigurowanie AVCaptureSession; w systemie Android CameraX. Każda platforma ma swoje własne tryby awarii.

Skanowanie oparte na obrazach eliminuje tę kategorię obaw. Dokumentacja API IronBarcode pokazuje, ze BarcodeReader.Read przyjmuje sciezke pliku, Stream, Bitmap lub byte[] -- dowolna reprezentacje, jaką moze utworzyc Twoja aplikacja MAUI. Oznacza to, ze ta sama logika skanowania dziala, niezaleznie od tego, czy obraz pochodzi z FilePicker, pobrany sieciowo, strona PDF wyrenderowana do bitmapy, czy zalacznik e-mail.

Zużycie baterii jest mniejsze, ponieważ sprzęt aparatu pozostaje wyłączony. W podglądzie na żywo nie występuje migotanie interfejsu użytkownika i nie ma potrzeby zarządzania zdarzeniami cyklu życia kamery podczas zawieszania i wznawiania działania aplikacji. Na tabletach i komputerach stacjonarnych -- gdzie podglad z kamery rzadko jest odpowiedni -- dekodowanie oparte na obrazach staje sie naturalnym domyslnym wyborem zamiast kompromisu. Uzytkownicy moga otworzyc pliki z chmury, lokalnych folderow lub rolki z kamery za pomoca tego samego wywolania FilePicker niezaleznie od typu urzadzenia.

Dla procesow, w ktorych uzytkownicy fotografuja etykiety z kodami kreskowymi i przesylaja je -- co jest powszechne w webowych aplikacjach skanujacych kody kreskowe ASP.NET -- to samo wywolanie BarcodeReader.Read dziala zarowno na kliencie mobilnym, jak i na serwerze, eliminujac potrzebe utrzymywania dwoch implementacji skanowania.

Czym różni się IronBarcode od ZXing.Net.MAUI?

ZXing.Net.MAUI jest przeznaczony do skanowania na żywo z kamery i sprawdza się dobrze, gdy wymagane jest wyświetlanie podglądu w czasie rzeczywistym. Wymaga integracji CameraView, rejestracji platormowego obslugujacego oraz zadan uprawnien w czasie rzeczywistym.

IronBarcode obsługuje dekodowanie oparte na plikach i strumieniach, co obejmuje większość procesów obiegu dokumentów w Enterprise. Obsługuje szerszy zakres symboli, w tym PDF417, Data Matrix i Code 128, oraz zapewnia wstępne przetwarzanie obrazu za pomocą filtrów, czego nie oferuje ZXing. W przypadku aplikacji, w których użytkownicy przechwytują lub przesyłają obrazy zamiast skanować przedmioty na żywo, bardziej odpowiednim rozwiązaniem jest IronBarcode.

Jeśli Twoja aplikacja wymaga skanowania na żywo z kamery oprócz dekodowania plików, możesz połączyć obie biblioteki: ZXing.Net.MAUI do obsługi wizjera oraz bibliotekę IronBarcode for .NET do przetwarzania plików w trybie wsadowym.

Jakie są Twoje kolejne kroki?

Stworzenie skanera kodów kreskowych .NET MAUI za pomocą IronBarcode zajmuje mniej niż 30 linii kodu C#. Podejście oparte na plikach graficznych pozwala uniknąć w kodzie MAUI logiki związanej z uprawnieniami kamery oraz inicjalizacji specyficznej dla platformy, a to samo wywołanie skanowania działa identycznie w systemach Windows, Android i iOS.

Dokumentacja API IronBarcode obejmuje dodatkowe możliwości: odczytywanie kodów kreskowych z dokumentów PDF, przetwarzanie wsadowe wielu obrazów, pisanie niestandardowych filtrów obrazów oraz generowanie kodów kreskowych równolegle z ich odczytywaniem. Przegląd funkcji zawiera listę wszystkich obsługiwanych symboli i formatów.

Bezpłatna próba, aby przetestować IronBarcode w swoim projekcie, lub zakup licencję, gdy będziesz gotowy do wdrożenia produkcyjnego.

Zacznij z IronBarcode teraz.
green arrow pointer

Często Zadawane Pytania

Jak stworzyć skaner BarCode w .NET MAUI bez kamery?

Zainstaluj IronBarcode za pomocą NuGet (`Install-Package BarCode`), a następnie wywołaj `BarcodeReader.Read(filePath)` ze ścieżką uzyskaną z `FilePicker.PickAsync`. Nie są wymagane żadne uprawnienia do kamery ani konfiguracja `CameraView`.

Czy IronBarcode może skanować kody kreskowe na Androidzie i iOS w .NET MAUI?

Tak. To samo wywołanie `BarcodeReader.Read` działa w systemach Windows, Android i iOS bez żadnych ścieżek kodu specyficznych dla platformy ani zmian w manifeście.

Jakie formaty obrazów obsługuje IronBarcode do skanowania kodów kreskowych?

IronBarcode odczytuje BarCodes z plików JPEG, PNG, GIF, TIFF i BMP. Obsługuje również dane wejściowe typu `Stream`, `Bitmap` i `byte[]`, dzięki czemu obrazy z odpowiedzi sieciowych działają bez konieczności uprzedniego zapisywania na dysku.

Jak skanować wiele BarCodes z jednego obrazu w .NET MAUI?

Ustaw `ExpectMultipleBarCodes = true` w `BarcodeReaderOptions` i przekaż opcje do `BarcodeReader.Read`. Czytnik zwraca wszystkie wykryte kody kreskowe w jednej kolekcji `BarcodeResults`.

Jaka jest różnica między IronBarcode a ZXing.Net.MAUI?

ZXing.Net.MAUI obsługuje skanowanie na żywo za pomocą kontrolki `CameraView`. IronBarcode obsługuje dekodowanie plików i strumieni, wspiera więcej symboli (w tym PDF417 i Data Matrix) oraz zapewnia wstępne przetwarzanie obrazu dla danych wejściowych o niskiej jakości.

Jak poprawić wykrywanie BarCode na rozmytych lub niskiej jakości obrazach?

Dodaj `ImageFilterCollection` do `BarcodeReaderOptions` z `SharpenFilter`, `ContrastFilter` i `DenoiseFilter`, a następnie ustaw `Speed = ReadingSpeed.Detailed`. Spowoduje to zastosowanie korekcji obrazu przed etapem dekodowania.

Jakie formaty kodów kreskowych obsługuje IronBarcode w .NET MAUI?

IronBarcode obsługuje wszystkie główne symbole 1D i 2D: Code 128, Code 39, QR Code, Data Matrix, PDF417, EAN-13, EAN-8, UPC-A, UPC-E, Aztec i inne. Pełna lista znajduje się na stronie funkcji IronBarcode.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie