C# Bitmap-Bibliothek, um System.Drawing.Common
in .NET zu ersetzen
IronDrawing ist kostenlos, quelloffen und unterstützt die meisten .NET-Zeichenbibliotheksformate
IronDrawing ist eine Open-Source-Bibliothek, die ursprünglich von Iron Software entwickelt wurde, um C#-Softwareentwicklern dabei zu helfen, System.Drawing.Common
in .NET-Projekten auf Windows-, macOS- und Linux-Plattformen zu ersetzen.
Die Entwicklung von Klassenbibliotheken und NuGet-Paketen für .NET 5, 6, 7 und 8, die Grafiken, Bilder und Schriftarten unterstützen, sollte einfach sein.
IronDrawing fungiert als nahtlose Brücke zwischen allen neuen vorgeschlagenen .NET 5, 6, 7 & 8 Grafikstandards, während sie sich entwickeln - sodass Sie nur für den einen entwickeln müssen, den Sie bevorzugen.

Technische Schritte zur Vermeidung von system.drawing.common wird auf dieser Plattform nicht unterstützt Ausnahme
- Implement System.drawing.common is not possible for .NET6 and .NET 7 & 8 on Linux and MacOs platform
- Die Verwendung von System.Drawing.Common auf diesen Plattformen führt zu einer Ausnahmemeldung
- Setzen Sie die Laufzeitkonfiguration System.Drawing.EnableUnixSupport auf true für .NET6
- Support for System.Drawing.Common is no longer available in .NET 7 & 8
- Verwenden Sie die Open-Source-Bibliothek IronSoftware.Drawing, um System.Drawing.Common für .NET7 zu ersetzen.
Kontext
Microsoft .NET ist ein plattformübergreifendes, hochkompatibles Software-Framework, das von Millionen von Software-Entwicklern auf der ganzen Welt genutzt wird. Microsoft hat angekündigt, dass es eine einschneidende Änderung geben wird, bei der System.Drawing.Common
nur noch auf Windows-Plattformen unterstützt wird.
Dies ist problematisch für .NET-Bibliotheksentwickler, die plattformübergreifende Bibliotheken pflegen, die System.Drawing.Common
verwenden, da die empfohlene Vorgehensweise von Microsoft erfordert, dass Sie Ihre Bibliothek neu erstellen, um Nicht-Windows-Benutzer zu unterstützen. Von Freiwilligen und Akademikern wird erwartet, dass sie jedes einzelne NuGet-Paket und jede Klassenbibliothek neu aufbauen, um sie mit den neuen vorgeschlagenen Grafikbibliotheken zu nutzen, sobald sie erscheinen, was eine technische Schuld verursacht, die die Einführung von modernem .NET verlangsamen wird.
Wenn wir .NET verwenden, verwenden wir letztlich NuGet.
die Entwickler der NuGet-Pakete tun uns allen einen Gefallen, indem sie .NET und vorgefertigten Code vorantreiben, für den wir selbst jeden Tag Tausende von Stunden benötigen würden
Diese breaking change wird die NuGet-Entwicklung verlangsamen und könnte zu verlassenen oder veralteten Code-Bibliotheken führen, auf die sich .NET-Entwickler verlassen. Wir müssen jetzt handeln!
Unsere Lösung
Ein zwischengeschaltetes Grafikformat, das zwischen allen alten und neuen Grafikbibliotheken konvertiert.
Als Entwickler einer Klassenbibliothek können Ihre öffentlichen Bitmap
-, Color
-, Rectangle
-, Font
- und Size
-Eingaben und -Ausgaben nur von einem Typ sein, der alle neuen Standards unterstützt. Intern können Sie weiterhin machen, was Sie wollen.
IronDrawing ist abwärtskompatibel mit dem .NET Framework 4.62 und unterstützt alle Versionen von .NET (einschließlich .NET 8).
Die Entwicklung und Veröffentlichung von IronDrawing löst dieses Problem, indem es eine Open-Source-Lösung für das Fehlen eines einheitlichen Formats für wichtige Klassen wie Bitmap
, Color
, Rectangle
, Font
und Size
bereitstellt. IronSoftware.Drawing
wird nahtlos zwischen den Implementierungen dieser Typen in System.Drawing
, Microsoft.Maui
, SkiaSharp
und SixLabors
für Sie konvertieren. Dadurch müssen Sie als Entwickler nicht alle Instanzen dieser Klassen in Ihrer Bibliothek ersetzen.
Zum Beispiel, wenn Sie System.Drawing.Bitmap
verwenden, können Sie die AnyBitmap
-Klasse von IronDrawing nutzen, die implizite Konvertierungen zu jedem dieser Typen bietet: System.Drawing.Bitmap
, System.Drawing.Image
, SkiaSharp.SKBitmap
, SkiaSharp.SKImage
, SixLabors.ImageSharp
, Microsoft.Maui.Graphics.Platform.PlatformImage
.
Warum machen wir das umsonst?
Wir haben IronDrawing entwickelt, weil wir bei Iron Software langjährige erfahrene .NET-Entwickler sind, die sich um die Entwicklung von .NET kümmern und wollen, dass es wächst und erfolgreich ist. Wir freuen uns, dass .NET wächst und sich weiterentwickelt, wie man an .NET 7\ sehen kann. Wir verwenden NuGet den ganzen Tag, und ich bin sicher, Sie tun das auch. Wir unterstützen und hoffen, einen einfachen Übergang in die Zukunft und weg von System.Drawing
zu fördern.
Wir möchten, dass die Entwicklung von .NET-Klassenbibliotheken und NuGet einfacher wird, damit das NuGet-Ökosystem weiter gedeiht und alle .NET-Entwickler davon profitieren.
Funktionen von IronSoftware.Drawing
AnyBitmap
: Eine universell kompatible Bitmap-Klasse. Implizite Umwandlung zwischenIronSoftware.Drawing.AnyBitmap
und den folgenden unterstützten:System.Drawing.Bitmap
System.Drawing.Image
SkiaSharp.SKBitmap
SkiaSharp.SKImage
- SixLabors.ImageSharp
Microsoft.Maui.Graphics.Platform.PlatformImage
Farbe: Eine universell kompatible Farbklasse. Implizites Casting zwischen
IronSoftware.Drawing.Color
und den folgenden unterstützten:System.Drawing.Color
SkiaSharp.SKColor
- SixLabors.ImageSharp.Color
SixLabors.ImageSharp.PixelFormats
Rectangle
: Eine universell kompatible Rectangle-Klasse. Implizite Konvertierung zwischenIronSoftware.Drawing.Rectangle
und den folgenden unterstützten:System.Drawing.Rectangle
SkiaSharp.SKRect
SkiaSharp.SKRectI
SixLabors.ImageSharp.Rectangle
Schriftart: Eine universell kompatible Schriftartklasse. Implizite Umwandlung zwischen
IronSoftware.Drawing.Font
und den folgenden Unterstützten:System.Drawing.Font
SkiaSharp.SKFont
SixLabors.Fonts.Font
Kompatibilität
IronSoftware.Drawing
ist plattformübergreifend kompatibel mit:
- .NET 8, .NET 7, .NET 6, .NET 5, .NET Core, .NET Standard und .NET Framework 4.62+
- Windows, macOS, Linux, Docker, Azure und AWS
Einrichtung
Die Installation des IronDrawing (IronSoftware.Drawing
) NuGet-Pakets ist schnell und einfach. Bitte installieren Sie das Paket wie folgt:
Install-Package IronSoftware.System.Drawing
Alternativ können Sie direkt von der offiziellen NuGet-Website herunterladen.
Sobald es installiert ist, können Sie loslegen, indem Sie using IronSoftware.Drawing;
oben in Ihren C#-Code einfügen.
Code-Beispiele
AnyBitmap Beispiel
:path=/static-assets/drawing/content-code-examples/get-started/anybitmap.cs
using IronSoftware.Drawing;
// Create a new AnyBitmap object
var bitmap = AnyBitmap.FromFile("FILE_PATH");
bitmap.SaveAs("result.jpg");
var bytes = bitmap.ExportBytes();
var resultExport = new System.IO.MemoryStream();
bitmap.ExportStream(resultExport, AnyBitmap.ImageFormat.Jpeg, 100);
// Casting between System.Drawing.Bitmap and IronSoftware.Drawing.AnyBitmap
System.Drawing.Bitmap image = new System.Drawing.Bitmap("FILE_PATH");
IronSoftware.Drawing.AnyBitmap anyBitmap = image;
anyBitmap.SaveAs("result-from-casting.png");
Imports IronSoftware.Drawing
' Create a new AnyBitmap object
Private bitmap = AnyBitmap.FromFile("FILE_PATH")
bitmap.SaveAs("result.jpg")
Dim bytes = bitmap.ExportBytes()
Dim resultExport = New System.IO.MemoryStream()
bitmap.ExportStream(resultExport, AnyBitmap.ImageFormat.Jpeg, 100)
' Casting between System.Drawing.Bitmap and IronSoftware.Drawing.AnyBitmap
Dim image As New System.Drawing.Bitmap("FILE_PATH")
Dim anyBitmap As IronSoftware.Drawing.AnyBitmap = image
anyBitmap.SaveAs("result-from-casting.png")
Farbe Beispiel
:path=/static-assets/drawing/content-code-examples/get-started/color.cs
using IronSoftware.Drawing;
// Create a new Color object
Color fromHex = new Color("#191919");
Color fromRgb = new Color(255, 255, 0);
Color fromEnum = Color.Crimson;
// Casting between System.Drawing.Color and IronSoftware.Drawing.Color
System.Drawing.Color drawingColor = System.Drawing.Color.Red;
IronSoftware.Drawing.Color ironColor = drawingColor;
ironColor.A;
ironColor.R;
ironColor.G;
ironColor.B;
// Luminance is a value from 0 (black) to 100 (white) where 50 is the perceptual "middle grey"
IronDrawingColor.GetLuminance();
Imports IronSoftware.Drawing
' Create a new Color object
Private fromHex As New Color("#191919")
Private fromRgb As New Color(255, 255, 0)
Private fromEnum As Color = Color.Crimson
' Casting between System.Drawing.Color and IronSoftware.Drawing.Color
Private drawingColor As System.Drawing.Color = System.Drawing.Color.Red
Private ironColor As IronSoftware.Drawing.Color = drawingColor
ironColor.A
ironColor.R
ironColor.G
ironColor.B
' Luminance is a value from 0 (black) to 100 (white) where 50 is the perceptual "middle grey"
IronDrawingColor.GetLuminance()
Beispiel für ein Rechteck
:path=/static-assets/drawing/content-code-examples/get-started/rectangle.cs
using IronSoftware.Drawing;
// Create a new Rectangle object
Rectangle Rectangle = new Rectangle(5, 5, 50, 50);
// Casting between System.Drawing.Rectangle and IronSoftware.Drawing.Rectangle
System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(10, 10, 150, 150);
IronSoftware.Drawing.Rectangle ironRectangle = rectangle;
ironRectangle.X;
ironRectangle.Y;
ironRectangle.Width;
ironRectangle.Height;
Imports IronSoftware.Drawing
' Create a new Rectangle object
Private Rectangle As New Rectangle(5, 5, 50, 50)
' Casting between System.Drawing.Rectangle and IronSoftware.Drawing.Rectangle
'INSTANT VB NOTE: The field rectangle was renamed since Visual Basic does not allow fields to have the same name as other class members:
Private rectangle_Conflict As New System.Drawing.Rectangle(10, 10, 150, 150)
Private ironRectangle As IronSoftware.Drawing.Rectangle = rectangle_Conflict
ironRectangle.X
ironRectangle.Y
ironRectangle.Width
ironRectangle.Height
Schriftart Beispiel
:path=/static-assets/drawing/content-code-examples/get-started/font.cs
using IronSoftware.Drawing;
// Create a new Font object
Font font = new Font("Times New Roman", FontStyle.Italic | FontStyle.Bold, 30);
// Casting between System.Drawing.Font and IronSoftware.Drawing.Font
System.Drawing.Font drawingFont = new System.Drawing.Font("Courier New", 30);
IronSoftware.Drawing.Font ironFont = drawingFont;
ironFont.FamilyName;
ironFont.Style;
ironFont.Size;
ironFont.Italic;
ironFont.Bold;
Imports IronSoftware.Drawing
' Create a new Font object
Private font As New Font("Times New Roman", FontStyle.Italic Or FontStyle.Bold, 30)
' Casting between System.Drawing.Font and IronSoftware.Drawing.Font
Private drawingFont As New System.Drawing.Font("Courier New", 30)
Private ironFont As IronSoftware.Drawing.Font = drawingFont
ironFont.FamilyName
ironFont.Style
ironFont.Size
ironFont.Italic
ironFont.Bold
Unterstützung verfügbar
Lizenz
Die Lizenzinformationen finden Sie hier: LICENSE.txt
Beitragen
Wenn Sie zum Open-Source-Projekt IronDrawing beitragen möchten, lesen Sie bitte die Lizenz, bevor Sie einen Pull-Request an das Repository auf GitHub erstellen.
Informationen
Für weitere Informationen über Iron Software besuchen Sie bitte unsere Website: https://ironsoftware.com/
Unterstützung durch Iron Software
Für allgemeinen Support und technische Anfragen senden Sie uns bitte eine E-Mail an: mailto:support@ironsoftware.com