none
c#: Fotos RRS feed

  • 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 

     
    terça-feira, 16 de junho de 2015 19:38

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".

    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 

    terça-feira, 16 de junho de 2015 22:04
  • eu consegui tirar aquela mensagem de erro só que não aparece as fotos quando escolho mas beleza valeu mano ajudou muito 
    quarta-feira, 17 de junho de 2015 00:16