Jak naprawić orientację kodu kreskowego w C# | IronBarcode

Jak naprawić orientację kodu kreskowego w C

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

IronBarcode automatycznie koryguje orientację kodów kreskowych za pomocą wbudowanej funkcji AutoRotate, która wykrywa i odczytuje kody kreskowe pod dowolnym kątem bez ręcznego obracania obrazu, zapewniając dokładny odczyt nawet z obrazów przechylonych lub obróconych.

Orientacja kodu kreskowego odnosi się do kąta, pod jakim kod kreskowy jest drukowany lub wyświetlany na produkcie lub dokumencie. Można go dostosować do różnych kątów, aby spełniał różne wymagania dotyczące układu i projektu. Najczęstsza orientacja to pozioma, gdzie kod kreskowy jest wyrównany od lewej do prawej, co stanowi standardowy i najbardziej rozpowszechniony format. Dowolna orientacja z kątem różnym od zera stanowi wyzwanie dla bibliotek w kwestii wykrywania i pobierania wartości. IronBarcode oferuje automatyczną korekcję orientacji do wykrywania dowolnych niezerowych orientacji dla kodów kreskowych i kodów QR.

Szybki start: Korekcja orientacji obrazu w jednej linii

Oto jak łatwo można skorygować orientację: wystarczy jedna linijka kodu z opcją AutoRotate w IronBarcode — domyślnie włączoną — aby dokładnie odczytywać kody kreskowe nawet wtedy, gdy obrazy są obrócone.

  1. Install IronBarcode with NuGet Package Manager

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

    var result = IronBarCode.BarcodeReader.Read("rotatedImage.png", new IronBarCode.BarcodeReaderOptions { AutoRotate = true });
  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 naprawić orientację kodu kreskowego w mojej aplikacji?

Aby zastosować automatyczną korektę orientacji, należy ustawić właściwość AutoRotate w BarcodeReaderOptions na wartość true. Ta właściwość jest domyślnie ustawiona na true, więc nie musisz nic robić. Odczytanie jakiegokolwiek obrazu kodu kreskowego o niezerowej orientacji powinno działać od razu.

Funkcja AutoRotate jest szczególnie przydatna podczas pracy z różnymi formatami BARCODE-ów, w tym BARCODE-ami QR, Data Matrix i tradycyjnymi BARCODE-ami liniowymi. Niezależnie od tego, czy odczytujesz kody kreskowe z obrazów, czy skanujesz z dokumentów PDF, korekcja orientacji zapewnia niezawodne wyniki.

Użyjmy poniższego obrazu jako naszego przykładu. Download the following 20° rotation and 45° rotation sample images.

Barcode rotated 20 degrees clockwise showing vertical stripes at an angle for orientation testing
Barcode rotated 45 degrees showing diagonal orientation requiring correction

Jakiego kodu potrzebuję, aby wdrożyć AutoRotate?

:path=/static-assets/barcode/content-code-examples/how-to/image-orientation-correct-autorotate.cs
using IronBarCode;
using System;

BarcodeReaderOptions myOptionsExample = new BarcodeReaderOptions()
{
    // Turn on auto rotation in ML detection
    AutoRotate = true,
};

var results = BarcodeReader.Read("rotate20.png", myOptionsExample);

// Print out the value
Console.WriteLine(results[0].Value);
Imports IronBarCode
Imports System

Private myOptionsExample As New BarcodeReaderOptions() With {.AutoRotate = True}

Private results = BarcodeReader.Read("rotate20.png", myOptionsExample)

' Print out the value
Console.WriteLine(results(0).Value)
$vbLabelText   $csharpLabel

Funkcja AutoRotate wykorzystuje zaawansowane algorytmy uczenia maszynowego do automatycznego wykrywania orientacji BARCODE. To szczególnie cenne przy pracy z wieloma kodami kreskowymi na jednym obrazie lub przy przetwarzaniu partii obrazów z różnymi orientacjami.

Praca z różnymi kątami obrotu

Korekcja orientacji IronBarcode radzi sobie bezproblemowo z różnymi kątami obrotu. Oto przykład, który pokazuje odczytywanie kodów kreskowych pod różnymi kątami obrotu:

using IronBarCode;
using System;
using System.Collections.Generic;

// Process multiple rotated images
var rotatedImages = new List<string> { "rotate20.png", "rotate45.png", "rotate90.png" };
var options = new BarcodeReaderOptions
{
    AutoRotate = true,
    // Combine with other reading optimizations
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = false
};

foreach (var imagePath in rotatedImages)
{
    var results = BarcodeReader.Read(imagePath, options);
    if (results.Length > 0)
    {
        Console.WriteLine($"Image: {imagePath} - Barcode Value: {results[0].Value}");
        Console.WriteLine($"Barcode Type: {results[0].BarcodeType}");
        Console.WriteLine($"Rotation Applied: {results[0].WasRotated}");
    }
}
using IronBarCode;
using System;
using System.Collections.Generic;

// Process multiple rotated images
var rotatedImages = new List<string> { "rotate20.png", "rotate45.png", "rotate90.png" };
var options = new BarcodeReaderOptions
{
    AutoRotate = true,
    // Combine with other reading optimizations
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = false
};

foreach (var imagePath in rotatedImages)
{
    var results = BarcodeReader.Read(imagePath, options);
    if (results.Length > 0)
    {
        Console.WriteLine($"Image: {imagePath} - Barcode Value: {results[0].Value}");
        Console.WriteLine($"Barcode Type: {results[0].BarcodeType}");
        Console.WriteLine($"Rotation Applied: {results[0].WasRotated}");
    }
}
Imports IronBarCode
Imports System
Imports System.Collections.Generic

' Process multiple rotated images
Dim rotatedImages As New List(Of String) From {"rotate20.png", "rotate45.png", "rotate90.png"}
Dim options As New BarcodeReaderOptions With {
    .AutoRotate = True,
    ' Combine with other reading optimizations
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = False
}

For Each imagePath In rotatedImages
    Dim results = BarcodeReader.Read(imagePath, options)
    If results.Length > 0 Then
        Console.WriteLine($"Image: {imagePath} - Barcode Value: {results(0).Value}")
        Console.WriteLine($"Barcode Type: {results(0).BarcodeType}")
        Console.WriteLine($"Rotation Applied: {results(0).WasRotated}")
    End If
Next
$vbLabelText   $csharpLabel

Rozważania dotyczące wydajności

Chociaż AutoRotate jest domyślnie włączone, zrozumienie jego wpływu na wydajność pomaga zoptymalizować proces odczytu BARCODE. Funkcja działa efektywnie z opcjami prędkości odczytu IronBarcode, umożliwiając równoważenie dokładności i wydajności w zależności od potrzeb Twojej aplikacji.

W przypadku aplikacji wymagających szybkiego przetwarzania można połączyć AutoRotate z innymi technikami optymalizacji:

var fastReadOptions = new BarcodeReaderOptions
{
    AutoRotate = true,
    Speed = ReadingSpeed.Faster,
    // Specify expected barcode types to improve performance
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    // Define crop region if barcode location is predictable
    CropArea = new System.Drawing.Rectangle(100, 100, 300, 300)
};
var fastReadOptions = new BarcodeReaderOptions
{
    AutoRotate = true,
    Speed = ReadingSpeed.Faster,
    // Specify expected barcode types to improve performance
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
    // Define crop region if barcode location is predictable
    CropArea = new System.Drawing.Rectangle(100, 100, 300, 300)
};
Dim fastReadOptions As New BarcodeReaderOptions With {
    .AutoRotate = True,
    .Speed = ReadingSpeed.Faster,
    ' Specify expected barcode types to improve performance
    .ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128,
    ' Define crop region if barcode location is predictable
    .CropArea = New System.Drawing.Rectangle(100, 100, 300, 300)
}
$vbLabelText   $csharpLabel

Integracja z funkcjami korekcji obrazu

AutoRotate płynnie współpracuje z filtrami korekcji obrazu IronBarcode. W przypadku słabej jakości obrazów, które są również obrócone, można zastosować wiele korekcji:

var advancedOptions = new BarcodeReaderOptions
{
    AutoRotate = true,
    // Apply additional image corrections
    ImageFilters = new ImageFilterCollection
    {
        new AdaptiveThresholdFilter(),
        new BrightnessFilter(1.2f),
        new ContrastFilter(1.5f)
    }
};

var results = BarcodeReader.Read("low-quality-rotated-barcode.jpg", advancedOptions);
var advancedOptions = new BarcodeReaderOptions
{
    AutoRotate = true,
    // Apply additional image corrections
    ImageFilters = new ImageFilterCollection
    {
        new AdaptiveThresholdFilter(),
        new BrightnessFilter(1.2f),
        new ContrastFilter(1.5f)
    }
};

var results = BarcodeReader.Read("low-quality-rotated-barcode.jpg", advancedOptions);
Imports System

Dim advancedOptions As New BarcodeReaderOptions With {
    .AutoRotate = True,
    ' Apply additional image corrections
    .ImageFilters = New ImageFilterCollection From {
        New AdaptiveThresholdFilter(),
        New BrightnessFilter(1.2F),
        New ContrastFilter(1.5F)
    }
}

Dim results = BarcodeReader.Read("low-quality-rotated-barcode.jpg", advancedOptions)
$vbLabelText   $csharpLabel

Najlepsze praktyki dotyczące korekcji orientacji

  1. Zachowanie domyślne: Ponieważ AutoRotate jest domyślnie włączone, zazwyczaj nie ma potrzeby wyraźnego ustawiania tej opcji, chyba że została wcześniej wyłączona lub chcesz się upewnić, że jest aktywna.

  2. Łączenie z obszarami przycinania: Używając obszarów przycinania w celu poprawy wydajności, upewnij się, że obszar przycinania jest wystarczająco duży, aby pomieścić obrócony kod kreskowy.

  3. Przetwarzanie wielowątkowe: AutoRotate jest bezpieczny dla wątków i dobrze współpracuje z operacjami asynchronicznymi i wielowątkowymi, dzięki czemu nadaje się do aplikacji przetwarzających duże ilości BarCode'ów.

  4. Uwagi dotyczące formatów: Chociaż AutoRotate działa ze wszystkimi obsługiwanymi formatami BARCODE, niektóre formaty, takie jak PDF417 i Data Matrix, mogą zyskać na dodatkowych opcjach specyficznych dla danego formatu.

W wielu przypadkach korekcja obrotu może nie być wystarczająca i wymagany jest filtr. Dowiedz się, jak używać filtrów obrazu w następującym artykułe: "Jak używać filtrów korekcji obrazu."

Często Zadawane Pytania

Jak naprawić obrócone obrazy BarCode w mojej aplikacji C#?

IronBarcode automatycznie koryguje obrócone obrazy kodów kreskowych za pomocą wbudowanej funkcji AutoRotate. Wystarczy ustawić AutoRotate na true w BarcodeReaderOptions (funkcja jest domyślnie włączona), a biblioteka wykryje i odczyta kody kreskowe pod dowolnym kątem bez konieczności ręcznego obracania.

Jakie orientacje BarCodes można automatycznie korygować?

Funkcja AutoRotate w IronBarcode może wykrywać i korygować wszelkie orientacje inne niż zero stopni, w tym obroty o 20°, 45°, 90°, 180° i 270°. Funkcja ta działa z różnymi formatami kodów kreskowych, w tym kodami QR, Data Matrix i tradycyjnymi kodami liniowymi.

Czy muszę pisać specjalny kod, aby obsłużyć pochylone BarCodes?

Nie jest wymagany żaden specjalny kod. Właściwość AutoRotate klasy IronBarcode jest domyślnie włączona, więc korekcja orientacji działa od razu. Wystarczy jedna linijka kodu: var result = IronBarCode.BarcodeReader.Read("rotatedImage.png");

Czy korekcja orientacji działa w przypadku dokumentów PDF?

Tak, funkcja AutoRotate w IronBarcode działa bez zarzutu podczas skanowania kodów kreskowych zarówno z dokumentów PDF, jak i obrazów. Korekcja orientacji zapewnia niezawodne wyniki niezależnie od formatu źródłowego.

Jaka technologia stoi za automatycznym wykrywaniem orientacji?

IronBarcode wykorzystuje zaawansowane algorytmy uczenia maszynowego do automatycznego wykrywania orientacji kodów kreskowych. To inteligentne podejście zapewnia dokładny odczyt kodów kreskowych nawet z przechylonych lub obróconych obrazów bez konieczności ręcznej interwencji.

Jakie są korzyści z użycia IronBarcode do operacji na kodach kreskowych?

IronBarcode oferuje korzyści takie jak łatwość integracji, wsparcie dla wielu formatów kodów kreskowych, generowanie obrazów wysokiej jakości oraz solidne możliwości odczytu, co czyni go kompleksowym narzędziem do operacji na kodach kreskowych w C#.

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.

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
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 2,240,258 | Wersja: 2026.5 just released
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.