Bibliothèque Bitmap C# pour remplacer System.Drawing.Common dans .NET
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 en 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 agit comme un pont transparent entre toutes les nouvelles normes graphiques proposées pour .NET 5, 6, 7 et 8 au fur et à mesure de leur évolution - ainsi, vous n'avez besoin de développer que pour celle que vous préférez.

Etapes techniques à éviter system.drawing.common n'est pas pris en charge sur cette plateforme d'exception
- Implement System.drawing.common is not possible for .NET6 and .NET 7 & 8 on Linux and MacOs platform
- L'utilisation de System.Drawing.Common sur ces plates-formes se heurte à un message d'exception
- Définissez la configuration d'exécution System.Drawing.EnableUnixSupport sur true pour .NET6
- Support for System.Drawing.Common is no longer available in .NET 7 & 8
- Utilisez la bibliothèque open-source IronSoftware.Drawing pour remplacer System.Drawing.Common pour .NET7
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é un changement majeur selon lequel System.Drawing.Common ne sera pris en charge que sur les plateformes Windows.
Cela pose problème pour les développeurs de bibliothèques .NET qui maintiennent des bibliothèques multiplateformes utilisant System.Drawing.Common car l'action recommandée par Microsoft nécessite de reconstruire votre bibliothèque pour prendre en charge les utilisateurs non-Windows. Les bénévoles et les universitaires sont censés reconstruire chaque paquet NuGet et bibliothèque de classes pour utiliser chacune des nouvelles bibliothèques graphiques suggérées à mesure qu'elles émergent, entraînant une dette technique qui ralentira l'adoption du .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 majeur ralentira le développement de NuGet et pourrait conduire à l'abandon ou à l'obsolescence des bibliothèques de code sur lesquelles les développeurs .NET dépendent. 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èque de classes, vos entrées et sorties publiques Bitmap, Color, Rectangle, Font et Size peuvent être d'un seul type qui prend en charge toutes les nouvelles normes. En interne, vous pouvez continuer à faire ce que vous voulez.
IronDrawing est rétrocompatible avec .NET Framework 4.62 et prend en charge toutes les versions de .NET (y compris .NET 8).
Le développement et la sortie de IronDrawing résolvent ce problème en fournissant une solution open-source au manque de 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.
Par exemple, si vous utilisez System.Drawing.Bitmap, vous pouvez utiliser la classe AnyBitmap de IronDrawing qui a des conversions implicites vers n'importe quel 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 l'avenir et loin 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. Conversion implicite entreIronSoftware.Drawing.AnyBitmapet les éléments suivants pris en charge :System.Drawing.BitmapSystem.Drawing.ImageSkiaSharp.SKBitmapSkiaSharp.SKImage
- SixLabors.ImageSharp
Microsoft.Maui.Graphics.Platform.PlatformImageCouleur : Une classe Couleur universellement compatible. Conversion implicite entre
IronSoftware.Drawing.Coloret les formats suivants pris en charge :System.Drawing.ColorSkiaSharp.SKColorSixLabors.ImageSharp.Color
- SixLabors.ImageSharp.PixelFormats
Rectangle: Une classe Rectangle universellement compatible. Conversion implicite entreIronSoftware.Drawing.Rectangleet les éléments suivants pris en charge :System.Drawing.RectangleSkiaSharp.SKRectSkiaSharp.SKRectI
SixLabors.ImageSharp.RectanglePolice : Une classe de police universellement compatible. Conversion implicite entre
IronSoftware.Drawing.Fontet les éléments suivants pris en charge :System.Drawing.FontSkiaSharp.SKFont- SixLabors.Fonts.Font
Compatibilité
IronSoftware.Drawing est compatible avec les plateformes croisées :
- .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
L'installation du package NuGet IronDrawing (IronSoftware.Drawing) est rapide et facile. Veuillez installer le paquet comme suit :
:InstallCmd Install-Package IronSoftware.System.Drawing:InstallCmd Install-Package IronSoftware.System.DrawingAlternativement, téléchargez directement depuis le site officiel de NuGet.
Une fois installé, vous pouvez commencer en ajoutant using 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.csusing 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")Exemple de couleur
:path=/static-assets/drawing/content-code-examples/get-started/color.csusing 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()Exemple de rectangle
:path=/static-assets/drawing/content-code-examples/get-started/rectangle.csusing 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.HeightExemple de police
:path=/static-assets/drawing/content-code-examples/get-started/font.csusing 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.BoldSoutien disponible
Licence
Les informations sur la licence peuvent être trouvées ici : LICENSE.txt
Contribuer
Si vous souhaitez contribuer au projet open-source IronDrawing, veuillez lire la licence avant de faire une demande de pull sur le dépôt 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