AnyBitmap to System.Drawing.Bitmap in .NET Framework
In einer .NET Framework-Desktop-App wie WinForms schlägt das direkte Zuweisen eines IronBarcode AnyBitmap an einen System.Drawing.Image oder Bitmap zur Kompilierzeit fehl. Ein häufiger Fall ist das Binden eines generierten Barcodes an ein PictureBox, das nur System.Drawing.Image-Objekte akzeptiert.
Cannot implicitly convert type 'IronSoftware.Drawing.AnyBitmap' to 'System.Drawing.Image'
Der folgende Code löst den Fehler aus:
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()
Sowohl BarcodeWriter.Image als auch .ToBitmap() geben ein IronSoftware.Drawing.AnyBitmap zurück. Dieser Typ unterstützt die implizite Konvertierung zu System.Drawing.Bitmap oder Image, aber nur auf .NET 6, .NET 7, .NET 8 oder höher. Im .NET Framework lösen sich die impliziten Operatoren und internen Typüberbrückungen nicht immer auf, insbesondere wenn die Typen aus verschiedenen Bibliotheken oder Kompatibilitätsschichten kommen.
Lösung
Option 1: Install System.Drawing.Common
Fügen Sie das System.Drawing.Common NuGet-Paket hinzu, sodass die Konvertierungsoperatoren gegen eine konsistente Zeichnungsassembly aufgelöst werden.
.NET CLI:
dotnet add package System.Drawing.Common
dotnet add package System.Drawing.Common
Package Manager Console:
Install-Package System.Drawing.Common
Install-Package System.Drawing.Common
SDK-Stil .csproj:
<PackageReference Include="System.Drawing.Common" Version="8.0.0" />
<PackageReference Include="System.Drawing.Common" Version="8.0.0" />
Option 2: Über einen Stream umwandeln
Wenn Sie die Paketreferenzen lieber nicht ändern möchten, konvertieren Sie das Bitmap über einen GDI-kompatiblen Stream und übergeben Sie das Ergebnis an die PictureBox:
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() schreibt das AnyBitmap in ein GDI-kompatibles Bildformat, und Image.FromStream analysiert diesen Stream in ein natives System.Drawing.Image.

