Barcode4.NET vs IronBarcode: C# Barcode Bibliothek Vergleich
BarcodeScanning.Native.Maui vs IronBarcode: Kamerasteuerung vs Vollständiges Barcode-SDK
BarcodeScanning.Native.Maui ist ein Kamera-Plugin, das auf MAUI-Anwendungen zugeschnitten ist. Wenn Ihre App hochgeladene Dateien verarbeitet oder Barcodes aus PDFs liest, ist sie nicht für diesen Anwendungsfall entworfen. Das Paket beschreibt sich selbst als eine "Barcode-Scan-Bibliothek für .NET MAUI," und in der Praxis ist es ein CameraView-Steuerelement, das ein Ereignis auslöst, wenn ein Barcode in einen Live-Kamera-Rahmen eintritt. Das ist der vollständige Funktionsumfang. Dieser Vergleich untersucht den architektonischen Unterschied zwischen einer Kamera-Steuerungsbibliothek und einem voll ausgestatteten Barcode-SDK, um Teams zu helfen, zu verstehen, wo jedes Tool passt.
Barcode-Scanning verstehen.MAUI
BarcodeScanning.Native.Maui umschließt native Barcode-Erkennungs-APIs für Kameras auf iOS/macOS (Apples Vision-Framework), Android (Google ML Kit) und Windows (ZXingCpp, hinzugefügt in Version 3.0.1) in ein MAUI CameraView-Steuerelement. Ein Entwickler fügt das Steuerelement in eine XAML-Seite ein, verknüpft einen Ereignishandler, und die Bibliothek löst dieses Ereignis jedes Mal aus, wenn ein Barcode im Live-Kamerabild erkannt wird. Das gesamte Interaktionsmodell ist Kamera rein, Ereignis raus – es gibt keinen anderen Weg.
Die Bibliothek ist Open Source und unter der MIT-Lizenz kostenlos. Sein Entwurfsziel ist eng und explizit: Live-Kamera-Barcode-Erkennung für MAUI-Anwendungen mit der minimal möglichen API-Oberfläche bereitzustellen. Es erreicht dieses Ziel durch Delegation an plattformnative Engines, anstatt eine eigene Dekodierungs-Engine zu implementieren.
Wichtigste architektonische Merkmale von BarcodeScanning.Native.Maui:
- Nur Kameraeingabe: Die Bibliothek akzeptiert nur Live-Kamerabilder. Es gibt kein
ReadFromFile(), keinReadFromBytes(), keineReadFromStream()und keineReadFromPdf()-Methode irgendwo in der öffentlichen API. - Nur MAUI-Ziele: Die Bibliothek unterstützt die MAUI-Ziele — iOS, Android, Windows (seit 3.0.1, über ZXingCpp) und macOS Catalyst. Sie kann nicht außerhalb von MAUI-Projekten verwendet werden (kein ASP.NET, Konsole, WPF oder WinForms).
- Three Different Engines: Apple Vision on iOS/macOS, Google ML Kit on Android, and ZXingCpp on Windows. Die Symbologieabdeckung und das Dekodierverhalten variieren zwischen den drei Engines.
- Keine Generierungsfunktion: BarcodeScanning.Native.Maui liest Barcodes aus Kamerabildern. Es kann keine Barcodes in irgendeinem Format generieren.
- iOS UPC-A Eigenart: Apples Vision-Framework kann 13 Stellen für UPC-A Barcodes zurückgeben (mit einer führenden Null zur Anpassung an die EAN-13-Kodierung). Die Bibliothek gibt diesen Rohwert durch, und Anwendungen normalisieren ihn nach Bedarf.
- PDF417 Zuverlässigkeit auf iOS/Android: Der GitHub-Issue-Tracker der Bibliothek beschreibt die PDF417-Erkennung als "sehr problematisch — die meisten Scans erfolgen nie" auf den Vision/ML Kit-Codepfaden, was für Versandetiketten, Führerscheine und Bordkarten relevant ist.
- Minimale öffentliche Oberfläche: Die öffentliche API besteht aus
CameraView,OnDetectionFinished,OnDetectionFinishedEventArgundBarcodeResultmitDisplayValueundBarcodeFormat. Das ist die Gesamtheit dessen, womit der Anwendungscode interagiert. - MIT-Lizenz, kostenlos: Die Bibliothek kann kostenlos und ohne Lizenzgebühren genutzt werden.
Live-Kamera-Scanmuster
Das gesamte API-Muster BarcodeScanning.Native.Maui ist ein XAML-Steuerelement in Kombination mit einem C#-Ereignishandler:
<scanner:CameraView x:Name="CameraView"
OnDetectionFinished="OnBarcodeDetected"
CameraEnabled="True"
BarcodeFormats="All" />
<scanner:CameraView x:Name="CameraView"
OnDetectionFinished="OnBarcodeDetected"
CameraEnabled="True"
BarcodeFormats="All" />
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArg)
Dim barcode = e.BarcodeResults.FirstOrDefault()
If barcode IsNot Nothing Then
ResultLabel.Text = barcode.DisplayValue
End If
End Sub
Dieses Steuerelement bietet Benutzern einen in die MAUI-Seite integrierten Echtzeit-Sucher. Die Barcode-Erkennung wird kontinuierlich ausgelöst, solange der Kamera-Feed aktiv ist. Die UX ist gut geeignet für Verbraucher-Apps, bei denen "point and scan" die primäre Interaktion ist. Die Einschränkung ist, dass dies die einzige Interaktion ist, die die Bibliothek unterstützt — Anforderungen, die über die Live-Kamera-Erkennung in einem MAUI-Kontext hinausgehen, fallen außerhalb ihres Anwendungsbereichs.
IronBarcode verstehen
IronBarcode ist eine kommerzielle Barcode-Lese- und Generierungsbibliothek für .NET , die mit Dateneingaben anstatt mit Kamerastreams arbeitet. Es liest Barcodes aus Bilddateien, Byte-Arrays, Datenströmen und PDF-Dokumenten. Auf MAUI integriert es sich über MediaPicker mit der Systemkamera — dieselbe Standard-MAUI-API, die Anwendungen für die Fotoauswahl verwenden — nimmt ein Foto auf und verarbeitet dann das resultierende Bild als statischen Input.
IronBarcode implementiert seine eigene verwaltete Barcode-Dekodier-Engine, anstatt sich auf plattformspezifische native APIs zu verlassen. Das bedeutet, dass derselbe BarcodeReader.Read()-Aufruf sich konsistent über alle unterstützten .NET-Ziele — Windows, Linux, macOS, ASP.NET und Hintergrundserverprozesse — sowie die MAUI-Mobilziele verhält, wenn ein Bild aufgenommen und dem Leser übergeben wird. Die Bibliothek bietet auch eine vollständige Barcode-Erzeugungs-API über BarcodeWriter und QRCodeWriter.
Hauptmerkmale von IronBarcode:
- Statische dateibasierte API:
BarcodeReader.Read()akzeptiert einen Dateipfad, ein Byte-Array, einen Stream oder ein PDF — jede statische Datenquelle. - Breite Plattformunterstützung: Windows, Linux und macOS (einschließlich ARM) werden unterstützt, neben .NET Framework 4.6.2+, .NET Core 3.1+ und .NET 5/6/7/8. Der gleiche verwaltete Code-Pfad läuft auf allen unterstützten Zielen ohne plattformspezifische Abzweigung.
- Barcode-Erzeugung:
BarcodeWriter.CreateBarcode()undQRCodeWriter.CreateQrCode()generieren Code128, QR, DataMatrix und andere Formate als Bilddateien oder Byte-Arrays. - PDF-Unterstützung: In PDF-Dokumente eingebettete Barcodes werden direkt gelesen, ohne dass ein Zwischenschritt der Bildextraktion erforderlich ist.
- Konsistente UPC-A-Dekodierung: Gibt den standardisierten 12-stelligen UPC-A-Wert über seine verwaltete Engine zurück.
- Kommerzielle Lizenzierung: Lite 749 $, Plus 1.499 $, Professional 2.999 $, Unlimited 5.999 $ — unbefristete Lizenzen mit einjährigem Support.
- Serverseitige Bereitstellung: Läuft in ASP.NET, Azure Functions, Docker-Containern und AWS Lambda ohne Plattformabhängigkeit von einer physischen Kamera.
Funktionsvergleich
Die folgende Tabelle verdeutlicht die grundlegenden Unterschiede zwischen BarcodeScanning.Native.Maui und IronBarcode:
| Feature | BarcodeScanning.MAUI | IronBarcode |
|---|---|---|
| Primärer Zweck | Barcode-Erkennung per Live-Kamera | Barcode-Lesen und -Generieren aus beliebigen Datenquellen |
| Eingangsquellen | Nur Live-Kamerabilder | Dateien, Byte-Arrays, Datenströme, PDFs |
| Windows, Linux, macOS, Docker, Azure, AWS. | MAUI only — iOS, Android, Windows (via ZXingCpp), macOS Catalyst | Windows, Linux, macOS, ASP.NET, Konsole, WPF, plus MAUI über aufgenommene Bilder |
| Erkennungs-Engine | Three engines (Apple Vision / Google ML Kit / ZXingCpp) | Einzelne verwaltete Engine über alle Ziele |
| Barcode-Generierung | Nein | Ja – BarcodeWriter + QRCodeWriter |
| Lizenzmodell | MIT (kostenlos, Open Source) | Gewerblich – Lite 749 $ bis Unlimited 5.999 $ |
| Serverseitig / ASP.NET | Nein | Ja |
Detaillierter Funktionsvergleich
| Feature | BarcodeScanning.MAUI | IronBarcode |
|---|---|---|
| Lektüre | ||
| Live-Kamerabildlesung | Ja – CameraView-Steuerung | Nein (verwenden Sie MediaPicker zum Aufnehmen und lesen Sie es dann). |
| In-App-Kamerasucher | Ja – kontinuierliche Echtzeit | Nein – verwendet die Systemkamera-Benutzeroberfläche über MediaPicker. |
| Aus Bilddatei lesen | Nein | Ja — BarcodeReader.Read(path) |
| Aus Byte-Array lesen | Nein | Ja — BarcodeReader.Read(bytes) |
| Aus dem Stream lesen | Nein | Ja — BarcodeReader.Read(stream) |
| Aus PDF lesen | Nein | Ja — BarcodeReader.Read(pdf) |
| Mehrfach-Barcode-Erkennung | Ja (mehrfach pro Rahmen über e.BarcodeResults) |
Ja (ExpectMultipleBarcodes-Option) |
| Lesegeschwindigkeitssteuerung | None | ReadingSpeed.Faster / Balanced / Detailed / ExtremeDetail |
| UPC-A auf iOS | Kann 13 Stellen zurückgeben; applications normalize | Gibt die standardisierte 12-stellige UPC-A zurück |
| PDF417 Zuverlässigkeit | Dokumentierte Probleme auf iOS/Android-Engines | Unterstützt |
| Generation | ||
| Barcode-Generierung | Nein | Ja — BarcodeWriter.CreateBarcode() |
| QR-Code-Generierung | Nein | Ja — QRCodeWriter.CreateQrCode() |
| Ausgabe als PNG / Byte-Array | Nein | Ja |
| Plattform | ||
| iOS MAUI | Ja (Apple Vision) | Ja (über aufgenommenes Bild) |
| Android MAUI | Ja (Google ML Kit) | Ja (über aufgenommenes Bild) |
| Windows MAUI | Ja (ZXingCpp, seit 3.0.1) | Ja |
| macOS MAUI | Ja (Mac Catalyst, Apple Vision) | Ja |
| ASP.NET / serverseitig | Nein | Ja |
| Docker / Azure / AWS Lambda | Nein | Ja |
| .NET Framework -Unterstützung | Nein (nur MAUI) | Ja – .NET Framework 4.6.2+ |
| Lizenzierung | ||
| Lizenztyp | MIT (Open Source) | Kommerziell, unbefristet |
| Kosten | Kostenlos | Lite 749 $, Plus 1.499 $, Professional 2.999 $, Unlimited 5.999 $ |
| Auswertungsmodus | Nicht anwendbar | Kostenlose Testversion verfügbar |
Architektur: Kamerasteuerung vs. Dateiverarbeitungs-API
Der grundlegendste Unterschied zwischen diesen beiden Bibliotheken liegt im Eingabemodell. BarcodeScanning.Native.Maui ist auf einen kontinuierlichen Kamerastream ausgelegt; IronBarcode ist für die Verarbeitung diskreter Dateneingaben konzipiert. Hierbei handelt es sich nicht um konkurrierende Umsetzungen derselben Idee – es sind unterschiedliche Architekturentscheidungen für unterschiedliche Anwendungsfälle.
Barcode-Scanning.MAUI-Ansatz
BarcodeScanning.Native.Maui kapselt die native Kameraerkennungspipeline auf jeder Plattform. Auf Android verarbeitet ML Kit Frames; auf iOS und macOS verarbeitet das Apple Vision-Framework Frames; auf Windows verarbeitet ZXingCpp Frames. Die Bibliothek stellt dies als MAUI CameraView-Steuerelement mit einem OnDetectionFinished-Ereignis bereit. Der Anwendungscode verarbeitet niemals direkt Bildbytes – er verarbeitet ausschließlich die erkannten Barcodewerte, die sich aus dem Ereignis ergeben.
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArg)
Dim barcode = e.BarcodeResults.FirstOrDefault()
If barcode IsNot Nothing Then
ResultLabel.Text = barcode.DisplayValue
End If
End Sub
Die Konsequenz dieser Konstruktion ist, dass es keinen anderen Zugangspunkt gibt. Die Kamera ist nicht optional – sie ist die einzige Eingabe, die die Bibliothek kennt. Ein Server, eine Datei, ein PDF oder ein nicht-MAUI-Host hat keinen Zugang zur Bibliothek.
IronBarcode Ansatz
IronBarcode erhält Bilddaten über seine BarcodeReader.Read()-statische Methode. Der Aufrufer liefert die Daten – aus beliebiger Quelle – und die Bibliothek dekodiert sie. Auf MAUI stammen die Daten von MediaPicker; Auf einem Server stammt es aus einem Formular-Upload; Bei einer Desktop-Anwendung stammt es aus einem Dateidialog.
// IronBarcode in MAUI: capture a photo, then read barcodes from it
// NuGet: dotnet add package IronBarcode
using IronBarCode;
private async void ScanBarcodeButton_Clicked(object sender, EventArgs e)
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;
using var stream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await stream.CopyToAsync(ms);
var results = BarcodeReader.Read(ms.ToArray());
foreach (var result in results)
ResultLabel.Text = result.Value;
}
// IronBarcode in MAUI: capture a photo, then read barcodes from it
// NuGet: dotnet add package IronBarcode
using IronBarCode;
private async void ScanBarcodeButton_Clicked(object sender, EventArgs e)
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;
using var stream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await stream.CopyToAsync(ms);
var results = BarcodeReader.Read(ms.ToArray());
foreach (var result in results)
ResultLabel.Text = result.Value;
}
Imports IronBarCode
Imports System.IO
Private Async Sub ScanBarcodeButton_Clicked(sender As Object, e As EventArgs)
Dim photo = Await MediaPicker.CapturePhotoAsync()
If photo Is Nothing Then Return
Using stream = Await photo.OpenReadAsync()
Using ms As New MemoryStream()
Await stream.CopyToAsync(ms)
Dim results = BarcodeReader.Read(ms.ToArray())
For Each result In results
ResultLabel.Text = result.Value
Next
End Using
End Using
End Sub
Dieser Code läuft identisch über die MAUI-Ziele, die ein Bild aufnehmen können. Für den Serverseitigen Gebrauch akzeptiert dieselbe BarcodeReader.Read()-Methode das Byte-Array einer hochgeladenen Datei oder einen PDF-Pfad. Die IronBarcode Dokumentation umfasst alle unterstützten Eingabetypen.
Plattformabdeckung und Erkennungs-Engines
Plattformabdeckung ist wichtig für Teams, die MAUI-Anwendungen erstellen, die möglicherweise auch Barcode-Logik mit nicht-MAUI-Projekten teilen müssen.
Barcode-Scanning.MAUI-Ansatz
BarcodeScanning.Native.Maui unterstützt alle vier MAUI-Ziele (iOS, Android, Windows seit 3.0.1, und macOS Catalyst), aber jedes Ziel verwendet eine andere Erkennungs-Engine: Apple Vision auf iOS und macOS, Google ML Kit auf Android und ZXingCpp auf Windows. Die Symbologieabdeckung und das Dekodierverhalten unterscheiden sich zwischen den drei Engines, sodass ein Barcode, der auf einer Plattform zuverlässig dekodiert wird, auf einer anderen anders funktionieren kann. Außerhalb von MAUI — ASP.NET, Konsole, WPF, WinForms, Blazor Server, Azure Functions — hat die Bibliothek keine Implementierung. Teams, die Barcode-Logik sowohl in einer MAUI-App als auch in einem Backend-Service benötigen, müssen eine andere Bibliothek für den nicht-MAUI-Code verwenden.
IronBarcode Ansatz
Der BarcodeReader.Read()-Aufruf von IronBarcode verwendet dieselbe verwaltete Engine auf jedem unterstützten Ziel, sodass sich das Verhalten über Windows, Linux, macOS, ASP.NET und jedes MAUI-Ziel, das ein Bild aufnehmen und dem Leser übergeben kann, konsistent verhält. Es gibt keine #if WINDOWS-Blöcke, keine bedingte Abhängigkeitsladung und keine Stummelausumsetzungen. Auch bei Datei- und PDF-Eingaben ist das Muster einheitlich:
using IronBarCode;
// Read barcodes from a file the user selected
var file = await FilePicker.PickAsync();
if (file != null)
{
var results = BarcodeReader.Read(file.FullPath);
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
}
// Read barcodes directly from a PDF — no image extraction step needed
var pdfResults = BarcodeReader.Read("shipment-manifest.pdf");
using IronBarCode;
// Read barcodes from a file the user selected
var file = await FilePicker.PickAsync();
if (file != null)
{
var results = BarcodeReader.Read(file.FullPath);
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
}
// Read barcodes directly from a PDF — no image extraction step needed
var pdfResults = BarcodeReader.Read("shipment-manifest.pdf");
Imports IronBarCode
' Read barcodes from a file the user selected
Dim file = Await FilePicker.PickAsync()
If file IsNot Nothing Then
Dim results = BarcodeReader.Read(file.FullPath)
For Each result In results
Console.WriteLine($"{result.Format}: {result.Value}")
Next
End If
' Read barcodes directly from a PDF — no image extraction step needed
Dim pdfResults = BarcodeReader.Read("shipment-manifest.pdf")
Der IronBarcode MAUI-Integrationsleitfaden enthält vollständige Einrichtungsanweisungen für alle MAUI-Ziele. IronBarcode unterstützt auch die serverseitige Bereitstellung in ASP.NET, Docker-, Azure Functions- und AWS Lambda-Umgebungen, in denen BarcodeScanning.Native.Maui überhaupt keinen Pfad hat.
Lesegenauigkeit von Barcodes: UPC-A und PDF417
Zwei format-spezifische Verhaltensweisen in BarcodeScanning.Native.Maui sind bei Produktionsanwendungen zu beachten.
Barcode-Scanning.MAUI-Ansatz
Unter iOS kann BarcodeScanning.Native.Maui's zugrundeliegende Erkennung (Apple Vision) 13 Ziffern für UPC-A-Barcodes zurückgeben. UPC-A ist ein 12-stelliges Format; Die zusätzliche führende Null entspricht der EAN-13-Codierung. Die Bibliothek gibt diesen Rohwert durch, und Anwendungen normalisieren ihn nach Bedarf. Anwendungen, die UPC-A-Werte ohne Normalisierung in einer Datenbank speichern, können Datensätze mit einer führenden Null anhäufen.
Die dokumentierte Umgehung prüft das Format und kürzt den Wert:
// Normalize iOS UPC-A — strip the leading zero when present
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode == null) return;
var value = barcode.DisplayValue;
if (barcode.BarcodeFormat == BarcodeFormats.Upca && value.Length == 13)
value = value.Substring(1);
ProcessBarcode(value);
}
// Normalize iOS UPC-A — strip the leading zero when present
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode == null) return;
var value = barcode.DisplayValue;
if (barcode.BarcodeFormat == BarcodeFormats.Upca && value.Length == 13)
value = value.Substring(1);
ProcessBarcode(value);
}
' Normalize iOS UPC-A — strip the leading zero when present
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArg)
Dim barcode = e.BarcodeResults.FirstOrDefault()
If barcode Is Nothing Then Return
Dim value = barcode.DisplayValue
If barcode.BarcodeFormat = BarcodeFormats.Upca AndAlso value.Length = 13 Then
value = value.Substring(1)
End If
ProcessBarcode(value)
End Sub
Der Formatcheck ist notwendig, damit EAN-13-Werte, die mit 0 beginnen, nicht fälschlicherweise gekürzt werden. PDF417 wird separat in GitHub-Issues als "sehr problematisch - die meisten Scans erfolgen nie" auf den iOS/Android-Engines dokumentiert, was für Versandetiketten, Führerscheine und Bordkarten relevant ist.
IronBarcode Ansatz
IronBarcode gibt den standardmäßigen 12-stelligen UPC-A-Wert über seine verwaltete Engine zurück. PDF417 ist ein unterstütztes Format. Die Generierungsseite ist ebenfalls über die API von IronBarcode verfügbar:
using IronBarCode;
// Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");
// Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
using IronBarCode;
// Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");
// Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
Imports IronBarCode
' Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500) _
.SaveAsPng("qr.png")
' Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng("barcode.png")
Für Anwendungen, bei denen die Genauigkeit der Barcode-Daten unmittelbar Auswirkungen auf Inventursuchen, POS-Transaktionen oder Lieferkettenintegrationen hat, reduziert IronBarcodes konsistente Formathandhabung den Bedarf an plattformspezifischer Normalisierung. Die IronBarcode Dokumentation zum Barcode-Lesen beschreibt das formatspezifische Verhalten im Detail.
API-Mapping-Referenz
| BarcodeScanning.Native.Maui | IronBarcode |
|---|---|
CameraView XAML-Steuerelement |
Keine Kamerasteuerung — verwenden Sie MediaPicker.CapturePhotoAsync() für die Aufnahme |
OnDetectionFinished-Ereignis |
BarcodeReader.Read(imageBytes) |
e.BarcodeResults |
Rückgabewert von BarcodeReader.Read() (IEnumerable) |
e.BarcodeResults.FirstOrDefault() |
results.FirstOrDefault() |
barcode.DisplayValue |
result.Value |
barcode.BarcodeFormat |
result.Format |
BarcodeFormats="All" |
Automatische Erkennung – keine Konfiguration für verschiedene Formate erforderlich |
CameraEnabled="True" |
MediaPicker.CapturePhotoAsync()-Aufruf |
| MAUI-only (iOS, Android, Windows, macOS) | MAUI (über aufgenommenes Bild) + ASP.NET, Konsole, WPF, Desktop, Server |
| Nur Kamerabilder | Dateien, Byte-Arrays, Datenströme, PDFs |
| Keine Datei-/PDF-API | BarcodeReader.Read(path) — akzeptiert Bilddateien und PDFs |
| Drei Engines über MAUI-Ziele | Einzelne verwaltete Engine über alle Ziele |
| Keine Generierungs-API | BarcodeWriter.CreateBarcode() + QRCodeWriter.CreateQrCode() |
Wenn Teams einen Wechsel von BarcodeScanning.MAUI zu IronBarcode erwägen
Konsistenz der plattformübergreifenden Engine wird zur Anforderung
MAUI-Anwendungen, die auf iOS, Android, Windows und macOS abzielen, greifen auf drei verschiedene Erkennungs-Engines zu, wenn sie BarcodeScanning.Native.Maui verwenden: Apple Vision (iOS/macOS), Google ML Kit (Android) und ZXingCpp (Windows). Jede Engine hat ihre eigene Abdeckung der Symbologie und ihr eigenes Dekodierungsverhalten, sodass derselbe Barcode auf verschiedenen Plattformen unterschiedlich dekodiert werden kann — und Anwendungen fügen oft Normalisierungsschichten hinzu, um die Unterschiede zu überbrücken. Wenn dieser Wartungsaufwand zunimmt oder wenn QA plattformübergreifende Regressionen meldet, die mit Unterschieden in den Engines verbunden sind, migrieren Teams manchmal die Barcode-Schicht zu einer einzigen verwalteten Engine, die sich auf jedem Ziel gleich verhält.
Anforderungen für Datei-Upload oder PDF-Verarbeitung hinzugefügt
Mobile Anwendungen beginnen oft mit Live-Kamera-Scannen als einziger Eingabemethode und erweitern sich später um die Möglichkeit, hochgeladene Bilder oder Dokumente zu akzeptieren. Wenn ein Benutzer einen Barcode aus einem Foto in der Galerie, aus einem über E-Mail empfangenen Bild oder aus einem PDF mit Versandscheinen oder Bordkarten scannen muss, hat BarcodeScanning.Native.Maui keinen Code-Pfad für diese Eingaben. Teams, die diese Anforderungsgrenze erreichen, stehen vor der Wahl: Entweder eine zweite Barcodelibrary zusammen mit BarcodeScanning.Native.Maui für Datei- und PDF-Eingaben hinzufügen oder zu einer einzigen Library migrieren, die alle Eingabetypen behandelt. Das Verwalten von zwei Barcodepaketen mit unterschiedlichen APIs und Ergebnistypen erhöht langfristig die Komplexität, die eine Ein-Paket-Lösung vermeidet.
Einführung der serverseitigen Barcode-Verarbeitung
Anwendungen, die Barcodes auf Mobilgeräten scannen, entwickeln häufig eine serverseitige Komponente – einen ASP.NET -API-Endpunkt, der Barcodes validiert, einen Hintergrundprozess, der PDFs verarbeitet, oder eine Cloud-Funktion, die Trackingnummern aus hochgeladenen Dokumenten extrahiert. BarcodeScanning.Native.Maui ist eine MAUI UI Kontrollbibliothek; es hat keine serverseitige Implementierung. Ein Team, das dieselbe Barcode-Leselogik sowohl auf Mobilgeräten als auch auf Servern benötigt, muss für die Serverseite eine andere Bibliothek verwenden. Sobald diese Serveranforderung gestellt wird, prüfen Teams häufig, ob die Konsolidierung auf eine einzige Bibliothek, die sowohl Mobilgeräte als auch Server abdeckt, der Pflege zweier separater Implementierungen vorzuziehen ist.
UPC-A-Daten-Normalisierung wird zu einem Anliegen
Das 13-stellige Verhalten des iOS UPC-A wird während der Entwicklung nicht immer erkannt. In der Entwicklung gescannte UPC-A-Barcodes scheinen korrekt zu funktionieren, aber die führende Null aus Apples Vision-Framework kann in der Datenbank erscheinen, wenn die Normalisierung fehlt. Teams, die 13-stellige UPC-A-Werte in Inventaraufzeichnungen, POS-Systemen oder Lieferkettenintegrationen entdecken, benötigen möglicherweise sowohl eine Codekorrektur als auch einen Datenkorrekturschritt. Das Hinzufügen der dokumentierten Normalisierung behandelt neue Scans; die Migration zu einer Bibliothek mit konsistenter UPC-A-Ausgabe wird manchmal als langfristige Lösung bevorzugt.
PDF417 Dokumentenscannen erforderlich
PDF417 ist das Barcode-Format, das in Nordamerika für Versandetiketten, Führerscheine und Bordkarten verwendet wird. Dies sind gängige Scanziele für Logistik-, Identitätsprüfungs- und Reiseanwendungen. BarcodeScanning.Native.Maui's GitHub-Issue-Tracker dokumentiert PDF417 als "sehr problematisch - die meisten Scans erfolgen nie" auf den iOS/Android-Engines. Für Anwendungen, bei denen die Zuverlässigkeit von PDF417 eine funktionale Anforderung ist, evaluieren Teams oft alternative Libraries.
Gemeinsame Überlegungen zur Migration
Kameraereignis an MediaPicker und statisches Lesen
Die Kernstrukturänderung bei der Migration ist das Ersetzen des kontinuierlichen Kameraveranstaltungsmusters durch eine MediaPicker-Aufnahme gefolgt von BarcodeReader.Read(). Der OnDetectionFinished-Ereignishandler, das CameraView-XAML-Steuerelement und die scanner:-XML-Namensraumdeklaration werden alle entfernt. Stattdessen löst ein Button MediaPicker.CapturePhotoAsync() aus, und die resultierenden Foto-Bytes werden an BarcodeReader.Read() übergeben. Dadurch ändert sich das Benutzererlebnis von einem kontinuierlichen Live-Sucher zu einem Systemkamerabildschirm – was für die meisten Geschäftsanwendungen geeignet ist.
Änderungen am Thread-Marshalling
BarcodeScanning.Native.Maui löst OnDetectionFinished in einem Hintergrund-Thread aus, sodass alle vorhandenen Handler, die UI-Elemente aktualisieren, ihre Aktualisierungen in MainThread.BeginInvokeOnMainThread() einwickeln. Mit dem MediaPicker + asynchronen Muster, das von IronBarcode verwendet wird, erfolgt die Fortsetzung nach await im aufrufenden Kontext, der typischerweise der Haupt-Thread ist. In den meisten Fällen können die MainThread.BeginInvokeOnMainThread()-Wrapper entfernt werden, was den Code des Ereignishandlers vereinfachen.
UPC-A-Normalisierungs-Entfernung
Jede Codebasis, die das iOS UPC-A-13-stellige Verhalten von BarcodeScanning.Native.Maui behandelte, wird Code enthalten, der BarcodeFormats.Upca überprüft und Substring(1) aufruft, um die führende Null zu entfernen. Dieser Code sollte nach der Migration entfernt werden — IronBarcode gibt den standardmäßigen 12-stelligen Wert zurück, und das Belassen der Normalisierung würde das erste Zeichen von gültigen UPC-A-Lesevorgängen fälschlicherweise entfernen.
MAUI-Berechtigungen
BarcodeScanning.Native.Maui fügt Android und iOS automatisch Kameraberechtigungen zu den Manifesten als Teil seiner Paket-Setups hinzu. Mit IronBarcode, das MediaPicker verwendet, sind die Standard-MAUI-Kameraberechtigungen in AndroidManifest.xml und Info.plist erforderlich — dieselben Berechtigungen, die jede MAUI-App für MediaPicker.CapturePhotoAsync() benötigt. Diese Berechtigungen sind in MAUI-Projekten, die die Kamera für irgendeinen Zweck verwenden, in der Regel bereits vorhanden.
Zusätzliche IronBarcode Funktionen
Über die in diesem Vergleich behandelten Funktionen hinaus bietet IronBarcode Features, die BarcodeScanning.Native.Maui in keiner Weise abdeckt:
- Barcode-Generierung : Generierung von Code128, QR, DataMatrix, PDF417 und anderen Formaten als PNG, SVG oder Byte-Array – verwendbar in der MAUI-Benutzeroberfläche, API-Antworten oder gedruckten Etiketten.
- QR-Code-Generierung : Erstellen Sie individuell gestaltete QR-Codes mit Logoeinbettung, Farbanpassung und Kontrolle des Fehlerkorrekturgrades.
- Multi-Barcode-Lesen: Die
ExpectMultipleBarcodes-Option liest alle Barcodes, die in einem einzelnen Bild vorhanden sind, in einem Durchgang. - PDF-Barcode-Extraktion : Direktes Lesen von in PDF-Dokumenten eingebetteten Barcodes – keine Zwischenkonvertierung der Bilder erforderlich.
- Serverseitige Bereitstellung : Die gleiche Barcode-Lese- und Generierungslogik kann in ASP.NET, Azure Functions, Docker und AWS Lambda ohne Kameraabhängigkeit bereitgestellt werden.
- Lesegeschwindigkeitskonfiguration:
ReadingSpeed.Faster,Balanced,DetailedundExtremeDetail-Einstellungen ermöglichen die Abstimmung zwischen Durchsatz und Genauigkeit je nach Bildqualität. - Server- und Desktop-Wiederverwendung: Die gleiche Bibliothek läuft in ASP.NET-, Konsolen-, WPF- und WinForms-Projekten, sodass Barcode-Logik zwischen einem MAUI-Client und einem Backend-Dienst geteilt werden kann, ohne ein zweites Paket zu benötigen.
.NET-Kompatibilität und Zukunftsfähigkeit
IronBarcode unterstützt .NET 6, .NET 7 und .NET 8 sowie .NET Framework 4.6.2 und später. Das bedeutet, es läuft auf modernen .NET-Zielen sowie in älteren Serverumgebungen, die noch nicht migriert wurden. BarcodeScanning.Native.Maui ist eine rein MAUI-Bibliothek ohne Unterstützung für .NET Framework und ohne serverseitigen Bereitstellungspfad. Für Teams, deren Codebasis sowohl MAUI als auch bestehende .NET Framework oder .NET Core -Serveranwendungen umfasst, bietet IronBarcode eine konsistente API für alle Umgebungen, ohne dass für jeden Laufzeitkontext ein separates Barcode-Paket erforderlich ist.
Abschluss
BarcodeScanning.Native.Maui und IronBarcode befassen sich mit unterschiedlichen Problemen. BarcodeScanning.Native.Maui ist eine Kamerasteuerungsbibliothek, die einen Echtzeit-Sucher mit automatischer Barcode-Erkennung über die MAUI-Ziele bereitstellt und die Erkennung an drei verschiedene Plattform-Engines delegiert. IronBarcode ist eine Barcode-Lese- und Generierungsbibliothek, die statische Bilddaten aus jeder Quelle durch eine einzige verwaltete Engine über .NET-Ziele verarbeitet. Der architektonische Unterschied – kontinuierlicher Kamerastream versus diskrete Dateneingabe – bestimmt, welche Bibliothek für einen gegebenen Anforderungssatz geeignet ist.
BarcodeScanning.Native.Maui ist die richtige Wahl, wenn die Anwendung eine MAUI-App ist, bei der eine Echtzeit-Kameravorschau in der App mit kontinuierlicher Rahmenerkennung das erforderliche UX-Muster ist, und wenn die Anforderungen nicht um Dateiuploads, PDF-Verarbeitung oder serverseitige Barcode-Arbeiten erweitert werden. Innerhalb dieses Rahmens ist es kostenlos, minimal und funktional.
IronBarcode ist die richtige Wahl, wenn Barcode-Eingaben aus Dateien, PDFs oder Byte-Arrays zusätzlich oder anstelle einer Live-Kamera erfolgen, wenn serverseitige Barcode-Verarbeitung Teil der Architektur ist oder wenn Barcode-Generierung neben dem Lesen erforderlich ist. Es passt auch, wenn konsistentes Dekodierungsverhalten über Plattformen oder PDF417-Zuverlässigkeit Produktionsanforderungen sind. Die Kosten für die kommerzielle Lizenz sind der Preis für diese Funktionen.
Für Teams, deren Anforderungen derzeit in den Rahmen von BarcodeScanning.Native.Maui passen, ist die Bibliothek eine vernünftige und kostengünstige Wahl. Für Teams, deren Anforderungen gewachsen sind oder voraussichtlich über das Live-Kamera-Scannen hinaus wachsen, ist IronBarcodes konsistente API über Eingabetypen, Plattformen und Bereitstellungsziele eine praktische Alternative.
Häufig gestellte Fragen
Was ist BarcodeScanning.MAUI?
BarcodeScanning.MAUI ist eine .NET Barcode-Bibliothek zum Erzeugen und Lesen von Barcodes in C#-Anwendungen. Sie ist eine von mehreren Alternativen, die Entwickler bei der Auswahl einer Barcode-Lösung for .NET-Projekte in Betracht ziehen.
Was sind die Hauptunterschiede zwischen BarcodeScanning.MAUI und IronBarcode?
IronBarcode verwendet eine statische, zustandslose API, die keine Instanzverwaltung erfordert, während BarcodeScanning.MAUI in der Regel eine Instanzerstellung und -konfiguration vor der Verwendung erfordert. IronBarcode bietet außerdem native PDF-Unterstützung, automatische Formaterkennung und Single-Key-Lizenzierung in allen Umgebungen.
Ist IronBarcode einfacher zu lizenzieren als BarcodeScanning.MAUI?
IronBarcode verwendet einen einzigen Lizenzschlüssel, der sowohl die Entwicklungs- als auch die Produktionsbereitstellung abdeckt. Dies vereinfacht CI/CD-Pipelines und Docker-Konfigurationen im Vergleich zu Lizenzierungssystemen, die SDK-Schlüssel von Laufzeitschlüsseln trennen.
Unterstützt IronBarcode alle Barcode-Formate, die BarcodeScanning.MAUI unterstützt?
IronBarcode unterstützt über 30 Barcode-Symbologien, darunter QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 und viele mehr. Die automatische Formaterkennung bedeutet, dass keine explizite Formataufzählung erforderlich ist.
Unterstützt IronBarcode das native Lesen von PDF-Barcodes?
Ja, IronBarcode liest Barcodes direkt aus PDF-Dateien mit BarcodeReader.Read("document.pdf"), ohne dass eine separate PDF-Rendering-Bibliothek erforderlich ist. Die seitenweisen Ergebnisse umfassen Seitenzahl, Barcodeformat, Wert und Konfidenzwert.
Wie handhabt IronBarcode die Stapelverarbeitung im Vergleich zu BarcodeScanning.MAUI?
Die statischen Methoden von IronBarcode sind zustandslos und natürlich thread-sicher, was die direkte Verwendung von Parallel.ForEach ohne Instanzverwaltung pro Thread ermöglicht. Es gibt auf keiner Preisstufe eine Obergrenze für den Durchsatz.
Welche .NET Versionen werden von IronBarcode unterstützt?
IronBarcode unterstützt .NET Framework 4.6.2+, .NET Core 3.1 und .NET 5, 6, 7, 8 und 9 in einem einzigen NuGet-Paket. Zu den Zielplattformen gehören Windows x64/x86, Linux x64 und macOS x64/ARM.
Wie installiere ich IronBarcode in einem .NET-Projekt?
Installieren Sie IronBarcode über NuGet: Führen Sie "Install-Package IronBarCode" in der Paketmanager-Konsole oder "dotnet add package IronBarCode" in der CLI aus. Es sind keine zusätzlichen SDK-Installationsprogramme oder Laufzeitdateien erforderlich.
Kann ich IronBarcode vor dem Kauf testen, im Gegensatz zu BarcodeScanning.MAUI?
Ja, der Testmodus von IronBarcode liefert vollständige dekodierte Barcodewerte - nur die erzeugten Ausgabebilder erhalten ein Wasserzeichen. Sie können die Lesegenauigkeit an Ihren eigenen Dokumenten testen, bevor Sie sich zum Kauf verpflichten.
Was ist der Preisunterschied zwischen BarcodeScanning.MAUI und IronBarcode?
Die Preise für IronBarcode beginnen bei 749 US-Dollar für eine unbefristete Einzelentwicklerlizenz für Entwicklung und Produktion. Preisdetails und Volumenoptionen sind auf der IronBarcode-Lizenzierungsseite verfügbar. Es ist keine separate Runtime-Lizenz erforderlich.
Ist es einfach, von BarcodeScanning.MAUI zu IronBarcode zu migrieren?
Die Migration von BarcodeScanning.MAUI zu IronBarcode beinhaltet in erster Linie das Ersetzen von instanzbasierten API-Aufrufen durch statische Methoden von IronBarcode, das Entfernen von Lizenzierungsvorlagen und das Aktualisieren der Namen von Ergebniseigenschaften. Bei den meisten Migrationen wird eher Code reduziert als hinzugefügt.
Kann IronBarcode QR-Codes mit Logos generieren?
Ja. QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") bettet ein Markenbild nativ in einen QR-Code mit konfigurierbarer Fehlerkorrektur ein. Farbige QR-Codes werden auch über ChangeBarCodeColor() unterstützt.

