GitHub - iron-software/IronSoftware.System.Drawing: An open-source System.Drawing.Common replacement for .NET 5 and above on all platforms. Bringing together System.Drawing, Maui, and ImageSharp's Bitmap, Image, Font, and Shape types via an agnostic free NuGet package. (original) (raw)
IronSoftware.Drawing - Image, Color, Rectangle, and Font class for .NET Applications
IronSoftware.Drawing is an open-source library originally developed by Iron Software that helps C# Software Engineers to replace System.Drawing.Common in .NET projects.
Table of Contents
IronSoftware.Drawing Features:
- AnyBitmap: A universally compatible Bitmap class. Implicit casting between
IronSoftware.Drawing.AnyBitmapand following popular Bitmap/Image formats supported:
| Implicit Casting Support | To AnyBitmap Supported | From AnyBitmap 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.Colorand following popular Color formats supported:
| Implicit Casting Support | To Color Supported | From Color Supported |
|---|---|---|
| SkiaSharp.SKColor | ✅ | ✅ |
| SixLabors.ImageSharp.Color | ✅ | ✅ |
| SixLabors.ImageSharp.PixelFormats | ✅ | ✅ |
- Rectangle: A universally compatible Rectangle class. Implicit casting between
IronSoftware.Drawing.Rectangleand following popular Rectangle formats supported:
| Implicit Casting Support | To Rectangle Supported | From Rectangle Supported | To RectangleF Supported | From RectangleF Supported |
|---|---|---|---|---|
| System.Drawing.Rectangle | ✅ | ✅ | ||
| System.Drawing.RectangleF | ✅ | ✅ | ||
| SkiaSharp.SKRect | ✅ | ✅ | ||
| SkiaSharp.SKRectI | ✅ | ✅ | ||
| SixLabors.ImageSharp.Rectangle | ✅ | ✅ | ||
| SixLabors.ImageSharp.RectangleF | ✅ | ✅ |
- Size: A universally compatible Size class. Implicit casting between
IronSoftware.Drawing.Sizeand following popular Size formats supported:
| Implicit Casting Support | To Size Supported | From Size Supported | To SizeF Supported | From SizeF Supported |
|---|---|---|---|---|
| System.Drawing.Size | ✅ | ✅ | ||
| System.Drawing.SizeF | ✅ | ✅ | ||
| SkiaSharp.SKSize | ✅ | ✅ | ||
| SkiaSharp.SKSizeI | ✅ | ✅ | ||
| SixLabors.ImageSharp.Size | ✅ | ✅ | ||
| SixLabors.ImageSharp.SizeF | ✅ | ✅ | ||
| Microsoft.Maui.Graphics.Size | ✅ | ✅ | ||
| Microsoft.Maui.Graphics.SizeF | ✅ | ✅ |
- Font: A universally compatible Font class. Implicit casting between
IronSoftware.Drawing.Fontand following popular Font formats supported:
| Implicit Casting Support | To Font Supported | From Font Supported |
|---|---|---|
| System.Drawing.Font | ✅ | ✅ |
| SkiaSharp.SKFont | ✅ | ✅ |
| SixLabors.Fonts.Font | ✅ | ✅ |
- Point and PointF: Universally compatible Point and PointF classes. Implicit casting between
IronSoftware.Drawing.PointandIronSoftware.Drawing.PointFand the following supported:
| Implicit Casting Support | To Point Supported | From Point Supported | To PointF Supported | From PointF Supported |
|---|---|---|---|---|
| System.Drawing.Point | ✅ | ✅ | ||
| System.Drawing.PointF | ✅ | ✅ | ||
| SixLabors.ImageSharp.Point | ✅ | ✅ | ||
| SixLabors.ImageSharp.PointF | ✅ | ✅ | ||
| Microsoft.Maui.Graphics.Point | ✅ | ✅ | ||
| Microsoft.Maui.Graphics.PointF | ✅ | ✅ | ||
| SkiaSharp.SKPoint | ✅ | ✅ | ||
| SkiaSharp.SKPointI | ✅ | ✅ |
IronSoftware.Drawing has cross platform support compatibility with:
- .NET 9, .NET 8, .NET 7, .NET 6, .NET 5, .NET Core, Standard, and Framework
- Windows, macOS, Linux, Docker, Azure, and AWS
Installing the IronSoftware.Drawing NuGet package is quick and easy, please install the package like this:
PM> Install-Package IronSoftware.System.Drawing
Alternatively, download directly from the official NuGet website.
Once installed, you can get started by adding using IronSoftware.Drawing; to the top of your C# code.
AnyBitmap Code Example
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");
// Creates a Multi-page Tiff-style AnyBitmap from an Image array List bitmaps = new List() { AnyBitmap.FromFile("FILE_PATH_1"), AnyBitmap.FromFile("FILE_PATH_2") }; AnyBitmap anyBitmap = AnyBitmap.CreateMultiFrameTiff(bitmaps);
// Creates a Multi-page Tiff-style AnyBitmap from a fully qualified file path array List imagePaths = new List() { "FILE_PATH_1", "FILE_PATH_2" }; AnyBitmap anyBitmap = AnyBitmap.CreateMultiFrameTiff(imagePaths);
// Manipulate image frames int frameCount = anyBitmap.FrameCount; List frames = (List)anyBitmap.GetAllFrames;
Color Code Example
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" ironColor.GetLuminance();
// Gets the 32-bit ARGB value of this Color structure. ironColor.ToArgb();
Rectangle Code Example
using IronSoftware.Drawing;
// Create a new Rectangle object Rectangle rectangle = new Rectangle(5, 5, 50, 50);
// Create a new Rectangle object with MeasurementUnits Rectangle mmRectangle = new Rectangle(5, 5, 50, 50, MeasurementUnits.Millimeters);
// Convert between MeasurementUnits Rectangle pxRectangle = mmRectangle.ConvertTo(MeasurementUnits.Millimeters); // Or specify DPI Rectangle pxRectangleWithDPI = mmRectangle.ConvertTo(MeasurementUnits.Millimeters, 200);
// 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;
Size Code Example
using IronSoftware.Drawing;
// Create a new Size object Size size = new Size(50, 50);
// Casting between System.Drawing.Size and IronSoftware.Drawing.Size System.Drawing.Size systemSize = new System.Drawing.Size(150, 150); IronSoftware.Drawing.Size ironSize = systemSize;
ironSize.Width; ironSize.Height;
Font Code Example
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;
Support Available
For more information about Iron Software please visit our website: https://ironsoftware.com/
For general support and technical inquiries, please email us at: support@ironsoftware.com