AnyBitmap to System.Drawing.Bitmap in .NET Framework

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

W aplikacji desktopowej .NET Framework, takiej jak WinForms, przypisywanie IronBarcode AnyBitmap bezposrednio do System.Drawing.Image lub Bitmap nie powodzi sie podczas kompilacji. Czestym przypadkiem jest wiazanie wygenerowanego kodu kreskowego do PictureBox, ktory akceptuje tylko obiekty System.Drawing.Image.

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

Kod poniżej wywołuje błąd:

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

Zarowno BarcodeWriter.Image jak i .ToBitmap() zwracaja IronSoftware.Drawing.AnyBitmap. Ten typ wspiera konwersje niejawna do System.Drawing.Bitmap lub Image, ale tylko w .NET 6, .NET 7, .NET 8 lub wyzszych. Na .NET Framework operatory pośrednie i wewnętrzne mostki typów nie zawsze rozwiązują się, zwłaszcza gdy typy pochodzą z różnych bibliotek lub warstw zgodności.

Rozwiązanie

Option 1: Install System.Drawing.Common

Dodaj pakiet NuGet System.Drawing.Common, aby operatory konwersji rozwiazywaly sie do spójnej biblioteki rysunkowej.

.NET CLI:

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

Konsola Zarządzania Pakietami:

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

SDK-style .csproj:

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

Opcja 2: Konwersja przez strumień

Jesli nie chcesz zmieniac referencji pakietow, konwertuj bitmape za pomoca strumienia kompatybilnego z GDI i przekaz wynik do 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() zapisuje AnyBitmap do formatu obrazu kompatybilnego z GDI, a Image.FromStream analizuje ten strumien do natywnego System.Drawing.Image.

Zwróć uwagęMożesz również serializować AnyBitmap za pomocą ToStream(), jeśli potrzebujesz ogólnego strumienia, a nie specyficznego dla Windows.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 2,317,217 | Wersja: 2026.7 właśnie wydany
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package BarCode
uruchom przykład zobacz, jak twoje ciągi zamieniają się w kody kreskowe.