# C# Bitmap Library to Replace `System.Drawing.Common` in .NET
## IronDrawing is free, open-source, and supports most .NET drawing library formats
**IronDrawing** is an open-source library originally developed by Iron Software that helps C# Software Engineers to replace `System.Drawing.Common` in .NET projects on Windows, macOS, and Linux platforms.
Developing class libraries and NuGet packages for .NET 5, 6, 7 & 8 that support graphics, images, and fonts _should_ be easy.
IronDrawing acts as a seamless bridge between all the new proposed .NET 5, 6, 7 & 8 graphics standards as they evolve - so you only need to develop for the **one you prefer**.
<div class="content-img-align-center">
<div class="center-image-wrapper">
<img src="/static-assets/drawing/irondrawing-get-started.webp" alt="IronDrawing is free, open-source, and supports most .NET drawing library formats" class="img-responsive add-shadow" width="645" height="618" />
</div>
</div>
<div class="hsg-featured-snippet">
<h2>Technical Steps to Avoid system.drawing.common is not supported on this platform exception</h2>
<ol>
<li>Implement <strong>System.drawing.common</strong> is not possible for .NET 6 and .NET 7 & 8 on Linux and macOS platforms</li>
<li>Using System.Drawing.Common on these platforms will face an exception message</li>
<li>Set <strong>System.Drawing.EnableUnixSupport</strong> runtime configuration to <strong>true</strong> for .NET 6</li>
<li>Support for System.Drawing.Common is no longer available in .NET 7 & 8</li>
<li>Use open-source library <strong>IronSoftware.Drawing</strong> to replace <strong>System.Drawing.Common</strong> for .NET 7</li>
</ol>
</div>
### Context
Microsoft .NET is a multi-platform, highly compatible software framework used by millions of software developers across the globe. Microsoft has [announced](https://learn.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only) a **breaking change** in which `System.Drawing.Common` will only be supported on Windows platforms.
This is problematic for .NET library developers who maintain cross-platform libraries that use `System.Drawing.Common` because Microsoft's [recommended action](https://learn.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only#recommended-action) requires you to rebuild your library to support non-Windows users. Volunteers and academics are expected to rebuild every NuGet package and class library to use **each** of the new suggested graphics libraries as they emerge, causing a technical debt which will slow adoption of modern .NET.
Ultimately, when we use .NET, we use NuGet.
_NuGet package developers are doing us all a favor by advancing .NET and pre-packaged code that would take thousands of hours to write ourselves every day._
This **breaking change** will slow NuGet development and could lead to abandoned or obsolete code libraries which .NET developers depend upon. We need to act now!
### Our Solution
An intermediary graphics format that converts between all the old and new graphics libraries.
As a class library developer, your public `Bitmap`, `Color`, `Rectangle`, `Font`, and `Size` Inputs and Outputs can be of only one type that supports all the new standards. Internally, you can continue to do what you like.
**IronDrawing is backward compatible with .NET Framework 4.62, supports all versions of .NET (including .NET 8).**
The development and release of IronDrawing solves this issue by providing an open-source solution to the lack of a uniform format for important classes such as `Bitmap`, `Color`, `Rectangle`, `Font`, and `Size`. `IronSoftware.Drawing` will seamlessly convert between the implementations of these types in `System.Drawing`, `Microsoft.Maui`, `SkiaSharp`, and `SixLabors` for you. This allows you, the developer, not to have to replace all instances of these classes within your library.
For [example](#anchor-anybitmap-example), if you are using `System.Drawing.Bitmap`, you may use IronDrawing's `AnyBitmap` class which has implicit conversions to any of these types: `System.Drawing.Bitmap`, `System.Drawing.Image`, `SkiaSharp.SKBitmap`, `SkiaSharp.SKImage`, `SixLabors.ImageSharp`, `Microsoft.Maui.Graphics.Platform.PlatformImage`.
### Why Are We Doing This for Free
We have developed IronDrawing because we at Iron Software are long-term senior .NET developers who care about the evolution of .NET and want it to grow and succeed. We love to see that .NET is growing and evolving, as seen with .NET 7. We use NuGet all day, and I'm sure you do too. We support and hope to encourage an easy transition to the future and away from `System.Drawing`.
We want all .NET class-library and NuGet development to be easier, so that the NuGet Ecosystem continues to thrive, and so that all .NET developers benefit.
## `IronSoftware.Drawing` Features
- **`AnyBitmap`:** A universally compatible Bitmap class. Implicit casting between `IronSoftware.Drawing.AnyBitmap` and the following supported:
- `System.Drawing.Bitmap`
- `System.Drawing.Image`
- `SkiaSharp.SKBitmap`
- `SkiaSharp.SKImage`
- `SixLabors.ImageSharp`
- `Microsoft.Maui.Graphics.Platform.PlatformImage`
- **Color:** A universally compatible Color class. Implicit casting between `IronSoftware.Drawing.Color` and the following supported:
- `System.Drawing.Color`
- `SkiaSharp.SKColor`
- `SixLabors.ImageSharp.Color`
- `SixLabors.ImageSharp.PixelFormats`
- **`Rectangle`:** A universally compatible Rectangle class. Implicit casting between `IronSoftware.Drawing.Rectangle` and the following supported:
- `System.Drawing.Rectangle`
- `SkiaSharp.SKRect`
- `SkiaSharp.SKRectI`
- `SixLabors.ImageSharp.Rectangle`
- **Font:** A universally compatible Font class. Implicit casting between `IronSoftware.Drawing.Font` and the following supported:
- `System.Drawing.Font`
- `SkiaSharp.SKFont`
- `SixLabors.Fonts.Font`
### Compatibility
**`IronSoftware.Drawing`** has cross-platform support compatibility with:
- .NET 8, .NET 7, .NET 6, .NET 5, .NET Core, .NET Standard, and .NET Framework 4.62+
- Windows, macOS, Linux, Docker, Azure, and AWS
## Installation
Installing the IronDrawing (`IronSoftware.Drawing`) NuGet package is quick and easy. Please install the package like this:
```shell
:InstallCmd Install-Package IronSoftware.System.Drawing
```
Alternatively, download directly from the [official NuGet website](https://www.nuget.org/packages/IronSoftware.System.Drawing).
Once installed, you can get started by adding `using IronSoftware.Drawing;` to the top of your C# code.
## Code Examples
### AnyBitmap Example
```csharp
:path=/static-assets/drawing/content-code-examples/get-started/anybitmap.cs
```
### Color Example
```csharp
:path=/static-assets/drawing/content-code-examples/get-started/color.cs
```
### Rectangle Example
```csharp
:path=/static-assets/drawing/content-code-examples/get-started/rectangle.cs
```
### Font Example
```csharp
:path=/static-assets/drawing/content-code-examples/get-started/font.cs
```
## Support Available
### License
The licensing information can be found here: [LICENSE.txt](https://github.com/iron-software/IronSoftware.System.Drawing/blob/master/LICENSE.txt)
### Contribute
If you would like to contribute to the IronDrawing open-source project, please read the [license](https://github.com/iron-software/IronSoftware.System.Drawing/blob/master/LICENSE.txt) before making a pull-request to the [repository on GitHub](https://github.com/iron-software/IronSoftware.System.Drawing).
### Information
For more information about Iron Software please visit our website: [https://ironsoftware.com/](https://ironsoftware.com/)
### Support from Iron Software
For general support and technical inquiries, please email us at: [support@ironsoftware.com](mailto:support@ironsoftware.com)
IronDrawing is free, open-source, and supports most .NET drawing library formats
IronDrawing is an open-source library originally developed by Iron Software that helps C# Software Engineers to replace System.Drawing.Common in .NET projects on Windows, macOS, and Linux platforms.
Developing class libraries and NuGet packages for .NET 5, 6, 7 & 8 that support graphics, images, and fonts should be easy.
IronDrawing acts as a seamless bridge between all the new proposed .NET 5, 6, 7 & 8 graphics standards as they evolve - so you only need to develop for the one you prefer.
Technical Steps to Avoid system.drawing.common is not supported on this platform exception
Implement System.drawing.common is not possible for .NET 6 and .NET 7 & 8 on Linux and macOS platforms
Using System.Drawing.Common on these platforms will face an exception message
Set System.Drawing.EnableUnixSupport runtime configuration to true for .NET 6
Support for System.Drawing.Common is no longer available in .NET 7 & 8
Use open-source library IronSoftware.Drawing to replace System.Drawing.Common for .NET 7
Context
Microsoft .NET is a multi-platform, highly compatible software framework used by millions of software developers across the globe. Microsoft has announced a breaking change in which System.Drawing.Common will only be supported on Windows platforms.
This is problematic for .NET library developers who maintain cross-platform libraries that use System.Drawing.Common because Microsoft's recommended action requires you to rebuild your library to support non-Windows users. Volunteers and academics are expected to rebuild every NuGet package and class library to use each of the new suggested graphics libraries as they emerge, causing a technical debt which will slow adoption of modern .NET.
Ultimately, when we use .NET, we use NuGet.
NuGet package developers are doing us all a favor by advancing .NET and pre-packaged code that would take thousands of hours to write ourselves every day.
This breaking change will slow NuGet development and could lead to abandoned or obsolete code libraries which .NET developers depend upon. We need to act now!
Our Solution
An intermediary graphics format that converts between all the old and new graphics libraries.
As a class library developer, your public Bitmap, Color, Rectangle, Font, and Size Inputs and Outputs can be of only one type that supports all the new standards. Internally, you can continue to do what you like.
IronDrawing is backward compatible with .NET Framework 4.62, supports all versions of .NET (including .NET 8).
The development and release of IronDrawing solves this issue by providing an open-source solution to the lack of a uniform format for important classes such as Bitmap, Color, Rectangle, Font, and Size. IronSoftware.Drawing will seamlessly convert between the implementations of these types in System.Drawing, Microsoft.Maui, SkiaSharp, and SixLabors for you. This allows you, the developer, not to have to replace all instances of these classes within your library.
For example, if you are using System.Drawing.Bitmap, you may use IronDrawing's AnyBitmap class which has implicit conversions to any of these types: System.Drawing.Bitmap, System.Drawing.Image, SkiaSharp.SKBitmap, SkiaSharp.SKImage, SixLabors.ImageSharp, Microsoft.Maui.Graphics.Platform.PlatformImage.
Why Are We Doing This for Free
We have developed IronDrawing because we at Iron Software are long-term senior .NET developers who care about the evolution of .NET and want it to grow and succeed. We love to see that .NET is growing and evolving, as seen with .NET 7. We use NuGet all day, and I'm sure you do too. We support and hope to encourage an easy transition to the future and away from System.Drawing.
We want all .NET class-library and NuGet development to be easier, so that the NuGet Ecosystem continues to thrive, and so that all .NET developers benefit.
IronSoftware.Drawing Features
AnyBitmap: A universally compatible Bitmap class. Implicit casting between IronSoftware.Drawing.AnyBitmap and the following supported:
System.Drawing.Bitmap
System.Drawing.Image
SkiaSharp.SKBitmap
SkiaSharp.SKImage
SixLabors.ImageSharp
Microsoft.Maui.Graphics.Platform.PlatformImage
Color: A universally compatible Color class. Implicit casting between IronSoftware.Drawing.Color and the following supported:
System.Drawing.Color
SkiaSharp.SKColor
SixLabors.ImageSharp.Color
SixLabors.ImageSharp.PixelFormats
Rectangle: A universally compatible Rectangle class. Implicit casting between IronSoftware.Drawing.Rectangle and the following supported:
System.Drawing.Rectangle
SkiaSharp.SKRect
SkiaSharp.SKRectI
SixLabors.ImageSharp.Rectangle
Font: A universally compatible Font class. Implicit casting between IronSoftware.Drawing.Font and the following supported:
System.Drawing.Font
SkiaSharp.SKFont
SixLabors.Fonts.Font
Compatibility
IronSoftware.Drawing has cross-platform support compatibility with:
Once installed, you can get started by adding using IronSoftware.Drawing; to the top of your C# code.
Code Examples
AnyBitmap Example
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")
Color Example
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}")
Rectangle Example
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)
Font Example
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
Support Available
License
The licensing information can be found here: LICENSE.txt
Contribute
If you would like to contribute to the IronDrawing open-source project, please read the license before making a pull-request to the repository on GitHub.
Curtis Chau holds a Bachelor’s degree in Computer Science (Carleton University) and specializes in front-end development with expertise in Node.js, TypeScript, JavaScript, and React. Passionate about crafting intuitive and aesthetically pleasing user interfaces, Curtis enjoys working with modern frameworks and creating well-structured, visually appealing manuals.