Bibliothèque Bitmap C# pour remplacer System.Drawing.Common dans .NET

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

IronDrawing est gratuit, open-source et prend en charge la plupart des formats de bibliothèques de dessin .NET

IronDrawing est une bibliothèque open-source développée à l'origine par Iron Software qui aide les ingénieurs logiciels C# à remplacer System.Drawing.Common dans les projets .NET sur les plateformes Windows, macOS et Linux.

Développer des bibliothèques de classes et des packages NuGet pour .NET 5, 6, 7 & 8 qui prennent en charge les graphiques, les images et les polices devrait être facile.

IronDrawing fait office de pont transparent entre toutes les nouvelles normes graphiques proposées pour les normes .NET 5, 6, 7 et 8 au fur et à mesure de leur évolution, de sorte que vous n'avez qu'à développer pour celle que vous préférez.

IronDrawing est gratuit, open-source et prend en charge la plupart des formats de bibliothèques de dessin .NET

Contexte

Microsoft .NET est un framework logiciel multiplateforme et hautement compatible utilisé par des millions de développeurs de logiciels à travers le monde. Microsoft a annoncée un changement révolutionnaire dans lequel System.Drawing.Common ne sera supporté que sur les plateformes Windows.

Ceci est problématique pour les développeurs de bibliothèques .NET qui maintiennent des bibliothèques multiplateformes utilisant System.Drawing.Common parce que le système de Microsoft, le mesures recommandées vous oblige à reconstruire votre bibliothèque pour prendre en charge les utilisateurs non Windows. Les bénévoles et les universitaires sont censés reconstruire chaque paquetage NuGet et chaque bibliothèque de classe pour utiliser chacune des nouvelles bibliothèques graphiques suggérées au fur et à mesure de leur apparition, ce qui entraîne une dette technique qui ralentira l'adoption de .NET moderne.

En fin de compte, lorsque nous utilisons .NET, nous utilisons NuGet.

les développeurs de paquets NuGet nous rendent tous service en faisant progresser .NET et le code pré-packagé qui nous prendrait des milliers d'heures à écrire nous-mêmes chaque jour

Ce changement révolutionnaire ralentira le développement de NuGet et pourrait conduire à l'abandon ou à l'obsolescence de bibliothèques de code dont dépendent les développeurs .NET. Nous devons agir maintenant!

Notre solution

Un format graphique intermédiaire qui assure la conversion entre les anciennes et les nouvelles bibliothèques graphiques.

En tant que développeur de bibliothèques de classes, vos entrées et sorties publiques Bitmap, Color, Rectangle, Font, et Size ne peuvent être que d'un seul type qui supporte tous les nouveaux standards. En interne, vous pouvez continuer à faire ce que vous voulez.

IronDrawing est rétrocompatible avec le Framework .NET 4.62, prend en charge toutes les versions de .NET (y compris .NET 8).

Le développement et la publication d'IronDrawing résout ce problème en fournissant une solution open-source à l'absence d'un format uniforme pour des classes importantes telles que Bitmap, Color, Rectangle, Font, et Size. IronSoftware.Drawing convertira de manière transparente les implémentations de ces types dans System.Drawing, Microsoft.Maui, SkiaSharp, et SixLabors pour vous. Cela vous permet, en tant que développeur, de ne pas avoir à remplacer toutes les instances de ces classes dans votre bibliothèque.

Pour exemplesi vous utilisez System.Drawing.Bitmap, vous pouvez utiliser la classe AnyBitmap d'IronDrawing qui a des conversions implicites vers n'importe lequel de ces types : System.Drawing.Bitmap, System.Drawing.Image, SkiaSharp.SKBitmap, SkiaSharp.SKImage, SixLabors.ImageSharp, Microsoft.Maui.Graphics.Platform.PlatformImage.

Pourquoi faisons-nous cela gratuitement ?

Nous avons développé IronDrawing parce que, chez Iron Software, nous sommes des développeurs .NET seniors de longue date qui se soucient de l'évolution de .NET et veulent qu'il se développe et réussisse. Nous aimons voir que .NET grandit et évolue, comme on le voit avec .NET 7. Nous utilisons NuGet tous les jours, et je suis sûr que vous le faites aussi. Nous soutenons et espérons encourager une transition facile vers le futur et l'abandon de System.Drawing.

Nous voulons que le développement des bibliothèques de classes .NET et de NuGet soit plus facile, afin que l'écosystème NuGet continue de prospérer et que tous les développeurs .NET en profitent.

fonctionnalités de IronSoftware.Drawing

  • AnyBitmap : Une classe Bitmap universellement compatible. Casting implicite entre IronSoftware.Drawing.AnyBitmap et les éléments suivants supportés :

    • System.Drawing.Bitmap (Système.Dessin.Bitmap)

    • System.Drawing.Image

    • SkiaSharp.SKBitmap (carte d'images)

    • SkiaSharp.SKImage

    • SixLabors.ImageSharp
  • Microsoft.Maui.Graphics.Platform.PlatformImage
  • Color : Une classe de couleur universellement compatible. Casting implicite entre IronSoftware.Drawing.Color et les éléments suivants supportés :

    • System.Drawing.Color (Système.Dessin.Couleur)

    • SkiaSharp.SKColor (Couleur SK)

    • SixLabors.ImageSharp.Color (six laboratoires.ImageSharp.Color)
  • SixLabors.ImageSharp.PixelFormats
  • Rectangle : Une classe Rectangle universellement compatible. Casting implicite entre IronSoftware.Drawing.Rectangle et les éléments suivants supportés :

    • System.Drawing.Rectangle

    • SkiaSharp.SKRect

    • SkiaSharp.SKRectI
  • SixLabors.ImageSharp.Rectangle
  • Font : Une classe de police universellement compatible. Casting implicite entre IronSoftware.Drawing.Font et les éléments suivants supportés :

    • System.Drawing.Font

    • SkiaSharp.SKFont (police de caractères)

    • SixLabors.Fonts.Font

Compatibilité

IronSoftware.Drawing a une compatibilité multiplateforme avec :

  • .NET 8, .NET 7, .NET 6, .NET 5, .NET Core, .NET Standard et .NET Framework 4.62+
  • Windows, macOS, Linux, Docker, Azure et AWS

Installation

installation de l'IronDrawing (IronSoftware.Drawing (dessin)) NuGet est simple et rapide. Veuillez installer le paquet comme suit :

Install-Package IronSoftware.System.Drawing

Vous pouvez également télécharger directement à partir du site site officiel de NuGet.

Une fois installé, vous pouvez commencer en ajoutant utilisant IronSoftware.Drawing; au début de votre code C#.

Exemples de codes

Exemple de AnyBitmap

: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")
VB   C#

Exemple de couleur

: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()
VB   C#

Exemple de rectangle

: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
VB   C#

Exemple de police

: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
VB   C#

Soutien disponible

Licence

Les informations relatives à l'octroi de licences sont disponibles ici : LICENSE.txt

Contribuer

Si vous souhaitez contribuer au projet open-source IronDrawing, veuillez lire le document suivant licence avant d'adresser une demande de retrait au sur GitHub.

Informations

Pour plus d'informations sur Iron Software, veuillez consulter notre site web : https://ironsoftware.com/

Assistance d'Iron Software

Pour toute question d'ordre général ou technique, veuillez nous envoyer un courrier électronique à l'adresse suivante mailto:support@ironsoftware.com