IRONSOFTWAREHOME

C# Bitmap Library to Replace System.Drawing.Common in .NET

Curtis Chau
Curtis Chau
Updated: 22 de abril de 2026

IronDrawing é gratuito, de código aberto e suporta a maioria dos formatos de biblioteca de desenho .NET.

IronDrawing é uma biblioteca de código aberto originalmente desenvolvida pela Iron Software que ajuda Engenheiros de Software C# a substituir System.Drawing.Common em projetos .NET nas plataformas Windows, macOS e Linux.

Desenvolver bibliotecas de classes e pacotes NuGet for .NET 5, 6, 7 e 8 que suportem gráficos, imagens e fontes deveria ser fácil.

O IronDrawing atua como uma ponte perfeita entre todos os novos padrões gráficos propostos para o .NET 5, 6, 7 e 8 à medida que evoluem - assim você só precisa desenvolver para aquele que preferir .

IronDrawing é gratuito, de código aberto e suporta a maioria dos formatos de biblioteca de desenho .NET.

Contexto

O Microsoft .NET é uma estrutura de software multiplataforma e altamente compatível, utilizada por milhões de desenvolvedores de software em todo o mundo. A Microsoft anunciou uma mudança substancial na qual System.Drawing.Common só será suportada em plataformas Windows.

Isso é problemático para desenvolvedores de bibliotecas .NET que mantêm bibliotecas multiplataforma que usam System.Drawing.Common porque a ação recomendada da Microsoft exige que você reconstrua sua biblioteca para suportar usuários não-Windows. Espera-se que voluntários e acadêmicos reconstruam todos os pacotes NuGet e bibliotecas de classes para usar cada uma das novas bibliotecas gráficas sugeridas à medida que forem surgindo, causando uma dívida técnica que retardará a adoção do .NET moderno.

Em última análise, quando usamos o .NET, usamos o NuGet.

Os desenvolvedores de pacotes NuGet estão nos fazendo um grande favor ao aprimorar o .NET e disponibilizar código pré-empacotado que levaria milhares de horas para escrevermos manualmente todos os dias.

Essa alteração incompatível com versões anteriores irá desacelerar o desenvolvimento do NuGet e poderá levar ao abandono ou à obsolescência de bibliotecas de código das quais os desenvolvedores .NET dependem. Precisamos agir agora!

Nossa solução

Um formato gráfico intermediário que converte entre todas as bibliotecas gráficas antigas e novas.

Como desenvolvedor de bibliotecas de classe, suas Entradas e Saídas públicas Bitmap, Color, Rectangle, Font, e Size podem ser de apenas um tipo que suporte todos os novos padrões. Internamente, você pode continuar fazendo o que gosta.

O IronDrawing é compatível com versões anteriores do .NET Framework 4.62 e suporta todas as versões do .NET (incluindo o .NET 8).

O desenvolvimento e lançamento do IronDrawing resolve esse problema ao fornecer uma solução de código aberto para a falta de um formato uniforme para classes importantes como Bitmap, Color, Rectangle, Font, e Size. IronSoftware.Drawing irá converter perfeitamente entre as implementações desses tipos em System.Drawing, Microsoft.Maui, SkiaSharp, e SixLabors para você. Isso permite que você, o desenvolvedor, não precise substituir todas as instâncias dessas classes em sua biblioteca.

Por exemplo, se você estiver usando System.Drawing.Bitmap, você pode usar a classe AnyBitmap do IronDrawing que tem conversões implícitas para qualquer um desses tipos: System.Drawing.Bitmap, System.Drawing.Image, SkiaSharp.SKBitmap, SkiaSharp.SKImage, SixLabors.ImageSharp, Microsoft.Maui.Graphics.Platform.PlatformImage.

Por que estamos fazendo isso de graça?

Desenvolvemos o IronDrawing porque nós, da Iron Software, somos desenvolvedores .NET experientes e dedicados, que se preocupam com a evolução do .NET e desejam seu crescimento e sucesso. Adoramos ver que o .NET está crescendo e evoluindo, como podemos ver com o .NET 7. Usamos o NuGet o dia todo, e tenho certeza de que você também. Apoiamos e esperamos incentivar uma transição fácil para o futuro e longe de System.Drawing.

Queremos que todo o desenvolvimento de bibliotecas de classes .NET e do NuGet seja mais fácil, para que o ecossistema NuGet continue a prosperar e para que todos os desenvolvedores .NET se beneficiem.

Recursos IronSoftware.Drawing

  • AnyBitmap: Uma classe Bitmap universalmente compatível. Conversão implícita entre IronSoftware.Drawing.AnyBitmap e os seguintes suportados:
    • System.Drawing.Bitmap
    • System.Drawing.Image
    • SkiaSharp.SKBitmap
    • SkiaSharp.SKImage
    • SixLabors.ImageSharp
    • Microsoft.Maui.Graphics.Platform.PlatformImage
  • Cor : Uma classe de cor universalmente compatível. Conversão implícita entre IronSoftware.Drawing.Color e os seguintes suportados:
    • System.Drawing.Color
    • SkiaSharp.SKColor
    • SixLabors.ImageSharp.Color
    • SixLabors.ImageSharp.PixelFormats
  • Rectangle: Uma classe Rectangle universalmente compatível. Conversão implícita entre IronSoftware.Drawing.Rectangle e os seguintes suportados:
    • System.Drawing.Rectangle
    • SkiaSharp.SKRect
    • SkiaSharp.SKRectI
    • SixLabors.ImageSharp.Rectangle
  • Fonte : Uma classe de fonte universalmente compatível. Conversão implícita entre IronSoftware.Drawing.Font e os seguintes suportados:
    • System.Drawing.Font
    • SkiaSharp.SKFont
    • SixLabors.Fonts.Font

Compatibilidade

IronSoftware.Drawing tem compatibilidade de suporte multiplataforma com:

  • .NET 8, .NET 7, .NET 6, .NET 5, .NET Core, .NET Standard e .NET Framework 4.62+
  • Windows, macOS, Linux, Docker, Azure e AWS

Instalação

Instalar o pacote NuGet IronDrawing (IronSoftware.Drawing) é rápido e fácil. Instale o pacote da seguinte forma:

PM > Install-Package IronSoftware.System.Drawing

Alternativamente, faça o download diretamente do site oficial do NuGet .

Uma vez instalado, você pode começar adicionando using IronSoftware.Drawing; ao topo do seu código C#.

Exemplos de código

Exemplo AnyBitmap

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");

Exemplo de cor

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}");

Exemplo de retângulo

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);

Exemplo de fonte

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}");
}

Suporte disponível

Licença

As informações sobre a licença podem ser encontradas aqui: LICENSE.txt

Contribuir

Se você deseja contribuir para o projeto de código aberto IronDrawing, leia a licença antes de enviar uma solicitação de pull request para o repositório no GitHub .

Informação

Para obter mais informações sobre a Iron Software , visite nosso site:https://ironsoftware.com/

Suporte da Iron Software

Para suporte geral e dúvidas técnicas, envie um e-mail para:support@ironsoftware.com

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.

...
Leia mais

Pronto para começar?

Nuget Downloads 19,661,086Versão:2025.3recém-lançado

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.
Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.