C# Bitmap-Bibliothek, um System.Drawing.Common in .NET zu ersetzen

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

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.

IronDrawing ist kostenlos, Open Source und unterstützt die meisten .NET-Zeichenbibliotheksformate

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 zwischen IronSoftware.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 zwischen IronSoftware.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")
$vbLabelText   $csharpLabel

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

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

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

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