.NET Framework'te AnyBitmap to System.Drawing.Bitmap
.NET Framework masaüstü uygulamalarında WinForms gibi, bir IronBarcode AnyBitmap doğrudan bir System.Drawing.Image veya Bitmap atamak derleme zamanında başarısız olur. Yaygın bir durum, oluşturulan bir barkodu yalnızca System.Drawing.Image nesnelerini kabul eden bir PictureBox'a bağlamaktır.
Cannot implicitly convert type 'IronSoftware.Drawing.AnyBitmap' to 'System.Drawing.Image'
Aşağıdaki kod hata tetikler:
var myBarcode = BarcodeWriter.CreateBarcode("12345", BarcodeWriterEncoding.EAN8);
// These lines cause compile-time errors
Image myBarcodeImage = myBarcode.Image;
Bitmap myBarcodeBitmap = myBarcode.ToBitmap();
var myBarcode = BarcodeWriter.CreateBarcode("12345", BarcodeWriterEncoding.EAN8);
// These lines cause compile-time errors
Image myBarcodeImage = myBarcode.Image;
Bitmap myBarcodeBitmap = myBarcode.ToBitmap();
Dim myBarcode = BarcodeWriter.CreateBarcode("12345", BarcodeWriterEncoding.EAN8)
' These lines cause compile-time errors
Dim myBarcodeImage As Image = myBarcode.Image
Dim myBarcodeBitmap As Bitmap = myBarcode.ToBitmap()
Hem BarcodeWriter.Image hem de .ToBitmap() bir IronSoftware.Drawing.AnyBitmap döndürür. Bu tür, yalnızca .NET 6, .NET 7, .NET 8 veya üzeri sürümlerde System.Drawing.Bitmap veya Image'e örtük dönüştürmeyi destekler. .NET Framework'te örtük operatörler ve dahili tür köprüleme her zaman çözülmez, özellikle türler farklı kütüphanelerden veya uyumluluk katmanlarından geldiğinde.
Çözüm
Seçenek 1: System.Drawing.Common Yükleyin
Dönüşüm operatörlerinin tutarlı bir çizim derlemesi karşısında çözülmesi için System.Drawing.Common NuGet paketini ekleyin.
.NET CLI:
dotnet add package System.Drawing.Common
dotnet add package System.Drawing.Common
Paket Yöneticisi Konsolu:
Install-Package System.Drawing.Common
Install-Package System.Drawing.Common
SDK tarzı .csproj:
<PackageReference Include="System.Drawing.Common" Version="8.0.0" />
<PackageReference Include="System.Drawing.Common" Version="8.0.0" />
Seçenek 2: Bir Akışla Dönüştürme
Paket referanslarını değiştirmek istemediğinizde, bit eşlemeyi GDI uyumlu bir akış üzerinden dönüştürün ve sonucu PictureBox'a verin:
var myBarcode = BarcodeWriter.CreateBarcode("12345", BarcodeWriterEncoding.EAN8);
myBarcode.ResizeTo(400, 100); // Optional resizing
using (var ms = myBarcode.ToWindowsBitmapStream())
{
pictureBox1.Image = Image.FromStream(ms); // Works in .NET Framework
}
var myBarcode = BarcodeWriter.CreateBarcode("12345", BarcodeWriterEncoding.EAN8);
myBarcode.ResizeTo(400, 100); // Optional resizing
using (var ms = myBarcode.ToWindowsBitmapStream())
{
pictureBox1.Image = Image.FromStream(ms); // Works in .NET Framework
}
Dim myBarcode = BarcodeWriter.CreateBarcode("12345", BarcodeWriterEncoding.EAN8)
myBarcode.ResizeTo(400, 100) ' Optional resizing
Using ms = myBarcode.ToWindowsBitmapStream()
pictureBox1.Image = Image.FromStream(ms) ' Works in .NET Framework
End Using
ToWindowsBitmapStream(), AnyBitmap'yı GDI uyumlu bir görüntü formatına yazar ve Image.FromStream bu akışı yerel bir System.Drawing.Image'e çözümler.

