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 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.
Etapes techniques à éviter system.drawing.common n'est pas pris en charge sur cette plateforme d'exception
- Mettre en œuvre System.drawing.common n'est pas possible pour .NET6 et .NET 7 & 8 sur les plateformes Linux et MacOs
- L'utilisation de System.Drawing.Common sur ces plates-formes se heurte à un message d'exception
- Set (jeu de mots) System.Drawing.EnableUnixSupport la configuration de l'exécution à vrai pour .NET6
- La prise en charge de System.Drawing.Common n'est plus disponible dans .NET 7 & 8
- Utiliser une 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é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 entreIronSoftware.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 entreIronSoftware.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")
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()
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
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
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