在 .NET 中用 C# 位图庫取代 System.Drawing.Common
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
- 不再支援 System.Drawing.Common 在 .NET 7 和 8 中使用
- 使用開源庫 IronSoftware.Drawing 替換 System.Drawing.Common 適用於 .NET7
上下文
Microsoft .NET 是一個多平台、高度兼容的軟體框架,全球數百萬軟體開發者都在使用。 Microsoft 已宣布一個重大變更,其中 System.Drawing.Common
只會在 Windows 平台上獲得支持。
這對於維護使用 System.Drawing.Common
的跨平台庫的 .NET 庫開發人員來說是有問題的,因為微軟的建議的行動需要您重建您的函式庫以支持非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
之間轉換這些類型的實現。 這允許您作為開發者,不必替換庫中這些類的所有實例。
For範例,如果您正在使用 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
支持以下類型:System.Drawing.Bitmap
System.Drawing.Image
SkiaSharp.SKBitmap
SkiaSharp.SKImage
SixLabors.ImageSharp
Microsoft.Maui.Graphics.Platform.PlatformImage
顏色:一個通用兼容的顏色類別。 隱式轉換
IronSoftware.Drawing.Color
支持以下類型:System.Drawing.Color
SkiaSharp.SKColor
SixLabors.ImageSharp.Color
SixLabors.ImageSharp.PixelFormats
Rectangle
:一個通用兼容的矩形類。 隱式轉換支援IronSoftware.Drawing.Rectangle
與以下類型之間:System.Drawing.Rectangle
SkiaSharp.SKRect
SkiaSharp.SKRectI
SixLabors.ImageSharp.Rectangle
字型:一個通用兼容的字型類別。 隱式轉換
IronSoftware.Drawing.Font
支援以下類型:System.Drawing.Font
SkiaSharp.SKFont
SixLabors.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 開源項目做出貢獻,請閱讀許可證在進行 pull-request 之前GitHub上的存儲庫.
資訊
有關 Iron Software 的更多資訊,請訪問我們的網站:https://ironsoftware.com/
來自 Iron Software 的支援
如需一般支援和技術詢問,請透過以下電子郵件與我們聯繫:mailto:support@ironsoftware.com