Jak zbudować aplikację SDK do skanowania kodów kreskowych w .NET MAUI
.NET MAUI spełnia obietnicę jednej bazy kodu przeznaczonej dla systemów Android, iOS i Windows. Wyzwaniem jest sytuacja, w której konieczne jest zintegrowanie natywnych funkcji sprzętowych, takich jak skanowanie BarCode. Ręczne łączenie interfejsów API kamer oznacza konfiguracje specyficzne dla platformy, dyrektywy kompilacji warunkowej i wiele godzin debugowania. Istnieje szybsza droga.
Ten samouczek pokazuje, jak zbudować działający, wielopłatformowy skaner kodów kreskowych w .NET MAUI przy użyciu IronBarcode. Będziesz konfigurować projekt, ustawiać uprawnienia platformy, skanować BarCodes z plików graficznych, odczytywać BarCodes z dokumentów PDF oraz obsługiwać wiele symboli za pomocą opcji skanowania — wszystko to za pomocą kodu, który można uruchomić na dowolnym obsługiwanym urządzeniu docelowym.
Bezpłatna próba i postępuj zgodnie z poniższymi instrukcjami.
Jak skonfigurować SDK skanera BARCODE w .NET MAUI?
Konfiguracja zestawu SDK skanera kodów kreskowych .NET MAUI wymaga utworzenia nowego projektu, zainstalowania pakietu NuGet oraz skonfigurowania uprawnień platformy. Cały proces konfiguracji zajmuje kilka minut w Visual Studio.
Utwórz projekt .NET MAUI
Otwórz program Visual Studio i utwórz nowy projekt aplikacji .NET MAUI. Nadaj projektowi opisową nazwę, np. "BarcodeScanner", i wybierz .NET Framework 8 lub nowszą wersję jako docelową platformę. Visual Studio generuje domyślną strukturę projektu z folderami specyficznymi dla platformy Android i iOS.
Jeśli Twoim celem jest .NET 10, obowiązuje ten sam szablon projektu. Zaktualizuj wlasciwosc <TargetFrameworks> w pliku .csproj, aby zawierala net10.0-android, net10.0-ios i net10.0-windows10.0.19041.0 wedlug potrzeb. Pełną listę nazw frameworków docelowych oraz minimalnych wymagań dotyczących wersji systemu operacyjnego można znaleźć w dokumentacji dotyczącej platform obsługiwanych przez .NET MAUI.
Zainstaluj IronBarcode
Zainstaluj pakiet IronBarcode NuGet za pomocą konsoli menedżera pakietów:
Install-Package BarCode
To polecenie pobiera i instaluje zestaw SDK skanera kodów kreskowych wraz ze wszystkimi wymaganymi zależnościami dla aplikacji .NET MAUI.
Konfiguracja uprawnień platformy
Nawet w przypadku skanowania z plików graficznych, a nie z obrazu na żywo z kamery, dobrą praktyką jest skonfigurowanie następujących uprawnień dla aplikacji skanującej kody kreskowe .NET MAUI.
Dla Androida dodaj nastepujace do Platforms/Android/AndroidManifest.xml:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
Dla iOS dodaj te wpisy do Platforms/iOS/Info.plist:
<key>NSPhotoLibraryUsageDescription</key>
<string>Access needed to select barcode images for scanning.</string>
<key>NSCameraUsageDescription</key>
<string>Camera permission for barcode scanning.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Access needed to select barcode images for scanning.</string>
<key>NSCameraUsageDescription</key>
<string>Camera permission for barcode scanning.</string>
Zainicjuj SDK
Ustaw klucz licencyjny na wczesnym etapie cyklu życia aplikacji, aby zapewnić pełną aktywację IronBarcode przed wykonaniem jakichkolwiek wywołań skanowania. Umiesc aktywacje w MauiProgram.cs:
using IronBarCode;
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
});
// Activate IronBarcode before the app starts
License.LicenseKey = "YOUR_LICENSE_KEY_HERE";
return builder.Build();
using IronBarCode;
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
});
// Activate IronBarcode before the app starts
License.LicenseKey = "YOUR_LICENSE_KEY_HERE";
return builder.Build();
Imports IronBarCode
Dim builder = MauiApp.CreateBuilder()
builder _
.UseMauiApp(Of App)() _
.ConfigureFonts(Sub(fonts)
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular")
End Sub)
' Activate IronBarcode before the app starts
License.LicenseKey = "YOUR_LICENSE_KEY_HERE"
Return builder.Build()
IronBarcode oferuje bezpłatną licencję próbną do celów programistycznych i testowych. Ustal klucz jednokrotnie przy uruchomieniu; wszystkie kolejne wywolania BarcodeReader i BarcodeWriter w tym samym procesie korzystaja z aktywowanej licencji.
Jak odczytywać BarCodes z plików graficznych?
Podstawową funkcją każdego skanera BARCODE MAUI jest odczytywanie BARCODE-ów z wybranych obrazów. Metoda BarcodeReader.Read() przyjmuje sciezke do pliku i zwraca kolekcje obiektow BarcodeResult, jeden na kazdy wykryty kod kreskowy.
Zaprojektuj interfejs użytkownika
Utworz czysty interfejs w MainPage.xaml, ktory pozwala uzytkownikom wybrac plik obrazu i przegladać zeskanowane dane kodu kreskowego:
<?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">
<VerticalStackLayout Padding="20" Spacing="15">
<Label Text=".NET MAUI Barcode Scanner" FontSize="24" HorizontalOptions="Center"/>
<Button Text="Select Image to Scan" Clicked="OnSelectImageClicked"/>
<Image x:Name="SelectedImageView" HeightRequest="200"/>
<Label x:Name="ResultLabel" FontSize="16"/>
</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="BarcodeScanner.MainPage">
<VerticalStackLayout Padding="20" Spacing="15">
<Label Text=".NET MAUI Barcode Scanner" FontSize="24" HorizontalOptions="Center"/>
<Button Text="Select Image to Scan" Clicked="OnSelectImageClicked"/>
<Image x:Name="SelectedImageView" HeightRequest="200"/>
<Label x:Name="ResultLabel" FontSize="16"/>
</VerticalStackLayout>
</ContentPage>
Wdrożenie skanowania BarCode
Dodaj logike skanowania do MainPage.xaml.cs. Ten kod obsluguje wybieranie obrazow za pomoca API MAUI FilePicker i przekazuje wybrana sciezke pliku do IronBarcode:
using IronBarCode;
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private async void OnSelectImageClicked(object sender, EventArgs e)
{
var result = await FilePicker.PickAsync(new PickOptions
{
FileTypes = FilePickerFileType.Images,
PickerTitle = "Select a barcode image"
});
if (result != null)
{
// Display the selected image
SelectedImageView.Source = ImageSource.FromFile(result.FullPath);
// Read barcodes from the image file
var barcodes = BarcodeReader.Read(result.FullPath);
ResultLabel.Text = barcodes.Any()
? $"Found: {barcodes.First().Value}"
: "No barcodes detected in selected image.";
}
}
}
using IronBarCode;
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private async void OnSelectImageClicked(object sender, EventArgs e)
{
var result = await FilePicker.PickAsync(new PickOptions
{
FileTypes = FilePickerFileType.Images,
PickerTitle = "Select a barcode image"
});
if (result != null)
{
// Display the selected image
SelectedImageView.Source = ImageSource.FromFile(result.FullPath);
// Read barcodes from the image file
var barcodes = BarcodeReader.Read(result.FullPath);
ResultLabel.Text = barcodes.Any()
? $"Found: {barcodes.First().Value}"
: "No barcodes detected in selected image.";
}
}
}
Imports IronBarCode
Public Partial Class MainPage
Inherits ContentPage
Public Sub New()
InitializeComponent()
End Sub
Private Async Sub OnSelectImageClicked(sender As Object, e As EventArgs)
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
SelectedImageView.Source = ImageSource.FromFile(result.FullPath)
' Read barcodes from the image file
Dim barcodes = BarcodeReader.Read(result.FullPath)
ResultLabel.Text = If(barcodes.Any(), $"Found: {barcodes.First().Value}", "No barcodes detected in selected image.")
End If
End Sub
End Class
Wynik

Metoda BarcodeReader.Read() analizuje wybrany obraz i zwraca wszystkie wykryte kody kreskowe. IronBarcode automatycznie rozpoznaje wiele symboli kodów kreskowych, w tym kody QR, Code 128, Code 39, EAN-13 i wiele innych obsługiwanych formatów. Kolekcja wynikow ujawnia wlasciwosci takie jak BarcodeType, Value, PageNumber oraz wspolrzedne ramki dla kazdego wykrytego kodu.
Jak skanować BarCodes z dokumentów PDF?
Jedną z funkcji, która wyróżnia IronBarcode spośród wielu alternatywnych rozwiązań, jest odczytywanie kodów kreskowych bezpośrednio z plików PDF. Ma to kluczowe znaczenie dla aplikacji .NET MAUI obsługujących przepływ dokumentów — listy przewozowe, zamówienia zakupu, dokumentacja medyczna i podobne przypadki użycia opierają się na BARCODES-ach osadzonych w plikach PDF.
Metoda BarcodeReader.ReadPdf() przyjmuje sciezke do pliku i zwraca taka sama kolekcje BarcodeResult jak czytnik obrazow, z dodatkowa wlasciwoscia PageNumber identyfikujaca, z ktorej strony PDF pochodzi kazdy kod kreskowy:
using IronBarCode;
private async void OnSelectPdfClicked(object sender, EventArgs e)
{
var result = await FilePicker.PickAsync(new PickOptions
{
PickerTitle = "Select a PDF with barcodes"
});
if (result != null)
{
// Read barcodes from every page of the PDF
var barcodes = BarcodeReader.ReadPdf(result.FullPath);
var output = string.Join("\n", barcodes.Select(b =>
$"Page {b.PageNumber}: [{b.BarcodeType}] {b.Value}"));
await DisplayAlert("Scan Results", output.Length > 0 ? output : "No barcodes found.", "OK");
}
}
using IronBarCode;
private async void OnSelectPdfClicked(object sender, EventArgs e)
{
var result = await FilePicker.PickAsync(new PickOptions
{
PickerTitle = "Select a PDF with barcodes"
});
if (result != null)
{
// Read barcodes from every page of the PDF
var barcodes = BarcodeReader.ReadPdf(result.FullPath);
var output = string.Join("\n", barcodes.Select(b =>
$"Page {b.PageNumber}: [{b.BarcodeType}] {b.Value}"));
await DisplayAlert("Scan Results", output.Length > 0 ? output : "No barcodes found.", "OK");
}
}
Imports IronBarCode
Private Async Sub OnSelectPdfClicked(sender As Object, e As EventArgs)
Dim result = Await FilePicker.PickAsync(New PickOptions With {
.PickerTitle = "Select a PDF with barcodes"
})
If result IsNot Nothing Then
' Read barcodes from every page of the PDF
Dim barcodes = BarcodeReader.ReadPdf(result.FullPath)
Dim output = String.Join(vbLf, barcodes.Select(Function(b) $"Page {b.PageNumber}: [{b.BarcodeType}] {b.Value}"))
Await DisplayAlert("Scan Results", If(output.Length > 0, output, "No barcodes found."), "OK")
End If
End Sub
Wynik

Metoda ReadPdf() skanuje wszystkie strony PDF i zwraca dane kodow kreskowych wraz z numerami stron, co ulatwia obsluge dokumentow zawierajacych wiele kodow. Jesli PDF obejmuje dziesiatki stron, rozwaz przekazanie obiektu BarcodeReaderOptions z ustawionym PageNumbers na konkretny zakres, aby ograniczyc skanowanie do odpowiednich stron i skrocic czas przetwarzania.
Jak radzisz sobie z wieloma kodami kreskowymi i kodami QR?
Aplikacje produkcyjne często muszą wykrywać wiele BARCODE-ów na jednym obrazie lub filtrować wyniki według typu BARCODE-a. Klasa BarcodeReaderOptions ujawnia wlasciwosci konfiguracji, ktore kontroluja zachowanie wykrywania. Ustawienie ExpectMultipleBarcodes na true nakazuje czytnikowi kontynuowanie skanowania po pierwszym dopasowaniu, zamiast wczesnego zatrzymania:
using IronBarCode;
// Configure the reader for multi-barcode detection with type filtering
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;
// Configure the reader for multi-barcode detection with type filtering
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
' Configure the reader for multi-barcode detection with type filtering
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
Wlasciwosc Speed kontroluje kompromis miedzy czasem skanowania a dokladnoscia. ReadingSpeed.Faster stawia na przepustowosc, co odpowiada aplikacjom skanujacym hurtowe ilosci wysokiej jakosci obrazow. ReadingSpeed.ExtraSlow stosuje bardziej agresywne sposoby korekcji obrazu przy trudnych danych wejsciowych -- niskim kontraście, przekatnych katow lub czesciowo przeslonietych kodach. ReadingSpeed.Balanced jest odpowiednim punktem wyjscia dla wiekszosci aplikacji.
Wyliczenie BarcodeEncoding wspiera kombinacje bitowe, co pozwala ograniczyc skanowanie do konkretnych symbologii istotnych dla przypadku uzycia, nie obciazajac wydajnosci niepotrzebnymi sprawdzaniami.
Jak odczytywać BarCodes ze strumieni pamięci?
Ścieżki plików sprawdzają się w większości scenariuszy, ale niektóre przepływy pracy .NET MAUI przekazują dane obrazu przez pamięć — klatki przechwycone z podglądu kamery, bajty pobrane z REST API lub dane obrazu generowane w trakcie procesu. IronBarcode obsluguje bezposrednie dane wejściowe System.IO.Stream na przeciazeniu BarcodeReader.Read():
using IronBarCode;
using System.IO;
// Read a barcode from a MemoryStream (e.g., an in-memory image buffer)
private BarcodeResult[] ReadFromStream(Stream imageStream)
{
return BarcodeReader.Read(imageStream);
}
// Example: download an image and scan without writing to disk
private async Task<string> ScanDownloadedBarcode(string imageUrl)
{
using var httpClient = new HttpClient();
using var stream = await httpClient.GetStreamAsync(imageUrl);
using var memoryStream = new MemoryStream();
await stream.CopyToAsync(memoryStream);
memoryStream.Position = 0;
var barcodes = BarcodeReader.Read(memoryStream);
return barcodes.Any() ? barcodes.First().Value : string.Empty;
}
using IronBarCode;
using System.IO;
// Read a barcode from a MemoryStream (e.g., an in-memory image buffer)
private BarcodeResult[] ReadFromStream(Stream imageStream)
{
return BarcodeReader.Read(imageStream);
}
// Example: download an image and scan without writing to disk
private async Task<string> ScanDownloadedBarcode(string imageUrl)
{
using var httpClient = new HttpClient();
using var stream = await httpClient.GetStreamAsync(imageUrl);
using var memoryStream = new MemoryStream();
await stream.CopyToAsync(memoryStream);
memoryStream.Position = 0;
var barcodes = BarcodeReader.Read(memoryStream);
return barcodes.Any() ? barcodes.First().Value : string.Empty;
}
Imports IronBarCode
Imports System.IO
Imports System.Net.Http
Imports System.Threading.Tasks
' Read a barcode from a MemoryStream (e.g., an in-memory image buffer)
Private Function ReadFromStream(imageStream As Stream) As BarcodeResult()
Return BarcodeReader.Read(imageStream)
End Function
' Example: download an image and scan without writing to disk
Private Async Function ScanDownloadedBarcode(imageUrl As String) As Task(Of String)
Using httpClient As New HttpClient()
Using stream As Stream = Await httpClient.GetStreamAsync(imageUrl)
Using memoryStream As New MemoryStream()
Await stream.CopyToAsync(memoryStream)
memoryStream.Position = 0
Dim barcodes = BarcodeReader.Read(memoryStream)
Return If(barcodes.Any(), barcodes.First().Value, String.Empty)
End Using
End Using
End Using
End Function
Przeciazenie strumienia przyjmuje kazda podklase Stream, w tym MemoryStream, FileStream i strumienie sieciowe. Biblioteka obsluguje wewnetrzna detekcje formatu, wiec nie musisz okreslac typu obrazu przed wywolaniem Read().
Jak generować BarCodes w aplikacji MAUI?
IronBarcode obsługuje zarówno generowanie, jak i odczytywanie kodów kreskowych. Klasa BarcodeWriter tworzy kody kreskowe jako pliki obrazu, obiekty Bitmap lub instancje Stream, ktore mozesz wyswietlac bezposrednio w widoku MAUI. Jest to przydatne w aplikacjach do zarządzania zapasami, które oprócz funkcji skanowania wymagają drukowania lub udostępniania BarCodes:
using IronBarCode;
// Generate a QR code and display it in a MAUI Image control
private async void OnGenerateQrClicked(object sender, EventArgs e)
{
// Create a QR code barcode
var qrCode = QRCodeWriter.CreateQrCode(
value: "https://ironsoftware.com/csharp/barcode/",
qrCodeSize: 500,
errorCorrection: QRCodeWriter.QrErrorCorrectionLevel.Medium
);
// Save to a temporary file and display
var tempPath = Path.Combine(FileSystem.CacheDirectory, "generated-qr.png");
qrCode.SaveAsPng(tempPath);
GeneratedImageView.Source = ImageSource.FromFile(tempPath);
}
using IronBarCode;
// Generate a QR code and display it in a MAUI Image control
private async void OnGenerateQrClicked(object sender, EventArgs e)
{
// Create a QR code barcode
var qrCode = QRCodeWriter.CreateQrCode(
value: "https://ironsoftware.com/csharp/barcode/",
qrCodeSize: 500,
errorCorrection: QRCodeWriter.QrErrorCorrectionLevel.Medium
);
// Save to a temporary file and display
var tempPath = Path.Combine(FileSystem.CacheDirectory, "generated-qr.png");
qrCode.SaveAsPng(tempPath);
GeneratedImageView.Source = ImageSource.FromFile(tempPath);
}
Imports IronBarCode
' Generate a QR code and display it in a MAUI Image control
Private Async Sub OnGenerateQrClicked(sender As Object, e As EventArgs)
' Create a QR code barcode
Dim qrCode = QRCodeWriter.CreateQrCode(
value:="https://ironsoftware.com/csharp/barcode/",
qrCodeSize:=500,
errorCorrection:=QRCodeWriter.QrErrorCorrectionLevel.Medium
)
' Save to a temporary file and display
Dim tempPath = Path.Combine(FileSystem.CacheDirectory, "generated-qr.png")
qrCode.SaveAsPng(tempPath)
GeneratedImageView.Source = ImageSource.FromFile(tempPath)
End Sub
Klasa QRCodeWriter obsluguje wszystkie cztery poziomy korekcji bledow w kodach QR (Niski, Sredni, Kwartyl, Wysoki), niestandardowe rozmiary oraz opcje stylizacji, w tym kontrole koloru tla/przedniego planu. Dla symbologii innych niz QR, uzyj BarcodeWriter.CreateBarcode() z odpowiednia wartoscia BarcodeEncoding. Dokumentacja API generowania kodów kreskowych zawiera informacje o wszystkich obsługiwanych formatach wyjściowych.
Jakie są kluczowe możliwości tej biblioteki skanera BarCode?
IronBarcode zapewnia kilka korzyści dla projektów skanowania kodów kreskowych .NET MAUI, które odróżniają go od alternatywnych rozwiązań open source, takich jak ZXing.Net.MAUI:
| Możliwości | Szczegóły |
|---|---|
| Obsługa wielu platform | Obsługuje systemy Android, iOS i Windows z jednego pakietu NuGet |
| Wiele źródeł danych wejściowych | Skanowanie ze ścieżek plików, strumieni pamięci i dokumentów PDF |
| Zakres formatowania | Odczytuje ponad 30 symboli 1D i 2D, w tym QR, Data Matrix i PDF417 |
| Generowanie BarCode'ów | Generuje kody QR i kody BARCODE 1D w formacie PNG, bitmapowym lub strumieniowym |
| Korekta obrazów | Automatycznie obsługuje dane wejściowe obrócone, przekrzywione i o niskim kontraście |
| Brak natywnej zależności od SDK | Czysta biblioteka .NET, niewymagająca natywnych powiązań specyficznych dla platformy |
Kwestia "braku zależności od natywnego SDK" ma znaczenie w projektach .NET MAUI, ponieważ biblioteki natywne specyficzne dla platformy wymagają oddzielnych etapów łączenia dla każdego celu. IronBarcode całkowicie eliminuje tę złożoność, co oznacza, że to samo odwołanie NuGet generuje działające pliki binarne dla wszystkich trzech obsługiwanych platform bez dodatkowej konfiguracji.
Pełna lista obsługiwanych formatów kodów kreskowych znajduje się w dokumentacji dotyczącej formatów obsługiwanych przez IronBarcode. Aby zapoznać się z cenami i warunkami licencji dotyczącymi wdrożenia produkcyjnego, przejrzyj stronę licencyjną IronBarcode.
Jakie są najlepsze praktyki dotyczące skanowania BarCodes w produkcji?
Wdrożenie skanera BARCODE do środowiska produkcyjnego wymaga zwrócenia uwagi na kilka obszarów wykraczających poza podstawowe wywołanie odczytu. Poniższe wytyczne dotyczą najczęstszych błędów w aplikacjach do obsługi kodów kreskowych .NET MAUI.
Wybierz odpowiednia predkosc czytania. ReadingSpeed.Balanced poprawnie obsluguje wiekszosc obrazow z prawdziwego swiata. Zarezerwuj ReadingSpeed.ExtraSlow dla skanow dokumentow drukowanych lub obrazow, ktorych uzytkownicy nie moga ponownie uchwycic. Unikaj ReadingSpeed.ExtraSlow w przypadku przeplywow z duza iloscia pracy, poniewaz kazde skanowanie zajmuje znacznie dluzej.
Filtrowanie wedlug oczekiwanych typow. Jesli aplikacja przetwarza tylko kody QR, ustaw ExpectBarcodeTypes = BarcodeEncoding.QRCode. Ograniczenie obszaru wyszukiwania skraca czas przetwarzania i eliminuje fałszywe alarmy spowodowane innymi symbolami obecnymi w grafice tła.
Uzywaj ExpectMultipleBarcodes tylko w razie potrzeby. Ustawienie tego na true zawsze powoduje, ze czytnik wykonuje dodatkowe przejscia. Dla danych wejsciowych z jednym kodem kreskowym pozostaw domyslne (false), aby skanowanie zakonczone bylo, gdy tylko zostanie znaleziony pierwszy poprawny kod.
Obsluguj puste wyniki z wdziekiem. BarcodeReader.Read() zwraca pusta tablice, zamiast generowac blad, gdy nie zostana wykryte zadne kody kreskowe. Sprawdz .Any() przed uzyskaniem dostepu do First() i przekaz uzytkownikowi jasny komunikat. Monit o ponowną próbę z instrukcją ("upewnij się, że BarCode jest dobrze oświetlony i wyśrodkowany") poprawia komfort użytkowania bardziej niż ogólny komunikat o błędzie.
Przechowuj w pamieci podręcznej obiekt opcji. Tworzenie instancji BarcodeReaderOptions przy kazdym skanowaniu dodaje alokacje. Zdefiniuj opcje raz na poziomie klasy i wykorzystuj je wielokrotnie w kolejnych wywołaniach.
Aby uzyskać dodatkowe wskazówki dotyczące diagnozowania błędów skanowania i optymalizacji wydajności, zapoznaj się z przewodnikiem rozwiązywania problemów IronBarcode oraz samouczkiem dotyczącym czytnika kodów kreskowych.
Jakie są Twoje kolejne kroki?
Budowanie skanera kodow kreskowych .NET MAUI z IronBarcode wymaga zainstalowania jednej paczki NuGet, skonfigurowania uprawnien platformowych oraz wywolania BarcodeReader.Read() ze sciezka do pliku lub strumieniem. To samo API jest przeznaczone dla systemów Android, iOS i Windows bez gałęzi kodu specyficznych dla danej platformy.
Aby rozszerzyć możliwości aplikacji, warto rozważyć następujące zasoby:
- Pełna lista funkcji IronBarcode — katalog wszystkich możliwości skanowania i generowania
- Dokumentacja API czytnika kodów kreskowych — kompletna dokumentacja metod i właściwości
- Samouczek krok po kroku dotyczący czytnika BARCODE — rozszerzony przewodnik obejmujący integrację z kamerą
- Przewodnik po skanerze dokumentów MAUI — przykłady zastosowań skanowania dokumentów
Bezpłatna próba, aby uzyskać klucz licencyjny do celów programistycznych, lub zapoznaj się z opcjami licencyjnymi dotyczącymi wdrożenia produkcyjnego.
Często Zadawane Pytania
Czym jest .NET MAUI i dlaczego integracja skanowania BARCODE stanowi wyzwanie?
.NET MAUI to wielopłatformowy framework UI, który obsługuje systemy Android, iOS i Windows z poziomu jednej bazy kodu. Skanowanie kodów kreskowych stanowi wyzwanie, ponieważ każda platforma udostępnia inne interfejsy API kamery i pamięci. IronBarcode zapewnia ujednolicony interfejs API .NET, który radzi sobie z różnicami między platformami za użytkownika.
Jakie formaty kodów kreskowych obsługuje IronBarcode w aplikacjach .NET MAUI?
IronBarcode obsługuje ponad 30 symboli kodów kreskowych, w tym QR Code, Code 128, Code 39, EAN-13, EAN-8, UPC-A, UPC-E, Data Matrix, PDF417, Aztec i ITF. Użyj wyliczenia BarcodeEncoding, aby filtrować według określonych formatów.
Czy IronBarcode może odczytywać kody kreskowe z plików PDF w aplikacji .NET MAUI?
Tak. Metoda BarcodeReader.ReadPdf() skanuje wszystkie strony dokumentu PDF i zwraca kolekcję BarcodeResult. Każdy wynik zawiera wartość kodu kreskowego, typ oraz numer strony.
Czy IronBarcode działa na wszystkich platformach docelowych .NET MAUI?
IronBarcode obsługuje platformy Android, iOS i Windows w projekcie .NET MAUI przy użyciu jednego pakietu NuGet. Nie są wymagane żadne natywne powiązania SDK specyficzne dla platformy.
Jak zeskanować wiele BarCodes z jednego obrazu?
Ustaw ExpectMultipleBarCodes = true w BarcodeReaderOptions i przekaż obiekt opcji do BarcodeReader.Read(). Czytnik wykona dodatkowe przejścia skanowania, aby wykryć wszystkie kody kreskowe na obrazie.
Jaka jest różnica między ReadingSpeed.Faster a ReadingSpeed.ExtraSlow?
ReadingSpeed.Faster stawia na przepustowość i sprawdza się w przypadku obrazów o wysokiej jakości. ReadingSpeed.ExtraSlow stosuje bardziej agresywną korekcję obrazu i nadaje się do trudnych danych wejściowych, takich jak BarCodes o niskim kontraście, obrócone lub częściowo zasłonięte.
Czy IronBarcode może odczytywać kody kreskowe z MemoryStream?
Tak. Metoda BarcodeReader.Read() przyjmuje parametr System.IO.Stream, który obejmuje MemoryStream, FileStream oraz strumienie sieciowe. Umożliwia to skanowanie danych obrazu przechowywanych w pamięci bez zapisywania ich na dysku.
Jak wygenerować kod QR w aplikacji .NET MAUI za pomocą IronBarcode?
Użyj metody QRCodeWriter.CreateQrCode() z wartością docelową, rozmiarem i poziomem korekcji błędów. Zapisz wynik jako plik PNG za pomocą metody SaveAsPng() i wyświetl go w kontrolce MAUI Image za pomocą metody ImageSource.FromFile().
Jakie uprawnienia są potrzebne do skanowania kodów kreskowych w aplikacji .NET MAUI na Androida?
Dodaj android.permission.READ_EXTERNAL_STORAGE i android.permission.CAMERA do pliku AndroidManifest.xml. W przypadku systemu iOS dodaj klucze NSPhotoLibraryUsageDescription i NSCameraUsageDescription do pliku Info.plist.




