在 .NET 中用 C# 位图庫取代 System.Drawing.Common

This article was translated from English: Does it need improvement?
Translated
View the article in English

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 圖形標準之間的無縫橋樑,隨著它們的演進,您只需要為您偏好的那一個進行開發。

IronDrawing 是免費、開源的,並支持大多數 .NET 繪圖庫格式

上下文

Microsoft .NET 是一個多平台、高度兼容的軟體框架,全球數百萬軟體開發者都在使用。 Microsoft 已宣布一個重大變更,其中 System.Drawing.Common 只會在 Windows 平台上獲得支持。

這對於維護使用 System.Drawing.Common 的跨平台庫的 .NET 庫開發人員來說是有問題的,因為微軟的建議的行動需要您重建您的函式庫以支持非Windows用戶。 志願者和學者預計將重建每個 NuGet 包和類庫,以使用他們出現時的每一個新建議的圖形庫,這將造成技術債務,從而減慢現代 .NET 的採用速度。

最終,當我們使用 .NET 時,我們使用 NuGet。

NuGet 套件開發者透過推進 .NET 和預先打包的代碼,每天為我們節省了數千小時的編寫工作,對我們所有人都是一種幫助。

重大更改將會減緩NuGet的開發進度,並可能導致.NET開發者所依賴的代碼庫被遺棄或變得過時。 我們需要立刻行動!

我們的解決方案

介於新舊圖形庫之間轉換的中介圖形格式。

作為類庫開發人員,您的公開BitmapColorRectangleFontSize輸入和輸出只能是支持所有新標準的一種類型。 在內部,你可以繼續做你喜歡的事情。

IronDrawing 具有向后兼容 .NET Framework 4.62 的功能,支持所有版本的 .NET(包括 .NET 8).

IronDrawing 的開發和發布通過提供一個開源解決方案來解決缺乏統一格式的問題,這些格式對於重要的類別如 BitmapColorRectangleFontSize 都是必需的。 IronSoftware.Drawing 將為您無縫地在 System.DrawingMicrosoft.MauiSkiaSharpSixLabors 之間轉換這些類型的實現。 這允許您作為開發者,不必替換庫中這些類的所有實例。

For範例,如果您正在使用 System.Drawing.Bitmap,您可以使用 IronDrawing 的 AnyBitmap 類,該類具有對以下類型的隱式轉換:System.Drawing.BitmapSystem.Drawing.ImageSkiaSharp.SKBitmapSkiaSharp.SKImageSixLabors.ImageSharpMicrosoft.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")
VB   C#

顏色範例

: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()
VB   C#

矩形範例

: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
VB   C#

字體範例

: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
VB   C#

支援可用

許可證

授權資訊可以在此找到:LICENSE.txt

參與貢獻

如果您想要為 IronDrawing 開源項目做出貢獻,請閱讀許可證在進行 pull-request 之前GitHub上的存儲庫.

資訊

有關 Iron Software 的更多資訊,請訪問我們的網站:https://ironsoftware.com/

來自 Iron Software 的支援

如需一般支援和技術詢問,請透過以下電子郵件與我們聯繫:mailto:support@ironsoftware.com