在.NET中替换 "System.Drawing.Common "的 C# 位图库
IronDrawing 免费、开源,支持大多数 .NET 绘图库格式。
IronDrawing 是由 Iron Software 最初开发的开源库,旨在帮助 C# 软件工程师在 Windows、macOS 和 Linux 平台上的 .NET 项目中替换 System.Drawing.Common
。
开发支持图形、图像和字体的 .NET 5、6、7 和 8 的类库和 NuGet 包 应该 是容易的。
IronDrawing 充当所有新提议的 .NET 5、6、7 和 8 图形标准之间的无缝桥梁,随着它们的发展 - 因此您只需要为您偏好的那个进行开发。
避免 system.drawing.common 在此平台上不支持异常的技术步骤
- 实施 System.drawing.common 无法在 Linux 和 MacOs 平台上运行 .NET6 和 .NET 7 & 8
- 在这些平台上使用 System.Drawing.Common 会出现异常信息
- 设置 System.Drawing.EnableUnixSupport 运行时配置为 真 适用于 .NET6
- 在 .NET 7 和 8 中不再支持 System.Drawing.Common
- 使用开源图书馆 IronSoftware.Drawing 以取代 System.Drawing.Common 适用于 .NET7
上下文
Microsoft .NET 是一个多平台、高兼容性的软件框架,被全球数百万软件开发者使用。 Microsoft 已经宣布一个重大变更,其中System.Drawing.Common
只会在Windows平台上得到支持。
这对于维护使用System.Drawing.Common
的跨平台库的.NET库开发者来说是有问题的,因为Microsoft的建议采取的行动需要您重新构建库以支持非Windows用户。 志愿者和学者预计将重建每个NuGet包和类库,以使用新推荐的图形库,这将造成技术债务,从而减缓现代.NET的采用速度。
最终,当我们使用 .NET 时,我们使用 NuGet。
NuGet 包开发者通过推动 .NET 和预打包代码的发展,每天为我们节省了数千小时的编码时间,这对我们所有人都是一种恩惠。
这一重大变更将会减缓NuGet的开发,并可能导致.NET开发者所依赖的代码库被遗弃或变得过时。 我们现在需要采取行动。!
我们的解决方案
介于所有旧版和新版图形库之间转换的中间图形格式。
作为一个类库开发者,你的公共Bitmap
、Color
、Rectangle
、Font
和Size
输入和输出只能是支持所有新标准的一种类型。 在内部,你可以继续做你喜欢的事情。
IronDrawing 与 .NET Framework 4.62 向后兼容,支持所有版本的 .NET(包括 .NET 8).**
IronDrawing的开发和发布通过提供一个开源解决方案来解决Bitmap
、Color
、Rectangle
、Font
和Size
等重要类缺乏统一格式的问题。 IronSoftware.Drawing
将为您无缝转换 System.Drawing
、Microsoft.Maui
、SkiaSharp
和 SixLabors
中这些类型的实现。 这使得您作为开发者无需在您的库中替换这些类的所有实例。
对于范例如果您使用的是 System.Drawing.Bitmap
,您可以使用 IronDrawing 的 AnyBitmap
类,该类可以隐式转换为这些类型中的任何一种:System.Drawing.Bitmap、
System.Drawing.Image、
SkiaSharp.SKBitmap、
SkiaSharp.SKImage、
SixLabors.ImageSharp、
Microsoft.Maui.Graphics.Platform.PlatformImage`。
为什么我们免费做这个
我们在Iron Software开发了IronDrawing,因为我们是长期的高级.NET开发者,关心.NET的发展,并希望它能够成长并取得成功。 我们很高兴看到 .NET 在不断成长和发展,正如 .NET 7 所展示的。 我们整天都在使用 NuGet,我相信你也是如此。 我们支持并希望促进向未来的过渡,并远离System.Drawing
。
我们希望所有的 .NET 类库和 NuGet 开发都能变得更加容易,以便 NuGet 生态系统继续繁荣发展,使所有 .NET 开发者受益。
IronSoftware.Drawing
功能
AnyBitmap
:一个通用兼容的位图类。 隐式转换支持IronSoftware.Drawing.AnyBitmap
和以下类型:- 系统.绘图.位图
- 系统.绘图.图像 SkiaSharp.SKBitmap
SkiaSharp.SKImage
- SixLabors.ImageSharp Microsoft.Maui.Graphics.Platform.PlatformImage
- 颜色:一个通用兼容的颜色类。 隐式转换支持在
IronSoftware.Drawing.Color
和以下内容之间:System.Drawing.Color
SkiaSharp.SKColor
SixLabors.ImageSharp.ColorSixLabors.ImageSharp.PixelFormats
Rectangle
:一个通用兼容的矩形类。 支持IronSoftware.Drawing.Rectangle
与以下内容之间的隐式转换:System.Drawing.Rectangle
SkiaSharp.SKRect SkiaSharp.SKRectISixLabors.ImageSharp.Rectangle
- 字体:一个通用兼容的字体类。 隐式转换支持以下内容:
IronSoftware.Drawing.Font
。System.Drawing.Font
SkiaSharp.SKFontSixLabors.Fonts.Font
兼容性
IronSoftware.Drawing
具有与以下平台的跨平台支持兼容性:
- .NET 8、.NET 7、.NET 6、.NET 5、.NET Core、.NET Standard 和 .NET Framework 4.62+
- Windows、macOS、Linux、Docker、Azure 和 AWS
安装
安装IronDrawing(IronSoftware.Drawing)NuGet 包安装快速且简便。 请按照以下方式安装包:
Install-Package IronSoftware.System.Drawing
或者直接从NuGet 官方网站.
安装后,您可以通过在 C# 代码顶部添加 using IronSoftware.Drawing;
来开始使用。
代码示例
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")
颜色示例
: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()
矩形示例
: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
字体示例
: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
可提供的支持
许可证
许可信息可以在这里找到:LICENSE.txt
贡献
如果您想为IronDrawing开源项目做出贡献,请阅读许可证在向仓库.
信息
有关Iron Software的更多信息,请访问我们的网站:https://ironsoftware.com/
Iron Software的支持
有关一般支持和技术查询,请通过以下电子邮件与我们联系:mailto:support@ironsoftware.com