How to Read Barcodes From System.Drawing in C
IronBarcode, tüm işletim sistemlerinde barkodları System.Drawing nesnelerinden okuyarak, bu nesneleri AnyBitmap'e dönüştürür ve IronDrawing üzerinden Microsoft'un sadece Windows sınırlı System.Drawing desteği sorununu çözer.
Giriş
System.Drawing nesneleri, .NET'te görüntü işleme görevleri için yaygın olarak kullanılır. Ancak, MacOS ve Linux için System.Drawing desteğini kesen Microsoft, artık yalnızca Windows için destek veriyor. Bu değişiklik, genellikle grafikler, görüntüler ve fontlar içeren barkodlarla çalışmayı içerdiğinden, IronBarcode'u Windows dışı işletim sistemlerinde kullanan geliştiriciler için sorunlar yaratmıştır.
Bu sorunu çözmek için IronDrawing'i tanıttık. Bu ücretsiz ve açık kaynaklı kütüphane, IronSoftware tarafından oluşturulmuş, çapraz platform desteğini kolaylaştırır ve sorunsuz bir deneyim sunar. NuGet'ten IronBarcode yüklediğinizde, IronDrawing projenize otomatik olarak dahil edilir.
Barkod okuma alanında yeni olan geliştiriciler için temel kavramları ve temel kullanım modellerini kapsayan kapsamlı Barkod Okuma Eğitimimize bakın. Çeşitli görüntü formatlarıyla çalışıyorsanız, görüntülerden barkod okumak için rehberimiz, ek bağlam ve örnekler sağlar.
Hızlı Başlangıç: AnyBitmap ile barkodları tek kolay adımda okuyun
Bu kod parçası, IronBarcode'un bir System.Drawing.Bitmap yaratarak barkodları nasıl okuduğunu ve IronDrawing'in bunu AnyBitmap olarak dolaylı şekilde nasıl geçirdiğini gösterir. Sadece bir satırla, herhangi bir OS'deki geliştiriciler hızlı sonuçlar alır.
-
NuGet Paket Yöneticisi ile https://www.nuget.org/packages/BarCode yükleyin
PM > Install-Package BarCode -
Bu kod parçasını kopyalayıp çalıştırın.
var results = IronBarCode.BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png"))); -
Canlı ortamınızda test etmek için dağıtın
Bugün projenizde IronBarcode kullanmaya başlayın ücretsiz deneme ile
Minimal Is Akisi (5 adimda)
- Bar kodları
System.Drawingden okumak için C# kütüphanesini indirin - Utilize `IronDrawing` to cast `System.Drawing` objects into `AnyBitmap`
- Use the
Readmethod to read barcodes from `AnyBitmap` objects - Konsolda algılanan barkod değerlerini gösterin
- Explore another article to learn how `IronDrawing` is used for handling color and fonts
System.Drawing Nesneleri AnyBitmap'ye Nasıl Dönüştürürüm?
System.Drawing üzerinden barkod okumak, nesneyi AnyBitmap'ye dönüştürmeyi gerektirir. IronDrawing, kullanım kolaylığı için tasarlandı ve System.Drawing'den IronSoftware.Drawing adlı görüntü nesnelerine implicit geçişi destekler.
System.Drawing nesnelerinin ötesinde, diğer türlerden dönüştürmeyi destekliyoruz:
System.Drawing.BitmapSystem.Drawing.ImageSkiaSharp.SKBitmapSkiaSharp.SKImageSixLabors.ImageSharp
Yukarıdaki nesneleri dökmek için bu kod örneğine bakın. Aşağıda, System.Drawing nesnelerinden IronSoftware.Drawing.AnyBitmap'e barkod görüntülerini dönüştürme gösterilmiştir:
Hangi System.Drawing Türleri Dönüştürülebilir?
: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)
Bu kod, System.Drawing nesneleri ile IronBarcode arasında sorunsuz entegrasyonu IronDrawing aracılığıyla gösterir. Bu uyumluluk, QR kodları, Code 128, Code 39 ve daha birçokları dahil olmak üzere çeşitli barkod formatlarını kapsar, ayrıntılı bilgi için desteklenen barkod formatları kılavuzumuza bakın.
Neden Dolaylı Döküm Çalışıyor?
Yukarıdaki kodda, iki barkod görüntüsünü System.Drawing.Bitmap ve System.Drawing.Image olarak yükledik. Daha sonra onları dolaylı yoldan AnyBitmap içine atadık ve ardından bu nesneleri bir AnyBitmap listesine ekledik.
IronDrawing'in implicit geçiş mekanizması, System.Drawing türleri ve AnyBitmap arasında şeffaf dönüştürme sağlayan operatör aşırı yüklemesi kullanır. Bu tasarım deseni, geliştiricilerin mevcut kodlarını korurken çapraz platform uyumluluğu elde etmelerini sağlar. Dönüşüm, çözünürlük, renk derinliği ve piksel verileri dahil olmak üzere tüm görüntü özelliklerini koruyarak, kalite kaybı olmamasını sağlar.
Açık ve Dolaylı Döküm Ne Zaman Kullanılır?
Dolaylı döküm kolaylık sağlarken, bazı senaryolarda açık döküm tercih edilebilir:
// 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
Yaygın Döküm Hataları Nelerdir?
System.Drawing'i AnyBitmap'e dönüştürürken, geliştiriciler şu sorunlarla karşılaşabilir:
- Null Referans Hataları:
System.Drawingnesnenizin dönüştürmeden önce null olmadığını kontrol edin - Desteklenmeyen Format Hataları: Bazı egzotik görüntü formatları ön dönüştürme gerektirir
- Bellek Sorunları: Büyük görüntüler uygun bertaraf desenleri gerektirir
Döküm sorunlarını giderme konusunda, sorun giderme kılavuzumuz, barkod tanıma sırasında karşılaşılan yaygın sorunlara çözümler sunar.
AnyBitmap Nesnelerinden Barkodları Nasıl Okurum?
IronBarcode, tüm yöntemlerinde herhangi bir ek yapılandırma olmadan IronSoftware.Drawing.AnyBitmap nesnelerini kabul eder. Bu, Windows dışındaki işletim sistemlerinde System.Drawing nesneleri kullanırken geliştirmeyi kolaylaştırır. Aşağıdaki kod bunu gösteriyor:
AnyBitmap Parametreleri Kabul Eden Yöntemler Neler?
: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
Temel Read yöntemi dışında, IronBarcode AnyBitmap parametrelerini kabul eden birkaç yöntem daha sağlar. Gelişmiş senaryolar için, tek bir görüntüde birden fazla barkodun verimli bir şekilde işlenmesini gösteren birden fazla barkod okuma rehberimize bakın:
// Advanced barcode reading with options
var readerOptions = new BarcodeReaderOptions
{
// Specify barcode types to search for
ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
// Enable machine learning for better accuracy
UseML = true,
// Set confidence threshold
Confidence = 0.95
};
// Read with specific options
var advancedResults = BarcodeReader.Read(anyBitmap, readerOptions);
// Advanced barcode reading with options
var readerOptions = new BarcodeReaderOptions
{
// Specify barcode types to search for
ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128,
// Enable machine learning for better accuracy
UseML = true,
// Set confidence threshold
Confidence = 0.95
};
// Read with specific options
var advancedResults = BarcodeReader.Read(anyBitmap, readerOptions);
' Advanced barcode reading with options
Dim readerOptions As New BarcodeReaderOptions With {
' Specify barcode types to search for
.ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128,
' Enable machine learning for better accuracy
.UseML = True,
' Set confidence threshold
.Confidence = 0.95
}
' Read with specific options
Dim advancedResults = BarcodeReader.Read(anyBitmap, readerOptions)
Birden Çok Barkod Sonucu Nasıl Yönetilir?
Yukarıdaki kod, önceki örneği genişletir. AnyBitmap listesini doldurduktan sonra, her AnyBitmap nesnesi için Read yöntemini çağırarak listeyi yineledik ve bu IronBarCode.BarcodeResults döndürdü. Daha sonra sonuçlar üzerinden döngü yaparak barkod değerlerini konsola yazdırdık.
Birden fazla barkod ile uğraşırken, daha iyi performans için paralel işlemeyi kullanın:
// 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}");
}
// 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 = New ConcurrentBag(Of BarcodeResult)()
Parallel.ForEach(barcodeFiles, Sub(file)
Dim bitmap = New Bitmap(file)
Dim 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
Başka Hangi IronDrawing Özelliklerini Kullanabilirim?
IronSoftware.Drawing işlevi, görüntülerin dönüştürülmesi dışında da uzanır. Görüntü işleme yönleriyle ilgilenir; renkler ve yazı tipleri gibi, barkodlar ve QR kodlarının stilini oluşturmada faydalıdır. QR kodlarına logolar eklemeyi ve logoları özelleştirmeyi nasıl kullandığımızı inceleyin.
IronDrawing, barkod işleme işlemini tamamlayıcı güçlü görüntü manipülasyon kabiliyetleri sağlar:
// 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);
// 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)
Belirli görüntü düzeltmeleri gerektiren senaryolar için, görüntü düzeltme kılavuzumuz barkod okunabilirliğini artırmak için filtrelerin nasıl kullanılacağını detaylandırır.
Neden IronDrawing'yi System.Drawing'e Tercih Etmeli?
IronDrawing, System.Drawing karşısında cazip avantajlar sunar:
- Çapraz Platform Desteği: Windows, Linux ve macOS'ta sorunsuz çalışır - Google
System.Drawing(bekleyen Windows sınırlaması ile .NET Core/5+ ile sınırlı) - Modern Mimari: Daha iyi performans ve bellek yönetimi için
SkiaSharpveImageSharpüzerine inşa edilmiştir. - Basitleştirilmiş API: Microsoft benzeri arayüzleri korurken güncel kullanışlılıklar ekler
- Aktif Geliştirme:
System.Drawinggibi bakım modundaki ürünlerin aksine düzenli güncellemeler ve geliştirmeler - Daha İyi Entegrasyon: Iron Software ürünleri ile optimum performans için özel olarak tasarlandı
Yerleştirme değerlendirmeleri için, özellikle bulut ortamları için, IronDrawing kullanarak çapraz platform uyumluluğu hakkında özel notlar içeren Azure'a yerleştirme ve AWS'ye yerleştirme kılavuzlarımıza bakın.
İster masaüstü uygulamaları, ister web hizmetleri, ister bulut bazlı çözümler geliştiriyor olun, IronDrawing barkod işlemesi kodunuzun tüm platformlarda taşınabilir ve verimli kalmasını sağlar ve modern .NET geliştirmesi için ideal bir seçim yapar.
Sıkça Sorulan Sorular
System.Drawing nesnelerinden Windows dışındaki platformlarda barkodları nasıl okuyabilirim?
IronDrawing aracılığıyla IronBarcode, System.Drawing nesnelerinden çapraz platform barkod okuma işlemlerini otomatik olarak yönetir ve bunları AnyBitmap formatına dönüştürür. Bu, Microsoft'un System.Drawing'in yalnızca Windows olması sınırlamasını ortadan kaldırır ve MacOS ve Linux sistemlerinde sorunsuz barkod okuma yapmanızı sağlar.
IronDrawing nedir ve barkod okuma ile neden dahil edilmiştir?
IronDrawing, grafik işlemleri için çapraz platform desteği sağlayan Iron Software tarafından oluşturulan ücretsiz, açık kaynaklı bir kütüphanedir. IronBarcode'u NuGet'ten yüklediğinizde otomatik olarak dahil edilir ve System.Drawing nesnelerinden tüm işletim sistemlerinde AnyBitmap formatına dönüştürerek barkod okumasını etkinleştirir.
System.Drawing.Bitmap'ı okuyarak barkodları okumak için nasıl dönüştürürüm?
System.Drawing.Bitmap'tan barkodları AnyBitmap'e basit bir dönüşümle okuyabilirsiniz: `var results = BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png")));`. IronBarcode bu dönüşümü IronDrawing'in örtük dönüştürme özelliği ile otomatik olarak işler.
System.Drawing kullanarak Linux ve MacOS'ta barkodları okuyabilir miyim?
Evet, IronBarcode, System.Drawing nesnelerinden Linux ve MacOS'ta barkod okumayı IronDrawing aracılığıyla etkinleştirir; bu, System.Drawing nesnelerini çapraz platform AnyBitmap formatına otomatik olarak dönüştürür. Bu, Microsoft'un System.Drawing desteğinin yalnızca Windows ile sınırlı olma sınırlamasını aşar.
Barkod okuma için hangi tür System.Drawing nesneleri kullanılabilir?
IronBarcode, System.Drawing.Bitmap ve diğer görüntü türleri dahil olmak üzere çeşitli System.Drawing nesnelerinden barkod okumayı destekler. Bunlar IronDrawing'in örtük dönüştürme özelliği aracılığıyla otomatik olarak AnyBitmap'e dönüştürülür ve çapraz platform barkod tarama işlevselliği sağlar.
System.Drawing'dan barkod okumak için basit bir satırlık çözüm var mı?
Evet, IronBarcode bir satırlık bir çözüm sunar: `var results = BarcodeReader.Read((AnyBitmap)(new System.Drawing.Bitmap("yourImage.png")));`. Bu tek satır, bir System.Drawing.Bitmap yaratır, IronDrawing aracılığıyla AnyBitmap'e dönüştürür ve görüntüde bulunan tüm barkodları okur.

