Redimensionar uma imagem em C#

Muhammad Maisam Abbas 16 fevereiro 2024
  1. Redimensionar uma imagem com a Classe Bitmap em C#
  2. Redimensionar uma imagem com a função Graphics.DrawImage() em C#
  3. Conclusão
Redimensionar uma imagem em C#

Neste tutorial, discutiremos métodos para redimensionar uma imagem em C#.

Levaremos você por todo o processo, desde o carregamento da imagem original até a salvamento da versão redimensionada.

Redimensionar uma imagem com a Classe Bitmap em C#

A classe Bitmap fornece muitos métodos para trabalhar com imagens em C#. A classe Bitmap obtém os dados de pixel das imagens. Podemos redimensionar uma imagem inicializando o parâmetro Size dentro do construtor da classe Bitmap.

O exemplo de código a seguir mostra como redimensionar uma imagem com o construtor da classe Bitmap em 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 demonstra o processo completo de redimensionamento de uma imagem usando a classe Bitmap em C#. Vamos analisar como ele funciona.

Etapa 1: Carregar a Imagem Original

Primeiro, é necessário carregar a imagem original usando o método Image.FromFile. Certifique-se de substituir "C:\\Images\\img1.jpg" pelo caminho para o seu próprio arquivo de imagem.

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

Etapa 2: Converter a Imagem em um Bitmap

Em seguida, você converte a imagem carregada em um objeto Bitmap. Esta etapa é necessária para realizar a operação de redimensionamento.

Bitmap imgBitmap = new Bitmap(img);

Etapa 3: Redimensionar a Imagem

Agora vem a parte do redimensionamento. A função ResizeImage recebe o objeto Bitmap e o tamanho desejado (new Size(200, 200)) e retorna a imagem redimensionada.

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

Etapa 4: Salvar a Imagem Redimensionada

Por fim, você pode salvar a imagem redimensionada em um arquivo usando o método Save. Neste exemplo, a imagem redimensionada é salva como "resized.jpg". Você pode escolher o formato da imagem salva alterando a extensão do arquivo (por exemplo, .jpg, .png, .bmp).

resizedImage.Save("resized.jpg");

Redimensionar uma imagem com a função Graphics.DrawImage() em C#

A função Graphics.DrawImage() desenha uma imagem dentro de uma localização especificada com dimensões especificadas em C#. Com esse método, podemos eliminar muitas desvantagens de redimensionar uma imagem. O exemplo de código a seguir mostra como redimensionar uma imagem com a função Graphics.DrawImage() em 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));
    }
  }
}

Vamos analisar como ele funciona.

Etapa 1: Carregar a Imagem Original

Primeiro, é necessário carregar a imagem original usando Image.FromFile. Certifique-se de substituir "C:\\Images\\img1.jpg" pelo caminho para o seu próprio arquivo de imagem.

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

Etapa 2: Criar um Bitmap de Destino

Crie um objeto Bitmap de destino que irá armazenar a imagem redimensionada. Defina a sua resolução para corresponder à imagem original usando SetResolution.

A função destinationImage.SetResolution() mantém o dpi da imagem independentemente do seu tamanho real.

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

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

Passo 3: Redimensionar a Imagem

Agora, usamos Graphics.FromImage para obter um objeto Graphics associado ao Bitmap de destino. Configuramos o modo de composição e qualidade para obter os melhores 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);
  }
}

A propriedade graphics.CompositingMode = CompositingMode.SourceCopy especifica que, quando uma cor é renderizada, ela substitui a cor de fundo.

A propriedade graphics.CompositingQuality = CompositingQuality.HighQuality especifica que queremos apenas imagens de alta qualidade serem renderizadas.

A função wrapMode.SetWrapMode(WrapMode.TileFlipXY) impede o aparecimento de fantasmas ao redor das bordas da imagem.

Passo 4: Salvar a Imagem Redimensionada

Por fim, você pode salvar a imagem redimensionada em um arquivo usando o método Save. Neste exemplo, a imagem redimensionada é salva como "resized.jpg". Você pode escolher o formato da imagem salva alterando a extensão do arquivo (por exemplo, .jpg, .png, .bmp).

resizedImage.Save("resized.jpg");

Conclusão

Redimensionar imagens é uma tarefa comum no desenvolvimento de software e o C# oferece várias abordagens para isso. Neste artigo, focamos em redimensionar imagens usando a classe Bitmap. Percorremos todo o processo, desde o carregamento da imagem original até a salvamento da versão 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

Artigo relacionado - Csharp Image