Trabajo con imágenes en C# (.NET): guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con imágenes en C# (.NET): desde lo básico hasta técnicas avanzadas



El procesamiento de imágenes es una de las tareas clave en el desarrollo moderno. En el ecosistema C# (.NET), existen varias bibliotecas potentes para trabajar con gráficos, desde el integrado System.Drawing hasta soluciones multiplataforma modernas como ImageSharp y SkiaSharp. En este artículo, analizaremos en detalle los enfoques principales, proporcionaremos ejemplos de código y daremos recomendaciones prácticas.



1. Resumen de bibliotecas para trabajar con imágenes en .NET



La elección de la biblioteca depende de sus tareas y plataforma. Aquí hay tres opciones principales:



  • System.Drawing.Common — la biblioteca clásica de Microsoft, disponible en .NET 6+. Funciona a través de GDI+ en Windows, pero tiene limitaciones en Linux/macOS.
  • SixLabors.ImageSharp — una biblioteca completamente administrada y multiplataforma. Admite formatos JPEG, PNG, BMP, GIF, WebP. Ideal para aplicaciones web y procesamiento del lado del servidor.
  • SkiaSharp — un envoltorio sobre el motor Skia (utilizado en Chrome, Flutter). Proporciona alto rendimiento y amplias capacidades para gráficos 2D, incluyendo trabajo con imágenes, texto y gráficos vectoriales.


Para la mayoría de los proyectos modernos, se recomienda ImageSharp — es fácil de usar, se desarrolla activamente y no depende de la plataforma.



2. Instalación y configuración de las bibliotecas



Instalación a través del Administrador de paquetes NuGet (o .NET CLI):



// Para ImageSharpdotnet add package SixLabors.ImageSharp

// Para SkiaSharpdotnet add package SkiaSharp

// Para System.Drawing (si es necesario)dotnet add package System.Drawing.Common


3. Operaciones básicas con imágenes usando ImageSharp como ejemplo



Veamos las operaciones principales: carga, cambio de tamaño, recorte, aplicación de filtros y guardado.



3.1 Carga y visualización de información



using SixLabors.ImageSharp;using SixLabors.ImageSharp.PixelFormats;

using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ Console.WriteLine($"Ancho: {image.Width}, Alto: {image.Height}"); Console.WriteLine($"Formato de píxeles: {image.PixelType}");}


3.2 Cambio de tamaño manteniendo la proporción



using SixLabors.ImageSharp.Processing;

using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ int newWidth = 800; int newHeight = (int)((float)image.Height / image.Width * newWidth);

image.Mutate(x => x.Resize(newWidth, newHeight)); image.Save("output_resized.jpg");}


3.3 Recorte (crop) de la parte central



using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){    int cropSize = Math.Min(image.Width, image.Height);    var rect = new Rectangle(        (image.Width - cropSize) / 2,        (image.Height - cropSize) / 2,        cropSize,        cropSize    );

image.Mutate(x => x.Crop(rect)); image.Save("output_cropped.jpg");}


3.4 Aplicación de filtros (blanco y negro, desenfoque)



using SixLabors.ImageSharp.Processing;using SixLabors.ImageSharp.Processing.Processors.Transforms;

using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ // Filtro blanco y negro image.Mutate(x => x.Grayscale());

// Desenfoque gaussiano (radio 5) image.Mutate(x => x.GaussianBlur(5));

image.Save("output_filtered.jpg");}


4. Trabajo con formatos y calidad



ImageSharp permite establecer parámetros de guardado para cada formato:



using SixLabors.ImageSharp.Formats.Jpeg;

using (Image<Rgba32> image = Image.Load<Rgba32>("input.jpg")){ var encoder = new J

Recommendations