C# - Redimensionando Imagens


Neste tutorial eu vou mostrar como podemos redimensionar imagens usando a linguagem C#.

Abra o Visual C# 2010 Express Edition e no menu File clique em New Project selecionando o template Windows Forms Application e informando o nome RedimensionandoImagens;

Vamos definir uma interface com o usuário no formulário form1.cs usando os controles Button, TextBox, Label, NumeriUpDown e PictureBox, conforme o leiaute abaixo:

Controles usados no formulário form1.cs:
  • btnProcurarImagem
  • btnRedimensionarImagem
  • btnSalvarImagem
  • txtOrigemImagem
  • txtDestinoImagem
  • nupImagem
  • lblTamanhoOriginal
  • lblNovoTamanhoImagem
  • picImagem

Em seguida vamos definir o código do formulário.

Para iniciar vamos declarar os namespaces usados:

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

1- No evento Click do botão Procurar Imagem que abre a caixa de diálogo OpenFileDialog para selecionar uma imagem e exibe a imagem no controle PictureBox exibindo suas dimensões originais;

      private void btnProcurarImagem_Click(object sender, EventArgs e)
        {
            OpenFileDialog abrirImagem = new OpenFileDialog();
            DialogResult resultado = abrirImagem.ShowDialog();
            if (resultado == DialogResult.OK)
            {
                //Carrega imagem no picture box e define a propriedade size da imagem como normal
                picImagem.Load(abrirImagem.FileName);
                picImagem.SizeMode = PictureBoxSizeMode.Normal;

                //Armazena o local da origem no textbox.
                txtOrigemImagem.Text = abrirImagem.FileName;

                //Retorna a altura e lagurada da imagem e armazena na varivavel tamanhoOriginalImagem
                int imgWidth = picImagem.Image.Width;
                int imgHeight = picImagem.Image.Height;
                tamanhoOriginalImagem = new Size(imgWidth, imgHeight);

                string imgSize = "Width " + imgWidth + " px  Height " + imgHeight + " px";
                lblTamanhoOriginal.Text = imgSize;
            }
        }

2- Código do método EscalaPercentual que redimensiona a imagem e retorna um objeto Imagem que é redimensionado pelo percentual definido;

    static Image EscalaPercentual(Image imgFoto, int Percentual)
        {
            float nPorcentagem = ((float)Percentual / 100);

            int fonteLargura = imgFoto.Width;     //armazena a largura original da imagem origem
            int fonteAltura = imgFoto.Height;   //armazena a altura original da imagem origem
            int origemX = 0;        //eixo x da imagem origem
            int origemY = 0;        //eixo y da imagem origem

            int destX = 0;          //eixo x da imagem destino
            int destY = 0;          //eixo y da imagem destino
            //Calcula a altura e largura da imagem redimensionada
            int destWidth = (int)(fonteLargura * nPorcentagem);
            int destHeight = (int)(fonteAltura * nPorcentagem);

            //Cria um novo objeto bitmap
            Bitmap bmImagem = new Bitmap(destWidth, destHeight, PixelFormat.Format24bppRgb);
            //Define a resolu~ção do bitmap.
            bmImagem.SetResolution(imgFoto.HorizontalResolution,imgFoto.VerticalResolution);
            //Crima um objeto graphics e defina a qualidade
            Graphics grImagem = Graphics.FromImage(bmImagem);
            grImagem.InterpolationMode = InterpolationMode.HighQualityBicubic;

            //Desenha a imge usando o método DrawImage() da classe grafica
            grImagem.DrawImage(imgFoto,
                new Rectangle(destX, destY, destWidth, destHeight),
                new Rectangle(origemX, origemY, fonteLargura, fonteAltura),
                GraphicsUnit.Pixel);

            grImagem.Dispose();  //libera o objeto grafico
            return bmImagem;
        }

3- O código do botão Redimensionar Imagem chama o método EscalaPercentual e redefine o tamanho da imagem exibindo-a no controle PictureBox;

  private void btnOK_Click(object sender, EventArgs e)
        {
            //Chama o método EscalaPercentual  que retorna a imagem 
            //redimensionada e armazena-a em uma varivael do tipo Image
            Image imagemEscalonada = EscalaPercentual(picImagem.Image, (int)nupImagem.Value);
            //Exibe a imagem no picture box.
            picImagem.Image = imagemEscalonada;       

            //Retorna a lagura e altura da imagem
            string imgSize = "Width " + imagemEscalonada.Width + " px  Height " + imagemEscalonada.Height + " px";
            lblNovoTamanhoImagem.Text = imgSize;
        }

4- Código do botão Salvar Imagem que abre uma caixa de diálogo SaveFileDialog e salva a imagem;

  private void btnSalvarImagem_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();       //Cria um objeto SaveFileDialog
            sfd.DefaultExt = "jpeg";                                  //Define a extensão padrão
            if (DialogResult.OK == sfd.ShowDialog())
            {
                string nomeArquivo = sfd.FileName;                          //Armazena o nome da arquivo na varivael
                txtDestinoImagem.Text = nomeArquivo;                    //Exibe o local de destino no TextBox
                Bitmap imgImage = new Bitmap(picImagem.Image);  //Cria um objeto do tipo Bitmap
                imgImage.Save(nomeArquivo, ImageFormat.Jpeg);   //Chama o método Save da classe Bitmap
            }
        }

Executando o projeto iremos obter:

A imagem original selecionada
A nova imagem redimensionada e salva

Pegue a primeira parte do projeto completo aqui: RedimensionandoImagens.zip

Rom 3:21 Mas agora, sem lei, tem-se manifestado a justiça de Deus, que é atestada pela lei e pelos profetas;
Rom 3:22
isto é, a justiça de Deus pela fé em Jesus Cristo para todos os que crêem; pois não há distinção.
Rom 3:23
Porque todos pecaram e destituídos estão da glória de Deus;

Rom 3:24
sendo justificados gratuitamente pela sua graça, mediante a redenção que há em Cristo Jesus,

Referências:


José Carlos Macoratti