Usuário com melhor resposta
c#: Fotos

Pergunta
-
Queria fazer um formulário no WindowsForm com uma programação que a pessoa adicionava algumas fotos e clicasse em um botão ai automaticamente criasse uma pequena apresentação de fotos simples
tem como fazer ?
alguém me ajuda por favor mostrando as linhas de códigos por favor
Respostas
-
Olá, segue um código que preparei aqui e vai criar uma fila de arquivos selecionados, e depois gerar thumb para cada uma das imagens, colocando _thumb no final do arquivo.
Veja que o tamanho está fixo, mas vc pode configurar isso ai. Se precisar.
private void btnSelecionar_Click(object sender, EventArgs e) { List<string> listaArquivos = new List<string>(); openFileDialog1.Filter = "imagens (*.jpg) | *.png; *.bmp; *.jpg; *.gif"; openFileDialog1.Multiselect = true; if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) { foreach (var item in openFileDialog1.FileNames) { switch (System.IO.Path.GetExtension(item).ToLower().Substring(1)) { case "jpg" : listaArquivos.Add(item); break; case "bmp": listaArquivos.Add(item); break; case "png": listaArquivos.Add(item); break; case "gif": listaArquivos.Add(item); break; default : // Não inserir. break; } } } if (listaArquivos.Count > 0) { processarImagens(listaArquivos); } } private void processarImagens(List<string> listaArquivos) { txtResultadoLog.Text = ""; string strExtensao = ""; foreach (var item in listaArquivos) { strExtensao = System.IO.Path.GetExtension(item).ToLower(); pictureBox1.Load(item); txtResultadoLog.AppendText("Processando arquivo: " + item + "\n"); this.Refresh(); Application.DoEvents(); Image image = Image.FromFile(item); Image thumb = image.GetThumbnailImage(120, 120, () => false, IntPtr.Zero); thumb.Save(item.Replace(strExtensao, "_thumb" + strExtensao)); System.Threading.Thread.Sleep(2000); } MessageBox.Show("Processo concluído."); }
Att, Lucio Rogerio
Espero ter ajudado, se ajudei, por favor "Vote como Útil", e se resolvi seu problema, clique em "Propor como Resposta".- Sugerido como Resposta CarlosEduardo Ferreira terça-feira, 16 de junho de 2015 21:12
- Marcado como Resposta Nicolas Campos terça-feira, 16 de junho de 2015 21:59
terça-feira, 16 de junho de 2015 21:12 -
Nicolas,
acredito que o problema possa ter haver com a variável failecount.
Faça o seguinte:
public partial class Form1 : Form { int failemax = 0; int failecount = 0; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //timer1.Enabled = true; } private void timer1_Tick(object sender, EventArgs e) { if (failecount < failemax) { failecount = 0; PictureBox p = (PictureBox)panel1.Controls[failecount]; pictureBox1.Image = p.Image; failecount++; } } private void pictureBox1_Click(object sender, EventArgs e) { //vazio } private void button1_Click(object sender, EventArgs e) { FolderBrowserDialog f = new FolderBrowserDialog(); if (f.ShowDialog() == DialogResult.OK) { failemax = 0; panel1.Controls.Clear(); foreach (string a in Directory.GetFiles(f.SelectedPath)) { if (( a.EndsWith(" .jpg")) || ( a.EndsWith(" .png")) || ( a.EndsWith(" .gif")) || ( a.EndsWith(" .jpg"))) { PictureBox pg = new PictureBox(); Image im = Image.FromFile(a); pg.Image = im; panel1.Controls.Add(pg); failemax++; } } } failecount = 0; timer1.Enabled = true; } }
Att, Lucio Rogerio
Espero ter ajudado, se ajudei, por favor "Vote como Útil", e se resolvi seu problema, clique em "Propor como Resposta".- Marcado como Resposta Nicolas Campos quarta-feira, 17 de junho de 2015 00:10
terça-feira, 16 de junho de 2015 23:21
Todas as Respostas
-
E deixa te perguntar eu acrescentei mais algumas linhas de código no time1 ( relógio com 3000) para que fica passando as fotos só que quando seleciono as fotos e coloco para rodar ele da o seguinte erro :
An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in System.Windows.Forms.dll
Additional information: O índice 0 está fora do intervalo.e a linha de código e a seguinte :
public partial class Form1 : Form
{
int failemax = 0;
int failecount = 0;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (failecount == failemax)
{
failecount = 0;
PictureBox p = (PictureBox)panel1.Controls[failecount];
pictureBox1.Image = p.Image;
failecount++;
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
//vazio
}
private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog f = new FolderBrowserDialog();
if (f.ShowDialog() == DialogResult.OK)
{
failemax = 0;
panel1.Controls.Clear();
foreach (string a in Directory.GetFiles(f.SelectedPath))
{
if (( a.EndsWith(" .jpg")) || ( a.EndsWith(" .png")) || ( a.EndsWith(" .gif")) || ( a.EndsWith(" .jpg")))
{
PictureBox pg = new PictureBox();
Image im = Image.FromFile(a);
pg.Image = im;
panel1.Controls.Add(pg);
failemax++;
}
}
}
timer1.Enabled = true;
}
}e no formulário também tem o imageList1 para seleciona as fotos
creio que o erro esteja no time1 só que não sei direito
se conseguir me ajuda agradeço muito
-