C# - Convertendo Imagens


Neste artigo veremos como converter imagens entre os formatos suportados em uma aplicação Windows Forms usando a linguagem C#.

A teoria sobre o assunto pode ser consultada no link : http://msdn.microsoft.com/en-us/library/system.drawing.image.aspx

A base de todo o processo é a classe Image que é uma classe base abstrata que fornece funcionalidade para as classes descendentes Bitmap e Metafile.

Recursos usados

Criando o Projeto

Abra o Visual Studio 2012 Express for desktop e clique em New Project;

Selecione o template Visual C# -> Windows -> Windows Forms Application e informe o nome ConversorImagens;

A partir da ToolBox arraste e solte os seguintes controles no formulário form1.cs:

disponha os controles no formulário conforme o leiaute abaixo:

Vamos iniciar definindo os namespaces usados no formulário form1:

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

A classe Imaging permite realizar a conversão entre os tipos de formatos de imagens suportados.

O namespace System.Drawing.Imaging fornece funcionalidades avançadas de imagem GDI+.

A funcionalidade básica de elementos gráficos é fornecida pelo namespace System.Drawing.

No evento Load do formulário temos o código a seguir:

  private void Form1_Load(object sender, EventArgs e)
  {
            AjustaRadioButtons(false);
            btnConverterImagem.Enabled = false;
 }

A rotina AjustaRadioButtons() irá habilitar ou desabilitar os controles radiobuttons usados no formulário conforme o parâmetro passado:

private void AjustaRadioButtons(bool flag)
 {
            foreach (Control cntrl in Controls)
            {
                if (cntrl.GetType() == typeof(RadioButton))
                {
                    cntrl.Enabled = flag;
                }
            }
}

No evento Click do botão de comando Carregar Imagem temos o código a seguir:

 prprivate void btnCarregaImagem_Click(object sender, EventArgs e)
        {
            ofd1.CheckFileExists = true;
            ofd1.CheckPathExists = true;
            ofd1.FilterIndex = 2;
            ofd1.RestoreDirectory = true;
            ofd1.ReadOnlyChecked = true;
            ofd1.ShowReadOnly = true;
           
//
            ofd1.Filter = "*.jpg|*.jpg|*.bmp|*.bmp|*.gif|*.gif|*.png|*.png";
            if (ofd1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    picImagem.Image = Image.FromFile(ofd1.FileName);
                    AjustaRadioButtons(true);
                    btnConverterImagem.Enabled = true;
                }
                catch (SecurityException ex)
                {
                 
  // O usuário  não possui permissão para ler arquivos
                    MessageBox.Show("Erro de segurança Contate o administrador de segurança da rede.\n\n" +
                                                "Mensagem : " + ex.Message + "\n\n" +
                                                "Detalhes (enviar ao suporte):\n\n" + ex.StackTrace);
                }
                catch (Exception ex)
                {
                 
  // Não pode carregar a imagem (problemas de permissão)
                    MessageBox.Show("Não é possível exibir a imagem : " + ofd1.FileName
                                               + ". Você pode não ter permissão para ler o arquivo , ou " +
                                               " ele pode estar corrompido.\n\nErro reportado : " + ex.Message);
                }
            }
        }

O controle Open File Dialog - ofd1 - irá abrir uma janela para selecionar um arquivo. Abaixo temos as principais propriedades deste controle:

1- InitialDirectory - Representa o diretório a ser exibido quando a janela de diálogo aparecer pela primeira vez.
Ex: openFileDialog1.InitialDirectory = @"C:\";

Se a propriedade RestoreDirectory for definida como True a caixa de diálogo restaura o diretório atual antes de ser fechada.
Ex: openFileDialog1.RestoreDirectory = true;

2- Title - Usada para definir ou atribuir um título a janela de diálogo: Ex: openFileDialog1.Title = "Localizar Arquivos";

3- Default Extension - Representa a extensão padrão do arquivo a ser localizado: Ex: openFileDialog1.DefaultExt = "txt";

4- Filter - Representa o filtro da janela de diálogo que será usado para filtrar o tipo de arquivos a serem
carregados durante a localização. O exemplo abaixo exibe somente arquivos com extensão .txt:
Ex: openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";

5- FilterIndex - Representa o índice do filtro atualmente selecionado na janela de diálogo: Ex:openFileDialog1.FilterIndex = 2;

6- ChecFileExists - Indica se a janela de diálogo exibirá um aviso se o usuário especificar um nome de arquivo inexistente;
Ex: openFileDialog1.CheckFileExists = true;

7- CheckPathExists - Indica se a janela de diálogo exibirá um aviso se o usuário especificar um caminho inexistente;
Ex: openFileDialog1.CheckPathExists = true;

8- FileName - Representa o nome do arquivo selecionado na janela de diálogo. Ex: textBox1.Text = openFileDialog1.FileName;

9- MultiSelect - Se esta propriedade for definida como True pode-se selecionar mais de um arquivo e FileNames representará todos
os arquivos selecionados. Neste caso deve-se usar um laço foreach para exibir os arquivos selecionados.
     
this.openFileDialog1.Multiselect = true;
     foreach (String file in openFileDialog1.FileNames)
     {     MessageBox.Show(file);  }

10- ReadyOnlyChecked - Indica se a caixa de verificação estará selecionada: Ex: openFileDialog1.ReadOnlyChecked = true;

11- ShowReadyOnly - Indica se a caixa de verificação read-only estará disponível ou não. Ex: openFileDialog1.ReadOnlyChecked = true;

Após carregar a imagem e exibi-la no controle PictureBox - picImagem - basta selecionar o tipo de formato desejado para converter a imagem e clicar no botão - Converter Imagem - que no seu evento Click possui o seguinte código:

  private void btnConverterImagem_Click(object sender, EventArgs e)
        {
            String msg = "";
            Image imagemConvertida = picImagem.Image;
            sfd1.Filter = filtroAtribuicaoExtensao();
            if (sfd1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {

                if (rdbJPG.Checked)
                {
                    imagemConvertida.Save(sfd1.FileName, ImageFormat.Jpeg);
                    msg="Conversão realizada com sucesso.";
                }
                else if (rdbGIF.Checked)
                {
                    imagemConvertida.Save(sfd1.FileName, ImageFormat.Gif);
                    msg="Conversão realizada com sucesso.";
                }
                else if (rdbPNG.Checked)
                {
                    imagemConvertida.Save(sfd1.FileName, ImageFormat.Png);
                     msg="Conversão realizada com sucesso.";
                }
                else if (rdbBMP.Checked)
                {
                    imagemConvertida.Save(sfd1.FileName, ImageFormat.Bmp);
                     msg="Conversão realizada com sucesso.";
                }
                else if (rdbICON.Checked)
                {
                    imagemConvertida.Save(sfd1.FileName, ImageFormat.Icon);
                     msg="Conversão realizada com sucesso.";
                }
                else if (rdbEXIF.Checked)
                {
                    imagemConvertida.Save(sfd1.FileName, ImageFormat.Exif);
                     msg="Conversão realizada com sucesso.";
                }
                MessageBox.Show(msg);
            }
            else
            {
                MessageBox.Show("A imagem não é vlida");
            }
        }

Executando o projeto e selecionando um imagem a partir da caixa de diálogo teremos o resultado abaixo:

Ao clicar no botão Converter Imagem a caixa de diálogo Salvar arquivo irá solicitar o nome do arquivo e o local onde desejamos salvar a nova imagem.

Clicando no botão Salvar.

Teremos a conversão completada com sucesso.

Pegue o projeto completo aqui: ConversorImagens.zip

Veja os Destaques e novidades do SUPER DVD Visual Basic 2013 (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Mat 6:7 E, orando, não useis de vãs repetições, como os gentios; porque pensam que pelo seu muito falar serão ouvidos.

Mat 6:8 Não vos assemelheis, pois, a eles; porque vosso Pai sabe o que vos é necessário, antes de vós lho pedirdes.

        Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti