none
Trocar (atualizar) varias imagens do objeto Image (imagem.source) WPF RRS feed

  • Pergunta

  • Tenho um objeto Image em uma janela de um projeto WPF onde carrego varias imagens (.jpg) e preciso exibir essas imagens, trocando as imagens a cada 1 segundo.
    Dentro de um foreach, recupero as imagens do diretorio, atualizo no objeto Image (image1.source), porem so exibe a ultima imagem (veja codigo abaixo).
    Como faço para exibir todas imagens do diretorio?
     
                DirectoryInfo pasta = new DirectoryInfo(@"C:\teste");
                arquivos = pasta.GetFiles("*.jpg");
    
                FileStream fs = null;
                byte[] data = null;
                MemoryStream strm = null;
                MemoryStream ms = null;
                System.Drawing.Image img = null;
                BitmapImage bi = null;
    
                foreach (FileInfo file in arquivos)
                {
                    fs = new FileStream(file.Name, FileMode.Open, FileAccess.Read);
    
                    data = new byte[fs.Length];
    
                    fs.Read(data, 0, System.Convert.ToInt32(fs.Length));
                    fs.Close();
    
                    strm = new MemoryStream();
                    strm.Write(data, 0, data.Length);
                    strm.Position = 0;
    
                    img = System.Drawing.Image.FromStream(strm);
    
                    bi = new BitmapImage();
                    bi.CacheOption = BitmapCacheOption.OnLoad;
    
                    bi.BeginInit();
    
                    ms = new MemoryStream();
    
                    img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
    
                    ms.Seek(0, SeekOrigin.Begin);
    
                    bi.StreamSource = ms;
    
                    bi.EndInit();
    
                    image1.Source = bi;
    
                    Thread.Sleep(250);
                }
    

    Raphael Britto
    quarta-feira, 7 de setembro de 2011 19:40

Todas as Respostas

  • Tente utilizar o DispatcherTimer.
    Allan Tavares - Desenvolvedor Pleno - Spread Systems/Banco do Brasil
    segunda-feira, 12 de setembro de 2011 15:39
  • Olá Rafel,

    Veja se o código abaixo pode te ajudar.

     

     public partial class MainWindow : Window
        {
            private DirectoryInfo dir;
            private FileInfo[] files;
            private DispatcherTimer time = new DispatcherTimer();
            private int indexImagem = 0;
           
            public MainWindow()
            {
                InitializeComponent();
                CarregaImagens();
                time.Interval = TimeSpan.FromSeconds(1);
                time.Tick += new EventHandler(time_Tick);
                time.Start();
            }
    
            void time_Tick(object sender, EventArgs e)
            {
                BitmapImage img = new BitmapImage(new Uri(GetPathImagem()));
                //objeto image1 definido no XAML
                image1.Source = img;
    
                indexImagem += 1;
            }
    
            private void CarregaImagens()
            {
                dir = new DirectoryInfo(@"C:\Imagens");
                files = dir.GetFiles("*.jpg");
            }
    
            private String GetPathImagem()
            {
               
                if (indexImagem < files.Length)
                {
                    return files[indexImagem].FullName;
                }
                else
                {
                    indexImagem = 0;
                    return files[indexImagem].FullName;
                }
               
            }
        }

    Abraço

     


    David Silva MCP
    quarta-feira, 14 de setembro de 2011 00:47