AnyBitmap to System.Drawing.Bitmap in .NET Framework
Dans une application de bureau .NET Framework telle que WinForms, l'affectation d'un IronBarcode AnyBitmap directement à un System.Drawing.Image ou Bitmap échoue à la compilation. Un cas courant est la liaison d'un code-barres généré à un PictureBox, qui n'accepte que des objets System.Drawing.Image.
Cannot implicitly convert type 'IronSoftware.Drawing.AnyBitmap' to 'System.Drawing.Image'
Le code ci-dessous génère l'erreur :
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()
Les deux BarcodeWriter.Image et .ToBitmap() renvoient un IronSoftware.Drawing.AnyBitmap. Ce type prend en charge la conversion implicite vers System.Drawing.Bitmap ou Image, mais uniquement sur .NET 6, .NET 7, .NET 8, ou supérieur. Sur .NET Framework, les opérateurs implicites et le pontage de type interne ne se résolvent pas toujours, surtout lorsque les types proviennent de différentes bibliothèques ou couches de compatibilité.
Solution
Option 1: Install System.Drawing.Common
Ajoutez le package NuGet System.Drawing.Common pour que les opérateurs de conversion se résolvent sur un assemblage de dessin cohérent.
.NET CLI :
dotnet add package System.Drawing.Common
dotnet add package System.Drawing.Common
Console du Package Manager :
Install-Package System.Drawing.Common
Install-Package System.Drawing.Common
SDK-style .csproj:
<PackageReference Include="System.Drawing.Common" Version="8.0.0" />
<PackageReference Include="System.Drawing.Common" Version="8.0.0" />
Option 2 : Convertir via un flux
Lorsque vous préférez ne pas modifier les références de package, convertissez le bitmap via un flux compatible GDI et remettez le résultat à l'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() écrit le AnyBitmap dans un format d'image compatible GDI, et Image.FromStream analyse ce flux dans un System.Drawing.Image natif.

