AnyBitmap to System.Drawing.Bitmap in .NET Framework

This article was translated from English: Does it need improvement?
Translated
View the article in English

Em um aplicativo de desktop .NET Framework, como WinForms, atribuir um AnyBitmap do IronBarcode diretamente a um System.Drawing.Image ou Bitmap falha em tempo de compilação. Um caso comum é vincular um código de barras gerado a um PictureBox, que só aceita objetos System.Drawing.Image.

Cannot implicitly convert type 'IronSoftware.Drawing.AnyBitmap' to 'System.Drawing.Image'

O código abaixo aciona o erro:

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()
$vbLabelText   $csharpLabel

Ambos BarcodeWriter.Image e .ToBitmap() retornam um IronSoftware.Drawing.AnyBitmap. Esse tipo suporta conversão implícita para System.Drawing.Bitmap ou Image, mas somente no .NET 6, .NET 7, .NET 8 ou superior. Em .NET Framework, os operadores implícitos e a ponte de tipos internos nem sempre são resolvidos, especialmente quando os tipos vêm de bibliotecas diferentes ou camadas de compatibilidade.

Solução

Option 1: Install System.Drawing.Common

Adicione o pacote NuGet System.Drawing.Common para que os operadores de conversão sejam resolvidos contra um assembly de desenho consistente.

.NET CLI:

dotnet add package System.Drawing.Common
dotnet add package System.Drawing.Common
SHELL

Console do Gerenciador de Pacotes:

Install-Package System.Drawing.Common
Install-Package System.Drawing.Common
SHELL

.csproj no estilo SDK:

<PackageReference Include="System.Drawing.Common" Version="8.0.0" />
<PackageReference Include="System.Drawing.Common" Version="8.0.0" />
XML

Opção 2: Converter Através de um Fluxo

Quando você preferir não alterar referências de pacotes, converta o bitmap através de um fluxo compatível com GDI e entregue o resultado para 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
$vbLabelText   $csharpLabel

ToWindowsBitmapStream() escreve o AnyBitmap em um formato de imagem compatível com GDI, e Image.FromStream analisa esse fluxo em um System.Drawing.Image nativo.

ObserveVocê também pode serializar o AnyBitmap com ToStream() se precisar de um fluxo genérico em vez de um específico do Windows.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Pronto para começar?
Nuget Downloads 2,317,217 | Versão: 2026.7 recém-lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package BarCode
executar um exemplo Veja seu fio se transformar em um código de barras.