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;
}