Pesquisar

13 de out de 2007

Diminuindo fotos automaticamente

Criei esse programa pra diminuir algumas fotos de forma automatica. As vezes deixamos a câmera digital no modo com mais alta resolução e isso vai consumindo o HD. No exemplo iremos diminuir a foto pra largura ou altura(o que for maior) de 640px.

Vamos precisar de um Button, um CheckBox e uma ProgressBar:



Vamos criar o método que irá gerar a foto menor:

private void GravarThumb (FileInfo Arquivo)
{
   Bitmap bm;
   Bitmap thumb;
   int altura;
   int largura;

   bm = (Bitmap)Bitmap.FromFile(Arquivo.FullName);

   if(bm.Width > 640 || bm.Height > 640)
   {
      altura = (int)(640f/ bm.Width * bm.Height);
      if(altura > 640)
      {
         largura = (int)(640f/ bm.Height * bm.Width);
         thumb = new Bitmap(bm, new Size(largura, 640));
      }
      else
      {
         thumb = new Bitmap(bm, new Size(640, altura));
      }
   }
   else
   {
      thumb = new Bitmap(bm);
   } 
   thumb.Save(Arquivo.DirectoryName + "/tn_" + Arquivo.Name, System.Drawing.Imaging.ImageFormat.Jpeg);
}

E dentro do evento Click do Button:

if
   (folderBrowser.ShowDialog() ==
DialogResult.OK)
   {
   DirectoryInfo d = new DirectoryInfo(folderBrowser.SelectedPath);
   FileInfo[] Arquivos;

   if(chkIncluirSubPastas.Checked)
       Arquivos = d.GetFiles("*.jpg",SearchOption.AllDirectories);
   else
       Arquivos = d.GetFiles("*.jpg",SearchOption.TopDirectoryOnly);

   progressBar1.Maximum = Arquivos.Length;

   foreach(FileInfo Arquivo in Arquivos)
   {
      GravarThumb(Arquivo);
      progressBar1.Value++;
      Application.DoEvents();
   }
   progressBar1.Value = 0;
}

Nenhum comentário: