Biblioteca Bitmap C# para reemplazar System.Drawing.Common
en .NET
IronDrawing es gratuito, de código abierto y compatible con la mayoría de los formatos de bibliotecas de dibujo .NET.
IronDrawing es una biblioteca de código abierto desarrollada originalmente por Iron Software que ayuda a los ingenieros de software de C# a sustituir System.Drawing.Common
en proyectos .NET en plataformas Windows, macOS y Linux.
Desarrollar bibliotecas de clases y paquetes NuGet para .NET 5, 6, 7 y 8 que admitan gráficos, imágenes y fuentes debería ser fácil.
IronDrawing actúa como un puente sin fisuras entre todos los nuevos estándares gráficos propuestos para .NET 5, 6, 7 y 8 a medida que evolucionan, por lo que sólo tendrá que desarrollar para el que prefiera.
![IronDrawing es gratuito, de código abierto y compatible con la mayoría de los formatos de bibliotecas de dibujo .NET.](/static-assets/drawing/irondrawing-get-started.webp)
Pasos técnicos a evitar system.drawing.common no es compatible con esta excepción de plataforma
- Implementar System.drawing.common no es posible para .NET6 y .NET 7 & 8 en plataformas Linux y MacOs
- Usar System.Drawing.Common en estas plataformas se enfrentará con el mensaje de excepción
- Establecer System.Drawing.EnableUnixSupport configuración en tiempo de ejecución a verdadero para .NET6
- La compatibilidad con System.Drawing.Common ya no está disponible en .NET 7 y 8
- Utilizar una biblioteca de código abierto IronSoftware.Drawing sustituir System.Drawing.Common para .NET7
Contexto
Microsoft .NET es un marco de software multiplataforma y altamente compatible utilizado por millones de desarrolladores de software de todo el mundo. Microsoft ha anunciado un cambio de última hora por el que System.Drawing.Common
sólo será compatible con plataformas Windows.
Esto es problemático para los desarrolladores de bibliotecas .NET que mantienen bibliotecas multiplataforma que utilizan System.Drawing.Common
porque la directiva de Microsoft acción recomendada le obliga a reconstruir su biblioteca para que sea compatible con usuarios de sistemas operativos distintos de Windows. Se espera que voluntarios y académicos reconstruyan cada paquete NuGet y biblioteca de clases para utilizar cada de las nuevas bibliotecas gráficas sugeridas a medida que vayan surgiendo, lo que provocará una deuda técnica que ralentizará la adopción de .NET moderno.
En última instancia, cuando utilizamos .NET, utilizamos NuGet.
Los desarrolladores de paquetes NuGet nos hacen un favor a todos con el avance de .NET y el código preempaquetado que a nosotros nos llevaría miles de horas escribir cada día.
Este cambio rupturista ralentizará el desarrollo de NuGet y podría dar lugar a bibliotecas de código abandonadas u obsoletas de las que dependen los desarrolladores .NET. Tenemos que actuar ya!
Nuestra solución
Un intermediario de formatos gráficos que convierte entre todas las bibliotecas gráficas antiguas y nuevas.
Como desarrollador de bibliotecas de clases, sus entradas y salidas públicas Bitmap
, Color
, Rectangle
, Font
y Size
sólo pueden ser de un tipo compatible con todos los nuevos estándares. Internamente, puedes seguir haciendo lo que quieras.
IronDrawing es compatible con .NET Framework 4.62 y con todas las versiones de .NET. (incluido .NET 8).
El desarrollo y lanzamiento de IronDrawing resuelve este problema proporcionando una solución de código abierto a la falta de un formato uniforme para clases importantes como Bitmap
, Color
, Rectangle
, Font
y Size
. IronSoftware.Drawingconvertirá sin problemas entre las implementaciones de este tipo en
System.Drawing,
Microsoft.Maui,
SkiaSharp, y
SixLabors` para usted. Esto le permite a usted, el desarrollador, no tener que reemplazar todas las instancias de estas clases dentro de su biblioteca.
Para ejemploSi estás usando System.Drawing.Bitmap
, puedes usar la clase AnyBitmap
de IronDrawing que tiene conversiones implícitas a cualquiera de estos tipos: System.Drawing.Bitmap,
System.Drawing.Image,
SkiaSharp.SKBitmap,
SkiaSharp.SKImage,
SixLabors.ImageSharp,
Microsoft.Maui.Graphics.Platform.PlatformImage`.
¿Por qué lo hacemos gratis?
Hemos desarrollado IronDrawing porque en Iron Software somos desarrolladores senior de .NET a largo plazo que nos preocupamos por la evolución de .NET y queremos que crezca y tenga éxito. Nos encanta ver que .NET crece y evoluciona, como se ha visto con .NET 7. Nosotros usamos NuGet todo el día, y seguro que usted también. Apoyamos y esperamos fomentar una transición fácil hacia el futuro y lejos de System.Drawing
.
Queremos que todo el desarrollo de bibliotecas de clases .NET y NuGet sea más fácil, para que el ecosistema NuGet siga prosperando y para que todos los desarrolladores .NET se beneficien.
Características de IronSoftware.Drawing
AnyBitmap
: Una clase Bitmap universalmente compatible. Casting implícito entreIronSoftware.Drawing.AnyBitmap
y los siguientes soportados:System.Drawing.Bitmap
System.Drawing.Image
SkiaSharp.SKBitmap
.SkiaSharp.SKImage
SixLabors.ImageSharp
Microsoft.Maui.Graphics.Platform.PlatformImage
- Color: Una clase de Color universalmente compatible. Casting implícito entre
IronSoftware.Drawing.Color
y los siguientes soportados:System.Drawing.Color
SkiaSharp.SKColor
SixLabors.ImageSharp.Color
SixLabors.ImageSharp.PixelFormats
- Rectángulo: Una clase Rectangle universalmente compatible. Casting implícito entre
IronSoftware.Drawing.Rectangle
y los siguientes soportados:System.Drawing.Rectangle
SkiaSharp.SKRect
SkiaSharp.SKRectI
SixLabors.ImageSharp.Rectangle
- Fuente: Una clase de Fuente universalmente compatible. Casting implícito entre
IronSoftware.Drawing.Font
y los siguientes soportados:System.Drawing.Font
SkiaSharp.SKFont
SixLabors.Fonts.Font
Compatibilidad
IronSoftware.Drawing
tiene compatibilidad multiplataforma con:
- .NET 8, .NET 7, .NET 6, .NET 5, .NET Core, .NET Standard y .NET Framework 4.62+.
- Windows, macOS, Linux, Docker, Azure y AWS
Instalación
Instalación del IronDrawing (IronSoftware.Drawing
) El paquete NuGet es rápido y sencillo. Por favor, instale el paquete así:
Install-Package IronSoftware.System.Drawing
También puede descargarse directamente de sitio web oficial de NuGet.
Una vez instalado, puede empezar añadiendo using IronSoftware.Drawing;
al principio de su código C#.
Ejemplos de códigos
Ejemplo de 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")
Ejemplo de color
: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()
Ejemplo de rectángulo
: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
Ejemplo de fuente
: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
Asistencia disponible
Licencia
La información sobre licencias puede consultarse aquí: LICENCIA.txt
Contribuir
Si desea contribuir al proyecto de código abierto IronDrawing, lea el documento licencia antes de hacer una petición de pull al en GitHub.
Información
Para más información sobre Iron Software, visite nuestro sitio web: https://ironsoftware.com/
Asistencia de Iron Software
Para asistencia general y consultas técnicas, envíenos un correo electrónico a: mailto:support@ironsoftware.com