在 .NET Framework 中將 AnyBitmap 轉換為 System.Drawing.Bitmap
在 .NET Framework 桌上型應用程式如 WinForms 中,直接將 IronBarcode AnyBitmap 指派給 System.Drawing.Image 或 Bitmap 會在編譯時失敗。常見的情況是將生成的條碼綁定到 PictureBox,而該物件只接受 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。

