Jak odczytywać BarCodes z obiektów rysunkowych systemu

How to Read Barcodes From System.Drawing in C

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronBarcode umożliwia odczytywanie kodów kreskowych z obiektów System.Drawing na wszystkich systemach operacyjnych poprzez automatyczne konwertowanie ich do AnyBitmap za pomocą IronDrawing, rozwiązując ograniczenie Microsoftu dotyczące wsparcia dla System.Drawing tylko na Windows.

Wprowadzenie

Obiekty System.Drawing są szeroko wykorzystywane w .NET do zadań związanych z przetwarzaniem obrazów. Jednak Microsoft zaprzestał wsparcia dla System.Drawing na macOS i Linux, teraz wspiera wyłącznie Windows. Ta zmiana stwarza problemy dla deweloperow używających IronBarcode na systemach operacyjnych innych niz Windows, gdyz praca z kodami kreskowymi zazwyczaj obejmuje grafike, obrazy i czcionki.

Aby rozwiązac ten problem, wprowadzilismy IronDrawing. Ta bezpłatna i open-source biblioteka stworzona przez Iron Software upraszcza wsparcie wieloplatformowe i zapewnia płynne doświadczenie. Gdy zainstalujesz IronBarcode z NuGet, IronDrawing jest automatycznie dodawane do Twojego projektu.

Dla deweloperow nowych w odczycie kodow kreskowych, zobacz nasz kompleksowy Poradnik Odczytywania Kodow Kreskowych obejmujacy podstawowe pojecia i wzorce użytkowania. Jeśli pracujesz z różnymi formatami obrazów, nasz przewodnik na temat odczytywania kodow kreskowych z obrazów zapewnia dodatkowy kontekst i przykłady.

Szybki start: Odczytaj kod kreskowy używając AnyBitmap w jednej łatwej linii

Ten fragment pokazuje, jak IronBarcode odczytuje kody kreskowe poprzez stworzenie System.Drawing.Bitmap i pozwolenie na jego niejawne rzutowanie do AnyBitmap przez IronDrawing. Zaledwie jedna linia pozwala deweloperom na dowolnym systemie operacyjnym uzyskać szybkie wyniki.

  1. Install IronBarcode with NuGet Package Manager

    PM > Install-Package BarCode
  2. Skopiuj i uruchom ten fragment kodu.

    var results = IronBarCode.BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png")));
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronBarcode w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer

Jak rzutować obiekty System.Drawing do AnyBitmap?

Odczytywanie kodów kreskowych z System.Drawing wymaga rzutowania obiektu do AnyBitmap. IronDrawing została zaprojektowana dla łatwości użycia i wspiera niejawne rzutowanie obiektów obrazowych z System.Drawing do obiektów obrazowych IronSoftware.Drawing nazywanych AnyBitmap.

Poza obiektami System.Drawing wspieramy rzutowanie z innych typów:

  • System.Drawing.Bitmap
  • System.Drawing.Image
  • SkiaSharp.SKBitmap
  • SkiaSharp.SKImage
  • SixLabors.ImageSharp

Zobacz ten przykład kodu do rzutowania powyzszych obiektow. Poniżej pokazane jest rzutowanie obrazów kodów kreskowych z obiektów System.Drawing do IronSoftware.Drawing.AnyBitmap.

Jakie typy System.Drawing mogą być rzutowane?

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-system-drawing-cast-to-anybitmap.cs
using IronSoftware.Drawing;
using System.Collections.Generic;

List<AnyBitmap> barcodes = new List<AnyBitmap>();

// Instantiate System.Drawing.Bitmap
System.Drawing.Bitmap bitmapFromBitmap = new System.Drawing.Bitmap("test1.jpg");

// Cast from System.Drawing.Bitmap to AnyBitmap
AnyBitmap barcode1 = bitmapFromBitmap;

barcodes.Add(barcode1);

// Instantiate System.Drawing.Bitmap
System.Drawing.Image bitmapFromFile = System.Drawing.Image.FromFile("test2.png");

// Cast from System.Drawing.Image to AnyBitmap
AnyBitmap barcode2 = bitmapFromFile;

barcodes.Add(barcode2);
Imports IronSoftware.Drawing
Imports System.Collections.Generic

Private barcodes As New List(Of AnyBitmap)()

' Instantiate System.Drawing.Bitmap
Private bitmapFromBitmap As New System.Drawing.Bitmap("test1.jpg")

' Cast from System.Drawing.Bitmap to AnyBitmap
Private barcode1 As AnyBitmap = bitmapFromBitmap

barcodes.Add(barcode1)

' Instantiate System.Drawing.Bitmap
Dim bitmapFromFile As System.Drawing.Image = System.Drawing.Image.FromFile("test2.png")

' Cast from System.Drawing.Image to AnyBitmap
Dim barcode2 As AnyBitmap = bitmapFromFile

barcodes.Add(barcode2)
$vbLabelText   $csharpLabel

Ten kod demonstruje bezproblemową integrację między obiektami System.Drawing a IronBarcode przez IronDrawing. Ta kompatybilnosc rozciaga sie na różne formaty kodow kreskowych, szczegółowo opisane w naszym przewodniku po wspieranych formatach kodow kreskowych, w tym kodach QR, Code 128, Code 39 i wielu innych.

Dlaczego działa niejawne rzutowanie?

W powyższym kodzie załadowaliśmy dwa obrazy kodów kreskowych jako System.Drawing.Bitmap i System.Drawing.Image. Następnie niejawnie przekształciliśmy je do AnyBitmap przez przypisanie ich do obiektów AnyBitmap, a następnie dodaliśmy te obiekty do listy AnyBitmap.

Mechanizm niejawnego rzutowania IronDrawing używa przeciążania operatorów, zapewniając transparentną konwersję między typami System.Drawing a AnyBitmap. Ten wzorzec projektowy pozwala deweloperom utrzymywac istniejący kod przy jednoczesnym zyskaniu kompatybilnosci miedzyplatformowej. Konwersja zachowuje wszystkie właściwości obrazu, w tym rozdzielczosc, glebokosc koloru i dane pikselowe, zapewniając brak utraty jakosci.

Kiedy należy stosować jawne vs niejawne rzutowanie?

Chociaż niejawne rzutowanie zapewnia wygode, jawne rzutowanie może być preferowane w niektorych sytuacjach:

// Implicit casting - clean and simple for straightforward conversions
System.Drawing.Bitmap systemBitmap = new System.Drawing.Bitmap("barcode.png");
AnyBitmap anyBitmap = systemBitmap; // Implicit cast

// Explicit casting - useful when type clarity is important
System.Drawing.Image systemImage = System.Drawing.Image.FromFile("qrcode.jpg");
AnyBitmap explicitBitmap = (AnyBitmap)systemImage; // Explicit cast

// When working with nullable types or conditional logic
System.Drawing.Bitmap? nullableBitmap = GetBitmapFromSource();
if (nullableBitmap != null)
{
    AnyBitmap result = (AnyBitmap)nullableBitmap; // Explicit cast for clarity
    // Process the barcode
}
// Implicit casting - clean and simple for straightforward conversions
System.Drawing.Bitmap systemBitmap = new System.Drawing.Bitmap("barcode.png");
AnyBitmap anyBitmap = systemBitmap; // Implicit cast

// Explicit casting - useful when type clarity is important
System.Drawing.Image systemImage = System.Drawing.Image.FromFile("qrcode.jpg");
AnyBitmap explicitBitmap = (AnyBitmap)systemImage; // Explicit cast

// When working with nullable types or conditional logic
System.Drawing.Bitmap? nullableBitmap = GetBitmapFromSource();
if (nullableBitmap != null)
{
    AnyBitmap result = (AnyBitmap)nullableBitmap; // Explicit cast for clarity
    // Process the barcode
}
Imports System.Drawing

' Implicit casting - clean and simple for straightforward conversions
Dim systemBitmap As New Bitmap("barcode.png")
Dim anyBitmap As AnyBitmap = systemBitmap ' Implicit cast

' Explicit casting - useful when type clarity is important
Dim systemImage As Image = Image.FromFile("qrcode.jpg")
Dim explicitBitmap As AnyBitmap = CType(systemImage, AnyBitmap) ' Explicit cast

' When working with nullable types or conditional logic
Dim nullableBitmap As Bitmap = GetBitmapFromSource()
If nullableBitmap IsNot Nothing Then
    Dim result As AnyBitmap = CType(nullableBitmap, AnyBitmap) ' Explicit cast for clarity
    ' Process the barcode
End If
$vbLabelText   $csharpLabel

Jakie sa powszechne błędy rzutowania?

Podczas konwersji System.Drawing do AnyBitmap, programiści mogą napotkać:

  1. Wyjątki Null Reference: Sprawdź, czy obiekt System.Drawing nie jest null przed rzutowaniem
  2. Wyjatki Nieobsługiwany Format: Niektore egzotyczne formaty obrazów wymagaja wstepnej konwersji
  3. Problemy z Pamiećia: Duze obrazy wymagaja wlasciwych wzorcow zwalniania zasobów

W celu rozwiazywania problemow z rzutowaniem, nasz przewodnik rozwiazywania problemow zapewnia rozwiązania typowych problemow podczas rozpoznawania kodow kreskowych.

Jak odczytać kody kreskowe z obiektów AnyBitmap?

IronBarcode akceptuje obiekty IronSoftware.Drawing.AnyBitmap we wszystkich metodach bez dodatkowej konfiguracji. To upraszcza rozwój podczas używania obiektów System.Drawing na systemach operacyjnych innych niż Windows. Poniższy kod to ilustruje:

Jakie metody akceptują parametry AnyBitmap?

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-system-drawing-read-anybitmap.cs
using IronBarCode;
using IronSoftware.Drawing;
using System;
using System.Collections.Generic;

// Create a list of image file paths to read barcodes from
List<string> barcodeFiles = new List<string>
{
    "test1.jpg",
    "test2.png"
};

foreach (var barcodeFile in barcodeFiles)
{
    // Read the barcode from file path
    var results = BarcodeReader.Read(barcodeFile);
    foreach (var result in results)
    {
        // Output the detected barcode value
        Console.WriteLine(result.Value);
    }
}
Imports IronBarCode
Imports IronSoftware.Drawing
Imports System
Imports System.Collections.Generic

' Create a list of image file paths to read barcodes from
Dim barcodeFiles As New List(Of String) From {
    "test1.jpg",
    "test2.png"
}

For Each barcodeFile In barcodeFiles
    ' Read the barcode from file path
    Dim results = BarcodeReader.Read(barcodeFile)
    For Each result In results
        ' Output the detected barcode value
        Console.WriteLine(result.Value)
    Next
Next
$vbLabelText   $csharpLabel

Poza podstawową metodą Read, IronBarcode dostarcza kilka metod akceptujących parametry AnyBitmap. Dla zaawansowanych scenariuszy, zobacz nasz przewodnik na temat odczytywania wielu kodow kreskowych prezentujacy efektywne przetwarzanie wielu kodow kreskowych w jednym obrazie:

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-system-drawing-5.cs
// Advanced barcode reading with options
var readerOptions = new BarcodeReaderOptions
{
    // Specify barcode types to search for
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    // Set confidence threshold
    ConfidenceThreshold = 0.95
};

// Read with specific options
var advancedResults = BarcodeReader.Read(anyBitmap, readerOptions);
Imports System

' Advanced barcode reading with options
Dim readerOptions As New BarcodeReaderOptions With {
    ' Specify barcode types to search for
    .ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128,
    ' Set confidence threshold
    .ConfidenceThreshold = 0.95
}

' Read with specific options
Dim advancedResults = BarcodeReader.Read(anyBitmap, readerOptions)
$vbLabelText   $csharpLabel

Jak obsługiwac wiele wynikow kodu kreskowego?

Kod powyzej rozszerza poprzedni przykład. Po wypełnieniu listy AnyBitmap, przeszliśmy przez nią i wywołaliśmy metodę Read na każdym obiekcie AnyBitmap, co zwróciło IronBarCode.BarcodeResults. Następnie iterujemy przez wyniki, aby wydrukowac wartosci kodow kreskowych na konsoli.

Podczas obsługi wielu kodow kreskowych wykorzystuj przetwarzanie rownolegle do uzyskania lepszej wydajności:

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-system-drawing-6.cs
// Parallel processing for multiple barcode images
var barcodeFiles = Directory.GetFiles("barcodes/", "*.png");
var allResults = new ConcurrentBag<BarcodeResult>();

Parallel.ForEach(barcodeFiles, file =>
{
    var bitmap = new System.Drawing.Bitmap(file);
    var anyBitmap = (AnyBitmap)bitmap;
    var results = BarcodeReader.Read(anyBitmap);
    
    foreach (var result in results)
    {
        allResults.Add(result);
    }
    
    bitmap.Dispose(); // Clean up resources
});

// Process all results
foreach (var result in allResults)
{
    Console.WriteLine($"Found {result.BarcodeType}: {result.Value}");
}
Imports System.IO
Imports System.Collections.Concurrent
Imports System.Drawing
Imports System.Threading.Tasks

' Parallel processing for multiple barcode images
Dim barcodeFiles = Directory.GetFiles("barcodes/", "*.png")
Dim allResults As New ConcurrentBag(Of BarcodeResult)()

Parallel.ForEach(barcodeFiles, Sub(file)
    Dim bitmap As New Bitmap(file)
    Dim anyBitmap As AnyBitmap = CType(bitmap, AnyBitmap)
    Dim results = BarcodeReader.Read(anyBitmap)

    For Each result In results
        allResults.Add(result)
    Next

    bitmap.Dispose() ' Clean up resources
End Sub)

' Process all results
For Each result In allResults
    Console.WriteLine($"Found {result.BarcodeType}: {result.Value}")
Next
$vbLabelText   $csharpLabel

Jakie inne funkcje IronDrawing mogę wykorzystać?

Funkcjonalność IronSoftware.Drawing wykracza poza rzutowanie obrazów. Obsługuje aspekty przetwarzania obrazów, takie jak kolory i czcionki, przydatne do stylizacji kodow kreskowych i kodow QR. Poznaj, jak wykorzystujemy IronDrawing do dostosowywania i dodawania logo do kodów QR.

IronDrawing zapewnia potężne możliwości manipulacji obrazem uzupełniające przetwarzanie kodów kreskowych:

:path=/static-assets/barcode/content-code-examples/how-to/read-barcodes-from-system-drawing-7.cs
// Using IronDrawing for image preprocessing
using IronSoftware.Drawing;

// Load and preprocess an image before barcode reading
AnyBitmap preprocessedImage = AnyBitmap.FromFile("noisy-barcode.jpg");

// Apply image filters to improve barcode readability
preprocessedImage = preprocessedImage.ToGrayScale();
preprocessedImage = preprocessedImage.Contrast(1.5); // Increase contrast
preprocessedImage = preprocessedImage.Sharpen(); // Sharpen image

// Read the preprocessed barcode
var improvedResults = BarcodeReader.Read(preprocessedImage);
Imports IronSoftware.Drawing

' Load and preprocess an image before barcode reading
Dim preprocessedImage As AnyBitmap = AnyBitmap.FromFile("noisy-barcode.jpg")

' Apply image filters to improve barcode readability
preprocessedImage = preprocessedImage.ToGrayScale()
preprocessedImage = preprocessedImage.Contrast(1.5) ' Increase contrast
preprocessedImage = preprocessedImage.Sharpen() ' Sharpen image

' Read the preprocessed barcode
Dim improvedResults = BarcodeReader.Read(preprocessedImage)
$vbLabelText   $csharpLabel

W przypadku scenariuszy wymagających specyficznych korekcji obrazów, nasz przewodnik po korekcji obrazów szczegółowo opisuje użycie filtrow do zwiększenia czytelnosci kodu kreskowego.

Dlaczego wybrać IronDrawing zamiast System.Drawing?

IronDrawing oferuje przekonujące zalety nad System.Drawing:

  1. Obsługa wieloplatformowa: działa bezproblemowo na Windows, Linux i macOS w przeciwieństwie do System.Drawing (tylko Windows w .NET Core/5+)
  2. Nowoczesna architektura: Zbudowana na SkiaSharp i ImageSharp dla lepszej wydajności i zarządzania pamięcią
  3. Uproszczone API: Utrzymuje znajome interfejsy podobne do System.Drawing dodając nowoczesne udogodnienia
  4. Aktywna rozwój: regularne aktualizacje i usprawnienia, w przeciwieństwie do System.Drawing w trybie utrzymania
  5. Lepsza integracja: Zaprojektowany specjalnie z mysla o optymalnej wydajności z produktami Iron Software

W celu rozważań dotyczących wdrożenia, szczególnie dla środowisk chmurowych, zapoznaj się z naszymi przewodnikami o wdrażaniu na Azure i wdrażaniu na AWS, które zawierają specyficzne uwagi na temat kompatybilności wieloplatformowej z użyciem IronDrawing.

Niezależnie od tego, czy tworzysz aplikacje desktopowe, usługi webowe czy rozwiązania dla chmury, IronDrawing zapewnia, że kod przetwarzający kody kreskowe pozostaje przenośny i wydajny na wszystkich platformach, czyniąc go idealnym wyborem dla nowoczesnego rozwoju .NET.

Często Zadawane Pytania

Jak mogę odczytywać kody kreskowe z obiektów System.Drawing na platformach innych niż Windows?

IronBarcode automatycznie obsługuje wieloplatformowe odczytywanie kodów kreskowych z obiektów System.Drawing za pośrednictwem IronDrawing, które konwertuje je na format AnyBitmap. To rozwiązuje ograniczenie Microsoft, że System.Drawing jest tylko Windows, umożliwiając bezproblemowe odczytywanie kodów kreskowych na systemach MacOS i Linux.

Czym jest IronDrawing i dlaczego jest dołączony do odczytywania kodów kreskowych?

IronDrawing to darmowa, open-source'owa biblioteka stworzona przez Iron Software, która zapewnia wsparcie dla grafik wieloplatformowych. Jest automatycznie dołączana, gdy instalujesz IronBarcode z NuGet i umożliwia odczytywanie kodów kreskowych z obiektów System.Drawing na wszystkich systemach operacyjnych, przekształcając je w kompatybilny format AnyBitmap.

Jak skonwertować System.Drawing.Bitmap do odczytu kodów kreskowych?

Możesz odczytywać kody kreskowe z System.Drawing.Bitmap za pomocą prostej operacji rzutowania na AnyBitmap: `var results = BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png")));`. IronBarcode automatycznie obsługuje konwersję dzięki funkcji rzutowania niejawnego IronDrawing.

Czy mogę odczytywać kody kreskowe na Linuxie i MacOS przy użyciu System.Drawing?

Tak, IronBarcode umożliwia odczytywanie kodów kreskowych z obiektów System.Drawing na Linuxie i MacOS za pośrednictwem IronDrawing, które automatycznie konwertuje obiekty System.Drawing na wieloplatformowy format AnyBitmap. To pokonuje ograniczenie Microsoft, że System.Drawing działa tylko na Windows.

Jakie typy obiektów System.Drawing mogą być używane do odczytywania kodów kreskowych?

IronBarcode wspiera odczytywanie kodów kreskowych z różnych obiektów System.Drawing, w tym System.Drawing.Bitmap i innych typów obrazów. Są one automatycznie konwertowane na AnyBitmap dzięki funkcji rzutowania niejawnego IronDrawing, umożliwiając wieloplatformową funkcjonalność skanowania kodów kreskowych.

Czy istnieje proste rozwiązanie w jednej linii do odczytywania kodów kreskowych z System.Drawing?

Tak, IronBarcode oferuje rozwiązanie w jednej linii: `var results = BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png")));`. Ta pojedyncza linia tworzy System.Drawing.Bitmap, rzutuje ją na AnyBitmap za pomocą IronDrawing i odczytuje wszystkie kody kreskowe obecne na obrazie.

Czy IronBarcode oferuje wsparcie dla dostosowywania wyglądu kodów kreskowych?

Tak, IronBarcode oferuje rozległe opcje dostosowywania wyglądu kodów kreskowych, w tym kolory, rozmiar i adnotacje tekstowe, pozwalając dostosować kody kreskowe do konkretnych wymagań projektowych.

Jak IronBarcode może pomóc w poprawie efektywności procesów biznesowych?

IronBarcode zwiększa efektywność procesów biznesowych, umożliwiając szybkie i dokładne generowanie i odczyt kodów kreskowych, redukując błędy ręcznego wprowadzania danych i poprawiając śledzenie zapasów i aktywów.

Jakie umiejętności programistyczne są potrzebne do zaimplementowania IronBarcode w projekcie?

Podstawowa znajomość programowania w C# jest wystarczająca do zaimplementowania IronBarcode w projekcie, ponieważ oferuje on nieskomplikowane metody i kompleksową dokumentację do prowadzenia deweloperów.

Czy IronBarcode jest odpowiedni zarówno dla małych projektów, jak i dużych aplikacji korporacyjnych?

IronBarcode jest zaprojektowany do bycia skalowalnym i wszechstronnym, dzięki czemu jest odpowiedni zarówno dla małych projektów, jak i dużych aplikacji korporacyjnych, które wymagają solidnych rozwiązań kodów kreskowych.

Hairil Hasyimi Bin Omar
Inżynier oprogramowania
Jak wszyscy wielcy inżynierowie, Hairil jest zapalonym uczniem. Doskonali swoją wiedzę na temat C#, Pythona i Javy, wykorzystując tę wiedzę, aby dodawać wartości członkom zespołu Iron Software. Hairil dołączył do zespołu Iron Software z Universiti Teknologi MARA w Malezji, gdzie uzyskał tytuł licencjata ...
Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 2,331,688 | Wersja: 2026.7 właśnie wydany
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package BarCode
uruchom przykład zobacz, jak twoje ciągi zamieniają się w kody kreskowe.