# C# Bitmap Library to Replace `System.Drawing.Common` in .NET
## IronDrawing est un logiciel libre et open source qui prend en charge la plupart des formats de bibliothèques de dessin .NET
**IronDrawing** est une bibliothèque open source initialement développée 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.
Le développement de bibliothèques de classes et de paquets NuGet for .NET 5, 6, 7 et 8 prenant en charge les graphiques, les images et les polices _devrait_ être facile.
IronDrawing sert de passerelle transparente entre toutes les nouvelles normes graphiques proposées pour .NET 5, 6, 7 et 8 à mesure qu'elles évoluent ; vous n'avez donc qu'à développer pour celle que **vous préférez**.
<div class="content-img-align-center">
<div class="center-image-wrapper">
<img src="/static-assets/drawing/irondrawing-get-started.webp" alt="IronDrawing est un logiciel libre et open source qui prend en charge la plupart des formats de bibliothèques de dessin .NET" class="img-responsive add-shadow" width="645" height="618" />
</div>
</div>
<div class="hsg-featured-snippet">
<h2>Étapes techniques pour éviter l'exception " system.drawing.common n'est pas pris en charge sur cette plateforme "</h2>
<ol>
<li>Implement <strong>System.drawing.common</strong> is not possible pour .NET 6 and .NET 7 & 8 on Linux and macOS platforms</li>
<li>L'utilisation de System.Drawing.Common sur ces plateformes entraînera l'affichage d'un message d'exception</li>
<li>Définissez la configuration d'exécution <strong>System.Drawing.EnableUnixSupport</strong> sur <strong>true</strong> for .NET 6</li>
<li>La prise en charge de System.Drawing.Common n'est plus disponible dans .NET 7 et 8</li>
<li>Utilisez la bibliothèque open source <strong>IronSoftware.Drawing</strong> pour remplacer <strong>System.Drawing.Common</strong> dans .NET 7</li>
</ol>
</div>
### Contexte
Microsoft .NET Framework est un framework logiciel multiplateforme hautement compatible utilisé par des millions de développeurs à travers le monde. Microsoft a [annoncé](https://learn.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only) un **changement majeur** : `System.Drawing.Common` ne sera désormais pris en charge que sur les plateformes Windows.
Cela pose un problème aux développeurs de bibliothèques .NET qui gèrent des bibliothèques multiplateformes utilisant `System.Drawing.Common`, car [la procédure recommandée](https://learn.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only#recommended-action) par Microsoft nécessite de recompiler la bibliothèque pour prendre en charge les utilisateurs non Windows. Les bénévoles et les universitaires devront recompiler chaque package NuGet et chaque bibliothèque de classes pour utiliser **chacune** des nouvelles bibliothèques graphiques proposées à mesure qu'elles apparaissent, ce qui entraînera 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 packages NuGet nous rendent un grand service en faisant progresser .NET et en proposant du 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 entraîner 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 toutes les anciennes et nouvelles bibliothèques graphiques.
En tant que développeur de bibliothèques de classes, vos `Bitmap`, `Color`, `Rectangle`, `Font` et `Size` ne peuvent être que d'un seul type prenant 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 d'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` effectuera pour vous une conversion transparente entre les implémentations de ces types dans `System.Drawing`, `Microsoft.Maui`, `SkiaSharp` et `SixLabors`. Cela vous permet, en tant que développeur, de ne pas avoir à remplacer toutes les instances de ces classes au sein de votre bibliothèque.
Par [exemple](#anchor-anybitmap-example), si vous utilisez `System.Drawing.Bitmap`, vous pouvez utiliser la classe `AnyBitmap` d'IronDrawing qui dispose de 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 car, chez Iron Software, nous sommes des développeurs .NET seniors de longue date qui se soucient de l'évolution de .NET et souhaitons sa croissance et son succès. Nous sommes ravis de voir que .NET se développe et évolue, comme en témoigne .NET 7. Nous utilisons NuGet toute la journée, et je suis sûr que vous aussi. Nous soutenons et souhaitons encourager une transition en douceur vers l'avenir, loin de `System.Drawing`.
Nous souhaitons faciliter le développement de toutes les bibliothèques de classes .NET et NuGet, afin que l'écosystème NuGet continue de prospérer et que tous les développeurs .NET en tirent profit.
## `IronSoftware.Drawing` Fonctionnalités
- **`AnyBitmap`** : Une classe Bitmap universellement compatible. La conversion implicite entre `IronSoftware.Drawing.AnyBitmap` et les éléments suivants est prise en charge :
- `System.Drawing.Bitmap`
- `System.Drawing.Image`
- `SkiaSharp.SKBitmap`
- `SkiaSharp.SKImage`
- `SixLabors.ImageSharp`
- `Microsoft.Maui.Graphics.Platform.PlatformImage`
- **Color** : une classe Color universellement compatible. La conversion implicite entre `IronSoftware.Drawing.Color` et les éléments suivants est prise en charge :
- `System.Drawing.Color`
- `SkiaSharp.SKColor`
- `SixLabors.ImageSharp.Color`
- `SixLabors.ImageSharp.PixelFormats`
- **`Rectangle`** : Une classe Rectangle universellement compatible. La conversion implicite entre `IronSoftware.Drawing.Rectangle` et les éléments suivants est prise en charge :
- `System.Drawing.Rectangle`
- `SkiaSharp.SKRect`
- `SkiaSharp.SKRectI`
- `SixLabors.ImageSharp.Rectangle`
- **Font** : une classe Font universellement compatible. La conversion implicite entre `IronSoftware.Drawing.Font` et ce qui suit est prise en charge :
- `System.Drawing.Font`
- `SkiaSharp.SKFont`
- `SixLabors.Fonts.Font`
### Compatibilité
**`IronSoftware.Drawing`** est compatible avec les plateformes suivantes :
- .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 package comme suit :
```shell
:InstallCmd Install-Package IronSoftware.System.Drawing
```
Vous pouvez également les télécharger directement depuis le [site officiel de NuGet](https://www.nuget.org/packages/IronSoftware.System.Drawing).
Une fois l'installation terminée, vous pouvez commencer en ajoutant `using IronSoftware.Drawing;` en haut de votre code C#.
## Exemples de code
### Exemple AnyBitmap
```csharp
:path=/static-assets/drawing/content-code-examples/get-started/anybitmap.cs
```
### Exemple de couleur
```csharp
:path=/static-assets/drawing/content-code-examples/get-started/color.cs
```
### Exemple de rectangle
```csharp
:path=/static-assets/drawing/content-code-examples/get-started/rectangle.cs
```
### Exemple de police
```csharp
:path=/static-assets/drawing/content-code-examples/get-started/font.cs
```
## Assistance disponible
### Licence
Les informations relatives à la licence sont disponibles ici : [LICENSE.txt](https://github.com/iron-software/IronSoftware.System.Drawing/blob/master/LICENSE.txt)
### Contribuer
Si vous souhaitez contribuer au projet open source IronDrawing, veuillez lire la [licence](https://github.com/iron-software/IronSoftware.System.Drawing/blob/master/LICENSE.txt) avant d'envoyer une pull request au [dépôt sur GitHub](https://github.com/iron-software/IronSoftware.System.Drawing).
### Informations
Pour plus d'informations sur Iron Software, veuillez consulter notre site web : [https://ironsoftware.com/](https://ironsoftware.com/)
### Assistance fournie par Iron Software
Pour toute assistance générale ou question technique, veuillez nous envoyer un e-mail à l'adresse suivante : [support@ironsoftware.com](mailto:support@ironsoftware.com)
IronDrawing est un logiciel libre et open source qui prend en charge la plupart des formats de bibliothèques de dessin .NET
IronDrawing est une bibliothèque open source initialement développée 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.
Le développement de bibliothèques de classes et de paquets NuGet for .NET 5, 6, 7 et 8 prenant en charge les graphiques, les images et les polices devrait être facile.
IronDrawing sert de passerelle transparente entre toutes les nouvelles normes graphiques proposées pour .NET 5, 6, 7 et 8 à mesure qu'elles évoluent ; vous n'avez donc qu'à développer pour celle que vous préférez.
Étapes techniques pour éviter l'exception " system.drawing.common n'est pas pris en charge sur cette plateforme "
Implement System.drawing.common is not possible pour .NET 6 and .NET 7 & 8 on Linux and macOS platforms
L'utilisation de System.Drawing.Common sur ces plateformes entraînera l'affichage d'un message d'exception
Définissez la configuration d'exécution System.Drawing.EnableUnixSupport sur true for .NET 6
La prise en charge de System.Drawing.Common n'est plus disponible dans .NET 7 et 8
Utilisez la bibliothèque open source IronSoftware.Drawing pour remplacer System.Drawing.Common dans .NET 7
Contexte
Microsoft .NET Framework est un framework logiciel multiplateforme hautement compatible utilisé par des millions de développeurs à travers le monde. Microsoft a annoncé un changement majeur : System.Drawing.Common ne sera désormais pris en charge que sur les plateformes Windows.
Cela pose un problème aux développeurs de bibliothèques .NET qui gèrent des bibliothèques multiplateformes utilisant System.Drawing.Common, car la procédure recommandée par Microsoft nécessite de recompiler la bibliothèque pour prendre en charge les utilisateurs non Windows. Les bénévoles et les universitaires devront recompiler chaque package NuGet et chaque bibliothèque de classes pour utiliser chacune des nouvelles bibliothèques graphiques proposées à mesure qu'elles apparaissent, ce qui entraînera 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 packages NuGet nous rendent un grand service en faisant progresser .NET et en proposant du 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 entraîner 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 toutes les anciennes et nouvelles bibliothèques graphiques.
En tant que développeur de bibliothèques de classes, vos Bitmap, Color, Rectangle, Font et Size ne peuvent être que d'un seul type prenant 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 d'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 effectuera pour vous une conversion transparente entre les implémentations de ces types dans System.Drawing, Microsoft.Maui, SkiaSharp et SixLabors. Cela vous permet, en tant que développeur, de ne pas avoir à remplacer toutes les instances de ces classes au sein de votre bibliothèque.
Par exemple, si vous utilisez System.Drawing.Bitmap, vous pouvez utiliser la classe AnyBitmap d'IronDrawing qui dispose de 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 car, chez Iron Software, nous sommes des développeurs .NET seniors de longue date qui se soucient de l'évolution de .NET et souhaitons sa croissance et son succès. Nous sommes ravis de voir que .NET se développe et évolue, comme en témoigne .NET 7. Nous utilisons NuGet toute la journée, et je suis sûr que vous aussi. Nous soutenons et souhaitons encourager une transition en douceur vers l'avenir, loin de System.Drawing.
Nous souhaitons faciliter le développement de toutes les bibliothèques de classes .NET et NuGet, afin que l'écosystème NuGet continue de prospérer et que tous les développeurs .NET en tirent profit.
IronSoftware.Drawing Fonctionnalités
AnyBitmap : Une classe Bitmap universellement compatible. La conversion implicite entre IronSoftware.Drawing.AnyBitmap et les éléments suivants est prise en charge :
System.Drawing.Bitmap
System.Drawing.Image
SkiaSharp.SKBitmap
SkiaSharp.SKImage
SixLabors.ImageSharp
Microsoft.Maui.Graphics.Platform.PlatformImage
Color : une classe Color universellement compatible. La conversion implicite entre IronSoftware.Drawing.Color et les éléments suivants est prise en charge :
System.Drawing.Color
SkiaSharp.SKColor
SixLabors.ImageSharp.Color
SixLabors.ImageSharp.PixelFormats
Rectangle : Une classe Rectangle universellement compatible. La conversion implicite entre IronSoftware.Drawing.Rectangle et les éléments suivants est prise en charge :
System.Drawing.Rectangle
SkiaSharp.SKRect
SkiaSharp.SKRectI
SixLabors.ImageSharp.Rectangle
Font : une classe Font universellement compatible. La conversion implicite entre IronSoftware.Drawing.Font et ce qui suit est prise en charge :
System.Drawing.Font
SkiaSharp.SKFont
SixLabors.Fonts.Font
Compatibilité
IronSoftware.Drawing est compatible avec les plateformes suivantes :
.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 package comme suit :
Une fois l'installation terminée, vous pouvez commencer en ajoutant using IronSoftware.Drawing; en haut de votre code C#.
Exemples de code
Exemple AnyBitmap
using IronSoftware.Drawing;using System.IO;using System.Drawing;// Create a new AnyBitmap object from a file// Replace "FILE_PATH" with the actual path of the image you want to processvar bitmap = AnyBitmap.FromFile("FILE_PATH");// Save the AnyBitmap object as a JPEG filebitmap.SaveAs("result.jpg");// Export the AnyBitmap as a byte array// This can be useful if you want to send the image data over a network or save it in a databasevar bytes = bitmap.ExportBytes();// Create a memory stream to export the AnyBitmap as a JPEG stream with 100% qualityusing (var resultExport = new MemoryStream()){ // This exports the image to the stream with the specified format and quality bitmap.ExportStream(resultExport, AnyBitmap.ImageFormat.Jpeg, 100); // Be sure to use 'using' or manually close the stream to release resources}// Casting between System.Drawing.Bitmap and IronSoftware.Drawing.AnyBitmap// Load a System.Drawing.Bitmap from the same fileSystem.Drawing.Bitmap image = new System.Drawing.Bitmap("FILE_PATH");// This is an implicit conversion from System.Drawing.Bitmap to IronSoftware.Drawing.AnyBitmap// This step is necessary if you are working with System.Drawing.Bitmap and need to convert to IronSoftware.Drawing.AnyBitmap for processingIronSoftware.Drawing.AnyBitmap anyBitmap = AnyBitmap.FromBitmap(image);// Save the resulting AnyBitmap from casting as a PNG fileanyBitmap.SaveAs("result-from-casting.png");
using IronSoftware.Drawing;
using System.IO;
using System.Drawing;
// Create a new AnyBitmap object from a file
// Replace "FILE_PATH" with the actual path of the image you want to process
var bitmap = AnyBitmap.FromFile("FILE_PATH");
// Save the AnyBitmap object as a JPEG file
bitmap.SaveAs("result.jpg");
// Export the AnyBitmap as a byte array
// This can be useful if you want to send the image data over a network or save it in a database
var bytes = bitmap.ExportBytes();
// Create a memory stream to export the AnyBitmap as a JPEG stream with 100% quality
using (var resultExport = new MemoryStream())
{
// This exports the image to the stream with the specified format and quality
bitmap.ExportStream(resultExport, AnyBitmap.ImageFormat.Jpeg, 100);
// Be sure to use 'using' or manually close the stream to release resources
}
// Casting between System.Drawing.Bitmap and IronSoftware.Drawing.AnyBitmap
// Load a System.Drawing.Bitmap from the same file
System.Drawing.Bitmap image = new System.Drawing.Bitmap("FILE_PATH");
// This is an implicit conversion from System.Drawing.Bitmap to IronSoftware.Drawing.AnyBitmap
// This step is necessary if you are working with System.Drawing.Bitmap and need to convert to IronSoftware.Drawing.AnyBitmap for processing
IronSoftware.Drawing.AnyBitmap anyBitmap = AnyBitmap.FromBitmap(image);
// Save the resulting AnyBitmap from casting as a PNG file
anyBitmap.SaveAs("result-from-casting.png");
ImportsIronSoftware.DrawingImportsSystem.IOImportsSystem.Drawing' Create a new AnyBitmap object from a file' Replace "FILE_PATH" with the actual path of the image you want to processPrivate bitmap = AnyBitmap.FromFile("FILE_PATH")' Save the AnyBitmap object as a JPEG filebitmap.SaveAs("result.jpg")' Export the AnyBitmap as a byte array' This can be useful if you want to send the image data over a network or save it in a databaseDim bytes = bitmap.ExportBytes()' Create a memory stream to export the AnyBitmap as a JPEG stream with 100% qualityUsing resultExport = New MemoryStream() ' This exports the image to the stream with the specified format and quality bitmap.ExportStream(resultExport, AnyBitmap.ImageFormat.Jpeg, 100) ' Be sure to use 'using' or manually close the stream to release resourcesEndUsing' Casting between System.Drawing.Bitmap and IronSoftware.Drawing.AnyBitmap' Load a System.Drawing.Bitmap from the same fileDim image As New System.Drawing.Bitmap("FILE_PATH")' This is an implicit conversion from System.Drawing.Bitmap to IronSoftware.Drawing.AnyBitmap' This step is necessary if you are working with System.Drawing.Bitmap and need to convert to IronSoftware.Drawing.AnyBitmap for processingDim anyBitmap AsIronSoftware.Drawing.AnyBitmap = AnyBitmap.FromBitmap(image)' Save the resulting AnyBitmap from casting as a PNG fileanyBitmap.SaveAs("result-from-casting.png")
Imports IronSoftware.Drawing
Imports System.IO
Imports System.Drawing
' Create a new AnyBitmap object from a file
' Replace "FILE_PATH" with the actual path of the image you want to process
Private bitmap = AnyBitmap.FromFile("FILE_PATH")
' Save the AnyBitmap object as a JPEG file
bitmap.SaveAs("result.jpg")
' Export the AnyBitmap as a byte array
' This can be useful if you want to send the image data over a network or save it in a database
Dim bytes = bitmap.ExportBytes()
' Create a memory stream to export the AnyBitmap as a JPEG stream with 100% quality
Using resultExport = New MemoryStream()
' This exports the image to the stream with the specified format and quality
bitmap.ExportStream(resultExport, AnyBitmap.ImageFormat.Jpeg, 100)
' Be sure to use 'using' or manually close the stream to release resources
End Using
' Casting between System.Drawing.Bitmap and IronSoftware.Drawing.AnyBitmap
' Load a System.Drawing.Bitmap from the same file
Dim image As New System.Drawing.Bitmap("FILE_PATH")
' This is an implicit conversion from System.Drawing.Bitmap to IronSoftware.Drawing.AnyBitmap
' This step is necessary if you are working with System.Drawing.Bitmap and need to convert to IronSoftware.Drawing.AnyBitmap for processing
Dim anyBitmap As IronSoftware.Drawing.AnyBitmap = AnyBitmap.FromBitmap(image)
' Save the resulting AnyBitmap from casting as a PNG file
anyBitmap.SaveAs("result-from-casting.png")
Exemple de couleur
using IronSoftware.Drawing;using System;// The IronSoftware.Drawing library provides enhanced color manipulation features.// This example demonstrates creating color objects and converting between// System.Drawing.Color and IronSoftware.Drawing.Color.// Create a new Color object from a hex string.Color fromHex = Color.FromHex("#191919");// Create a new Color object from RGB values.Color fromRgb = Color.FromRgb(255, 255, 0);// Create a new Color object using an enumeration.Color fromEnum = Color.Crimson;// Casting between System.Drawing.Color and IronSoftware.Drawing.Color.System.Drawing.Color drawingColor = System.Drawing.Color.Red;// Convert System.Drawing.Color to IronSoftware.Drawing.Color.IronSoftware.Drawing.Color ironColor = Color.FromSystemColor(drawingColor);// Access the alpha, red, green, and blue components of the IronSoftware.Drawing.Color.byte alpha = ironColor.A;byte red = ironColor.R;byte green = ironColor.G;byte blue = ironColor.B;// Calculate the luminance of the color.// Luminance is a value from 0 (black) to 100 (white) where 50 is the perceptual "middle grey".double luminance = ironColor.GetLuminance();// Log the calculated attributes to the console.Console.WriteLine($"Color Details - ARGB: ({alpha}, {red}, {green}, {blue}), Luminance: {luminance}");
using IronSoftware.Drawing;
using System;
// The IronSoftware.Drawing library provides enhanced color manipulation features.
// This example demonstrates creating color objects and converting between
// System.Drawing.Color and IronSoftware.Drawing.Color.
// Create a new Color object from a hex string.
Color fromHex = Color.FromHex("#191919");
// Create a new Color object from RGB values.
Color fromRgb = Color.FromRgb(255, 255, 0);
// Create a new Color object using an enumeration.
Color fromEnum = Color.Crimson;
// Casting between System.Drawing.Color and IronSoftware.Drawing.Color.
System.Drawing.Color drawingColor = System.Drawing.Color.Red;
// Convert System.Drawing.Color to IronSoftware.Drawing.Color.
IronSoftware.Drawing.Color ironColor = Color.FromSystemColor(drawingColor);
// Access the alpha, red, green, and blue components of the IronSoftware.Drawing.Color.
byte alpha = ironColor.A;
byte red = ironColor.R;
byte green = ironColor.G;
byte blue = ironColor.B;
// Calculate the luminance of the color.
// Luminance is a value from 0 (black) to 100 (white) where 50 is the perceptual "middle grey".
double luminance = ironColor.GetLuminance();
// Log the calculated attributes to the console.
Console.WriteLine($"Color Details - ARGB: ({alpha}, {red}, {green}, {blue}), Luminance: {luminance}");
ImportsIronSoftware.DrawingImportsSystem' The IronSoftware.Drawing library provides enhanced color manipulation features.' This example demonstrates creating color objects and converting between' System.Drawing.Color and IronSoftware.Drawing.Color.' Create a new Color object from a hex string.Private fromHex AsColor = Color.FromHex("#191919")' Create a new Color object from RGB values.Private fromRgb AsColor = Color.FromRgb(255, 255, 0)' Create a new Color object using an enumeration.Private fromEnum AsColor = Color.Crimson' Casting between System.Drawing.Color and IronSoftware.Drawing.Color.Private drawingColor AsSystem.Drawing.Color = System.Drawing.Color.Red' Convert System.Drawing.Color to IronSoftware.Drawing.Color.Private ironColor AsIronSoftware.Drawing.Color = Color.FromSystemColor(drawingColor)' Access the alpha, red, green, and blue components of the IronSoftware.Drawing.Color.Private alpha AsByte = ironColor.APrivate red AsByte = ironColor.RPrivate green AsByte = ironColor.GPrivate blue AsByte = ironColor.B' Calculate the luminance of the color.' Luminance is a value from 0 (black) to 100 (white) where 50 is the perceptual "middle grey".Private luminance AsDouble = ironColor.GetLuminance()' Log the calculated attributes to the console.Console.WriteLine($"Color Details - ARGB: ({alpha}, {red}, {green}, {blue}), Luminance: {luminance}")
Imports IronSoftware.Drawing
Imports System
' The IronSoftware.Drawing library provides enhanced color manipulation features.
' This example demonstrates creating color objects and converting between
' System.Drawing.Color and IronSoftware.Drawing.Color.
' Create a new Color object from a hex string.
Private fromHex As Color = Color.FromHex("#191919")
' Create a new Color object from RGB values.
Private fromRgb As Color = Color.FromRgb(255, 255, 0)
' Create a new Color object using an enumeration.
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
' Convert System.Drawing.Color to IronSoftware.Drawing.Color.
Private ironColor As IronSoftware.Drawing.Color = Color.FromSystemColor(drawingColor)
' Access the alpha, red, green, and blue components of the IronSoftware.Drawing.Color.
Private alpha As Byte = ironColor.A
Private red As Byte = ironColor.R
Private green As Byte = ironColor.G
Private blue As Byte = ironColor.B
' Calculate the luminance of the color.
' Luminance is a value from 0 (black) to 100 (white) where 50 is the perceptual "middle grey".
Private luminance As Double = ironColor.GetLuminance()
' Log the calculated attributes to the console.
Console.WriteLine($"Color Details - ARGB: ({alpha}, {red}, {green}, {blue}), Luminance: {luminance}")
Exemple de rectangle
using IronSoftware.Drawing;using System.Drawing;// Declare an IronSoftware.Drawing.Rectangle objectIronSoftware.Drawing.Rectangle ironRectangle = new IronSoftware.Drawing.Rectangle(5, 5, 50, 50);// Declare a System.Drawing.Rectangle objectSystem.Drawing.Rectangle systemRectangle = new System.Drawing.Rectangle(10, 10, 150, 150);// Implicitly convert System.Drawing.Rectangle to IronSoftware.Drawing.Rectangle// Note: Uncomment and use appropriate conversion methods if available in the IronSoftware.Drawing library// ironRectangle = (IronSoftware.Drawing.Rectangle)systemRectangle;// Output the properties of IronSoftware.Drawing.Rectangle if conversion is successful// These Console.WriteLine statements assume this code runs in a console environmentConsole.WriteLine(ironRectangle.X);Console.WriteLine(ironRectangle.Y);Console.WriteLine(ironRectangle.Width);Console.WriteLine(ironRectangle.Height);
using IronSoftware.Drawing;
using System.Drawing;
// Declare an IronSoftware.Drawing.Rectangle object
IronSoftware.Drawing.Rectangle ironRectangle = new IronSoftware.Drawing.Rectangle(5, 5, 50, 50);
// Declare a System.Drawing.Rectangle object
System.Drawing.Rectangle systemRectangle = new System.Drawing.Rectangle(10, 10, 150, 150);
// Implicitly convert System.Drawing.Rectangle to IronSoftware.Drawing.Rectangle
// Note: Uncomment and use appropriate conversion methods if available in the IronSoftware.Drawing library
// ironRectangle = (IronSoftware.Drawing.Rectangle)systemRectangle;
// Output the properties of IronSoftware.Drawing.Rectangle if conversion is successful
// These Console.WriteLine statements assume this code runs in a console environment
Console.WriteLine(ironRectangle.X);
Console.WriteLine(ironRectangle.Y);
Console.WriteLine(ironRectangle.Width);
Console.WriteLine(ironRectangle.Height);
ImportsIronSoftware.DrawingImportsSystem.Drawing' Declare an IronSoftware.Drawing.Rectangle objectPrivate ironRectangle As New IronSoftware.Drawing.Rectangle(5, 5, 50, 50)' Declare a System.Drawing.Rectangle objectPrivate systemRectangle As New System.Drawing.Rectangle(10, 10, 150, 150)' Implicitly convert System.Drawing.Rectangle to IronSoftware.Drawing.Rectangle' Note: Uncomment and use appropriate conversion methods if available in the IronSoftware.Drawing library' ironRectangle = (IronSoftware.Drawing.Rectangle)systemRectangle;' Output the properties of IronSoftware.Drawing.Rectangle if conversion is successful' These Console.WriteLine statements assume this code runs in a console environmentConsole.WriteLine(ironRectangle.X)Console.WriteLine(ironRectangle.Y)Console.WriteLine(ironRectangle.Width)Console.WriteLine(ironRectangle.Height)
Imports IronSoftware.Drawing
Imports System.Drawing
' Declare an IronSoftware.Drawing.Rectangle object
Private ironRectangle As New IronSoftware.Drawing.Rectangle(5, 5, 50, 50)
' Declare a System.Drawing.Rectangle object
Private systemRectangle As New System.Drawing.Rectangle(10, 10, 150, 150)
' Implicitly convert System.Drawing.Rectangle to IronSoftware.Drawing.Rectangle
' Note: Uncomment and use appropriate conversion methods if available in the IronSoftware.Drawing library
' ironRectangle = (IronSoftware.Drawing.Rectangle)systemRectangle;
' Output the properties of IronSoftware.Drawing.Rectangle if conversion is successful
' These Console.WriteLine statements assume this code runs in a console environment
Console.WriteLine(ironRectangle.X)
Console.WriteLine(ironRectangle.Y)
Console.WriteLine(ironRectangle.Width)
Console.WriteLine(ironRectangle.Height)
Exemple de police
using System;using System.Drawing;using IronSoftware.Drawing;// Create a new Font object with a specified font family, style, and sizeIronSoftware.Drawing.Font font = new IronSoftware.Drawing.Font("Times New Roman", FontStyle.Italic | FontStyle.Bold, 30);// Create a new instance of System.Drawing.FontSystem.Drawing.Font drawingFont = new System.Drawing.Font("Courier New", 30);try{ // Attempt to cast System.Drawing.Font to IronSoftware.Drawing.Font // Note: This cast may not be directly possible if the libraries do not support each other; // additional conversion logic might be required. IronSoftware.Drawing.Font ironFont = new IronSoftware.Drawing.Font(drawingFont.FontFamily.Name, drawingFont.Style, drawingFont.Size); // Accessing properties of the IronSoftware.Drawing.Font object string familyName = ironFont.FamilyName; // Get the font family name FontStyle style = ironFont.Style; // Get the combined font style (italic, bold, etc.) float size = ironFont.Size; // Get the font size bool isItalic = ironFont.Italic; // Determine if the font style includes Italic bool isBold = ironFont.Bold; // Determine if the font style includes Bold // Output the font properties to verify correctnessConsole.WriteLine($"Family: {familyName}, Style: {style}, Size: {size}, Italic: {isItalic}, Bold: {isBold}");}catch (InvalidCastException){Console.WriteLine("The conversion between System.Drawing.Font and IronSoftware.Drawing.Font is not directly supported.");}catch (Exception ex){Console.WriteLine($"An error occurred: {ex.Message}");}
using System;
using System.Drawing;
using IronSoftware.Drawing;
// Create a new Font object with a specified font family, style, and size
IronSoftware.Drawing.Font font = new IronSoftware.Drawing.Font("Times New Roman", FontStyle.Italic | FontStyle.Bold, 30);
// Create a new instance of System.Drawing.Font
System.Drawing.Font drawingFont = new System.Drawing.Font("Courier New", 30);
try
{
// Attempt to cast System.Drawing.Font to IronSoftware.Drawing.Font
// Note: This cast may not be directly possible if the libraries do not support each other;
// additional conversion logic might be required.
IronSoftware.Drawing.Font ironFont = new IronSoftware.Drawing.Font(drawingFont.FontFamily.Name, drawingFont.Style, drawingFont.Size);
// Accessing properties of the IronSoftware.Drawing.Font object
string familyName = ironFont.FamilyName; // Get the font family name
FontStyle style = ironFont.Style; // Get the combined font style (italic, bold, etc.)
float size = ironFont.Size; // Get the font size
bool isItalic = ironFont.Italic; // Determine if the font style includes Italic
bool isBold = ironFont.Bold; // Determine if the font style includes Bold
// Output the font properties to verify correctness
Console.WriteLine($"Family: {familyName}, Style: {style}, Size: {size}, Italic: {isItalic}, Bold: {isBold}");
}
catch (InvalidCastException)
{
Console.WriteLine("The conversion between System.Drawing.Font and IronSoftware.Drawing.Font is not directly supported.");
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
ImportsSystemImportsSystem.DrawingImportsIronSoftware.Drawing' Create a new Font object with a specified font family, style, and sizePrivate font As New IronSoftware.Drawing.Font("Times New Roman", FontStyle.ItalicOrFontStyle.Bold, 30)' Create a new instance of System.Drawing.FontPrivate drawingFont As New System.Drawing.Font("Courier New", 30)Try ' Attempt to cast System.Drawing.Font to IronSoftware.Drawing.Font ' Note: This cast may not be directly possible if the libraries do not support each other; ' additional conversion logic might be required. Dim ironFont As New IronSoftware.Drawing.Font(drawingFont.FontFamily.Name, drawingFont.Style, drawingFont.Size) ' Accessing properties of the IronSoftware.Drawing.Font object Dim familyName AsString = ironFont.FamilyName' Get the font family name Dim style AsFontStyle = ironFont.Style' Get the combined font style (italic, bold, etc.) Dim size AsSingle = ironFont.Size' Get the font size Dim isItalic AsBoolean = ironFont.Italic' Determine if the font style includes Italic Dim isBold AsBoolean = ironFont.Bold' Determine if the font style includes Bold ' Output the font properties to verify correctnessConsole.WriteLine($"Family: {familyName}, Style: {style}, Size: {size}, Italic: {isItalic}, Bold: {isBold}")Catch e1 AsInvalidCastExceptionConsole.WriteLine("The conversion between System.Drawing.Font and IronSoftware.Drawing.Font is not directly supported.")Catch ex AsExceptionConsole.WriteLine($"An error occurred: {ex.Message}")EndTry
Imports System
Imports System.Drawing
Imports IronSoftware.Drawing
' Create a new Font object with a specified font family, style, and size
Private font As New IronSoftware.Drawing.Font("Times New Roman", FontStyle.Italic Or FontStyle.Bold, 30)
' Create a new instance of System.Drawing.Font
Private drawingFont As New System.Drawing.Font("Courier New", 30)
Try
' Attempt to cast System.Drawing.Font to IronSoftware.Drawing.Font
' Note: This cast may not be directly possible if the libraries do not support each other;
' additional conversion logic might be required.
Dim ironFont As New IronSoftware.Drawing.Font(drawingFont.FontFamily.Name, drawingFont.Style, drawingFont.Size)
' Accessing properties of the IronSoftware.Drawing.Font object
Dim familyName As String = ironFont.FamilyName ' Get the font family name
Dim style As FontStyle = ironFont.Style ' Get the combined font style (italic, bold, etc.)
Dim size As Single = ironFont.Size ' Get the font size
Dim isItalic As Boolean = ironFont.Italic ' Determine if the font style includes Italic
Dim isBold As Boolean = ironFont.Bold ' Determine if the font style includes Bold
' Output the font properties to verify correctness
Console.WriteLine($"Family: {familyName}, Style: {style}, Size: {size}, Italic: {isItalic}, Bold: {isBold}")
Catch e1 As InvalidCastException
Console.WriteLine("The conversion between System.Drawing.Font and IronSoftware.Drawing.Font is not directly supported.")
Catch ex As Exception
Console.WriteLine($"An error occurred: {ex.Message}")
End Try
Assistance disponible
Licence
Les informations relatives à la licence sont disponibles ici : LICENSE.txt
Contribuer
Si vous souhaitez contribuer au projet open source IronDrawing, veuillez lire la licence avant d'envoyer une pull request au dépôt sur GitHub.
Informations
Pour plus d'informations sur Iron Software, veuillez consulter notre site web : https://ironsoftware.com/
Assistance fournie par Iron Software
Pour toute assistance générale ou question technique, veuillez nous envoyer un e-mail à l'adresse suivante : support@ironsoftware.com
Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes et créer des manuels bien structurés et visuellement attrayants.