Cambiar el tamaño de una imagen en C#

Muhammad Maisam Abbas 16 febrero 2024
  1. Redimensionar una imagen con la clase Bitmap en C#
  2. Redimensionar una imagen con la función Graphics.DrawImage() en C#
  3. Conclusión
Cambiar el tamaño de una imagen en C#

En este tutorial, discutiremos métodos para redimensionar una imagen en C#.

Te guiaremos a través de todo el proceso, desde cargar la imagen original hasta guardar la versión redimensionada.

Redimensionar una imagen con la clase Bitmap en C#

La clase Bitmap proporciona muchos métodos para trabajar con imágenes en C#. La clase Bitmap obtiene los datos de píxeles de las imágenes. Podemos redimensionar una imagen inicializando el parámetro Size dentro del constructor de la clase Bitmap.

El siguiente ejemplo de código nos muestra cómo podemos redimensionar una imagen con el constructor de la clase Bitmap en C#.

using System;
using System.Drawing;
namespace resize_image {
  class Program {
    public static Image resizeImage(Image imgToResize, Size size) {
      return (Image)(new Bitmap(imgToResize, size));
    }
    static void Main(string[] args) {
      string path = "C:\\Images\\img1.jpg";
      Image img = Image.FromFile(path);
      Bitmap imgbitmap = new Bitmap(img);
      Image resizedImage = resizeImage(imgbitmap, new Size(200, 200));
    }
  }
}

Este código muestra el proceso completo de redimensionar una imagen usando la clase Bitmap en C#. Veamos cómo funciona.

Paso 1: Cargar la imagen original

Primero, debes cargar la imagen original usando el método Image.FromFile. Asegúrate de reemplazar "C:\\Images\\img1.jpg" por la ruta de tu propio archivo de imagen.

string path = "C:\\Images\\img1.jpg";
Image img = Image.FromFile(path);

Paso 2: Convertir la imagen en un objeto Bitmap

A continuación, conviertes la imagen cargada en un objeto Bitmap. Este paso es necesario para realizar la operación de redimensionamiento.

Bitmap imgBitmap = new Bitmap(img);

Paso 3: Redimensionar la imagen

Ahora viene la parte de redimensionamiento. La función resizeImage toma el objeto Bitmap y el tamaño deseado (new Size(200, 200)) y devuelve la imagen redimensionada.

Image resizedImage = ResizeImage(imgBitmap, new Size(200, 200));

Paso 4: Guardar la imagen redimensionada

Finalmente, puedes guardar la imagen redimensionada en un archivo usando el método Save. En este ejemplo, la imagen redimensionada se guarda como "resized.jpg". Puedes elegir el formato de la imagen guardada cambiando la extensión del archivo (por ejemplo, .jpg, .png, .bmp).

resizedImage.Save("resized.jpg");

Redimensionar una imagen con la función Graphics.DrawImage() en C#

La función Graphics.DrawImage() dibuja una imagen dentro de una ubicación especificada con dimensiones especificadas en C#. Con este método, podemos eliminar muchas limitaciones de redimensionar una imagen. El siguiente ejemplo de código nos muestra cómo podemos redimensionar una imagen con la función Graphics.DrawImage() en C#.

using System;
using System.Drawing;
namespace resize_image {
  class Program {
    public static Image resizeImage(Image image, int width, int height) {
      var destinationRect = new Rectangle(0, 0, width, height);
      var destinationImage = new Bitmap(width, height);

      destinationImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);

      using (var graphics = Graphics.FromImage(destinationImage)) {
        graphics.CompositingMode = CompositingMode.SourceCopy;
        graphics.CompositingQuality = CompositingQuality.HighQuality;

        using (var wrapMode = new ImageAttributes()) {
          wrapMode.SetWrapMode(WrapMode.TileFlipXY);
          graphics.DrawImage(image, destinationRect, 0, 0, image.Width, image.Height,
                             GraphicsUnit.Pixel, wrapMode);
        }
      }

      return (Image)destinationImage;
    }
    static void Main(string[] args) {
      string path = "C:\\Images\\img1.jpg";
      Image img = Image.FromFile(path);
      Bitmap imgbitmap = new Bitmap(img);
      Image resizedImage = resizeImage(imgbitmap, new Size(200, 200));
    }
  }
}

Veamos cómo funciona.

Paso 1: Cargar la imagen original

Primero, debes cargar la imagen original usando Image.FromFile. Asegúrate de reemplazar "C:\\Images\\img1.jpg" por la ruta de tu propio archivo de imagen.

string path = "C:\\Images\\img1.jpg";
Image img = Image.FromFile(path);

Paso 2: Crear un Bitmap de destino

Crea un objeto Bitmap de destino que contendrá la imagen redimensionada. Establece su resolución para que coincida con la imagen original usando SetResolution.

La función destinationImage.SetResolution() mantiene la resolución dpi de la imagen independientemente de su tamaño real.

var destinationRect = new Rectangle(0, 0, width, height);
var destinationImage = new Bitmap(width, height);

destinationImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);

Paso 3: Cambiar el tamaño de la imagen

Ahora, utilizamos Graphics.FromImage para obtener un objeto Graphics asociado con el Bitmap de destino. Configuramos el modo de composición y la calidad para obtener los mejores resultados.

using (var graphics = Graphics.FromImage(destinationImage)) {
  graphics.CompositingMode = CompositingMode.SourceCopy;
  graphics.CompositingQuality = CompositingQuality.HighQuality;

  using (var wrapMode = new ImageAttributes()) {
    wrapMode.SetWrapMode(WrapMode.TileFlipXY);
    graphics.DrawImage(image, destinationRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel,
                       wrapMode);
  }
}

La propiedad graphics.CompositingMode = CompositingMode.SourceCopy especifica que cuando se representa un color, este sobrescribe el color de fondo.

La propiedad graphics.CompositingQuality = CompositingQuality.HighQuality especifica que solo queremos que se representen imágenes de alta calidad.

La función wrapMode.SetWrapMode(WrapMode.TileFlipXY) evita los efectos de fantasma alrededor de los bordes de la imagen.

Paso 4: Guardar la imagen redimensionada

Finalmente, puedes guardar la imagen redimensionada en un archivo utilizando el método Save. En este ejemplo, la imagen redimensionada se guarda como "resized.jpg". Puedes elegir el formato de la imagen guardada cambiando la extensión del archivo (por ejemplo, .jpg, .png, .bmp).

resizedImage.Save("resized.jpg");

Conclusión

Cambiar el tamaño de las imágenes es una tarea común en el desarrollo de software, y C# ofrece múltiples enfoques para lograrlo. En este artículo, nos enfocamos en cambiar el tamaño de las imágenes utilizando la clase Bitmap. Recorrimos todo el proceso, desde cargar la imagen original hasta guardar la versión redimensionada.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Artículo relacionado - Csharp Image