在.NET Framework中将AnyBitmap转换为System.Drawing.Bitmap
在.NET Framework桌面应用程序中,如WinForms,直接将IronBarcode AnyBitmap 赋值给System.Drawing.Image 或Bitmap 会在编译时失败。一个常见的情况是将生成的条形码绑定到System.Drawing.Image 对象。
Cannot implicitly convert type 'IronSoftware.Drawing.AnyBitmap' to 'System.Drawing.Image'
下面的代码会触发错误:
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()
BarcodeWriter.Image 和.ToBitmap() 都返回一个IronSoftware.Drawing.AnyBitmap。 该类型确实支持隐式转换为System.Drawing.Bitmap 或Image,但仅在.NET 6、.NET 7、.NET 8或更高版本中支持。 在.NET Framework中,隐式操作符和内部类型桥接并不总是解决,尤其当类型来自不同的库或兼容性层时。
解决方案
选项1:安装System.Drawing.Common
添加System.Drawing.Common NuGet包,以便转换操作符可以在一致的绘图程序集上解析。
.NET CLI:
dotnet add package System.Drawing.Common
dotnet add package System.Drawing.Common
包管理器控制台:
Install-Package System.Drawing.Common
Install-Package System.Drawing.Common
SDK风格的.csproj:
<PackageReference Include="System.Drawing.Common" Version="8.0.0" />
<PackageReference Include="System.Drawing.Common" Version="8.0.0" />
选项2:通过流转换
当您不想更改包引用时,通过一个与GDI兼容的流转换位图,并将结果传递给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() 将AnyBitmap 写入GDI兼容的图像格式,Image.FromStream 将该流解析为本机System.Drawing.Image。

