AnyBitmap to System.Drawing.Bitmap in .NET Framework
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();
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
Konsola Zarządzania Pakietami:
Install-Package System.Drawing.Common
SDK-style .csproj:
<PackageReference Include="System.Drawing.Common" Version="8.0.0" />
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
}
ToWindowsBitmapStream() zapisuje AnyBitmap do formatu obrazu kompatybilnego z GDI, a Image.FromStream analizuje ten strumien do natywnego System.Drawing.Image.

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ęczników.