IronDrawing 開始使用 C# Bitmap Library to Replace System.Drawing.Common in .NET Curtis Chau 更新:2026年1月31日 下載 IronDrawing NuGet 下載 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 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 圖形標準之間的無縫橋樑,隨著這些標準的演變,您只需針對您喜歡的標準進行開發即可。 避免出現"此平台不支援 system.drawing.common"異常的技術步驟 Implement **System.drawing.common** is not possible for .NET 6 and .NET 7 & 8 on Linux and macOS platform 在這些平台上使用 System.Drawing.Common 將會遇到例外訊息 將.NET 6 的**System.Drawing.EnableUnixSupport**運行時配置設為**true** .NET 7 和 8 不再支援 System.Drawing.Common。 使用開源程式庫**IronSoftware.Drawing**取代.NET 7 中的**System.Drawing.Common。** 情境 Microsoft .NET是一個跨平台、高度相容的軟體框架,被全球數百萬軟體開發人員使用。 微軟宣布了一項重大變更,其中 System.Drawing.Common 將僅在 Windows 平台上支援。 對於維護使用 System.Drawing.Common 的跨平台程式庫的.NET程式庫開發人員來說,這是一個問題,因為 Microsoft 建議的操作要求您重新建置程式庫以支援非 Windows 使用者。 志工和學者需要重新建構每個NuGet套件和類別庫,以便使用每個新建議的圖形庫,這將造成技術債務,從而減緩現代.NET的採用。 最終,當我們使用.NET時,我們會使用NuGet。 NuGet 套件開發者們正在為我們所有人做一件好事,他們推進了.NET 的發展,並提供了預先包裝程式碼,這些程式碼如果我們自己編寫,每天都需要花費數千小時。 這項重大變更將減緩NuGet 的開發速度,並可能導致.NET開發人員所依賴的程式碼庫被棄用或過時。 我們必須立即行動! 我們的解決方案 一種用於在所有新舊圖形庫之間進行轉換的中間圖形格式。 作為類庫開發者,您的公共輸入和輸出(Font 和 Size)只能是支援所有新標準的單一類型。 在內部,你可以繼續做你喜歡的事。 IronDrawing 向後相容.NET Framework 4.62,支援所有版本的.NET (包括.NET 8)。 IronDrawing 的開發和發布解決了這個問題,它為 Font 和 Size 等重要類缺乏統一格式的問題提供了一個開源解決方案。 IronSoftware.Drawing 將為您無縫地在 SkiaSharp 和 SixLabors 中的這些類型的實現之間進行轉換。 這樣一來,開發者就不必替換庫中所有此類實例了。 例如,如果您使用 System.Drawing.Bitmap,則可以使用 IronDrawing 的 Microsoft.Maui.Graphics.Platform.PlatformImage。 我們為什麼要免費做這件事 我們開發 IronDrawing 的原因是, Iron Software 的全體成員都是經驗豐富的.NET開發人員,我們關心.NET的發展,並希望它能夠成長和成功。 我們很高興看到.NET不斷發展壯大,例如.NET 7。我們每天都在使用NuGet ,我相信你們也是。 我們支持並希望鼓勵順利過渡到未來,擺脫 System.Drawing。 我們希望所有.NET類別程式庫和NuGet開發都能變得更輕鬆,從而使NuGet生態系統繼續蓬勃發展,並使所有.NET開發人員受益。 IronSoftware.Drawing 功能 AnyBitmap : 一個通用的 Bitmap 類別。 支援 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 : 一個通用的 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; 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"); $vbLabelText $csharpLabel 顏色範例 :path=/static-assets/drawing/content-code-examples/get-started/color.cs 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}"); $vbLabelText $csharpLabel 矩形範例 :path=/static-assets/drawing/content-code-examples/get-started/rectangle.cs 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); $vbLabelText $csharpLabel 字體範例 :path=/static-assets/drawing/content-code-examples/get-started/font.cs 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}"); } $vbLabelText $csharpLabel 可提供的支持 執照 許可資訊請參閱此處: LICENSE.txt 貢獻 如果您想為 IronDrawing 開源專案做出貢獻,請在向GitHub上的儲存庫提交 pull request 之前閱讀許可證。 資訊 如需了解更多關於Iron Software 的信息,請訪問我們的網站:https://ironsoftware.com/ Iron Software提供的支持 如需一般支援和技術諮詢,請發送電子郵件至:mailto:support@ironsoftware.com Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 準備好開始了嗎? Nuget 下載 15,421,227 | 版本: 2025.3 剛剛發布 開始免費試用 免費 NuGet 下載 總下載量:15,421,227 查看許可證 還在捲動嗎? 想要快速證明? PM > Install-Package IronSoftware.System.Drawing 執行範例 觀看您的 HTML 變成 PDF。 免費 NuGet 下載 總下載量:15,421,227 查看許可證