c#代码中的图像序列图像wpf

c#代码中的图像序列图像wpf

问题描述:

我想在图像WPF(Syste.Windows.Controls.Image)中显示图像序列。 在图像之间我想设置一个暂停作为一个帧率。 在XAML我有c#代码中的图像序列图像wpf

<Image x:Name="image" HorizontalAlignment="Left" Height="100" Margin="235,145,0,0" VerticalAlignment="Top" Width="100"/> 

我想在一个周期内插入,但我为什么显示ED停止(fps)的速度呢?

我已经tryed这一点,但不显示图像,如果不是最后的,我不喜欢线程暂停

for (int i = 2; i < 5; i++) 
     { 

     this.image.Source = new BitmapImage(new Uri("C:\\Users\\Pictures\\Braccio" + i + ".jpg", UriKind.Absolute)); 
     System.Threading.Thread.Sleep(5000); 

     } 
+0

我不知道,如果你可以动画'Image.Source',但您可以创建许多图像和运行[关键帧动画(http://msdn.microsoft.com/en-us/库/ ms742524.aspx)来改变它们的可见性,从而产生想要的效果。你有没有考虑过创建gif呢?一旦将其分配给“Image”,它将自动播放。 – Sinatr 2014-10-29 11:29:18

+0

哦,你的错误显然是在UI线程中一次完成整个工作。用户界面不会在整个持续时间内更新,这就是为什么你只看到最后一帧*。您可以通过使用“DispatcherTimer”而不是“Thread.Sleep”来分割动画。或者在单独的'Task' /'Thread'中运行作业(使用'BackgroundWorker'),但是你需要在UI线程中调用*设置'Source'。 – Sinatr 2014-10-29 11:32:32

+0

谢谢,但我需要在时间有一个图像,因为我比较此图像与一个参考图像。我曾经想过,我可以在一张图片中显示一张图片,在2ms后用另一个ecc更改此图片...因此,在同一时间,我将展示图片与我的流式图片进行比较。 – luca 2014-10-29 11:45:37

你通常会用一个定时器做到这一点,最好是DispatcherTimer,这样:

private DispatcherTimer timer; 
private int imageIndex = 2; 

public MainWindow() 
{ 
    InitializeComponent(); 

    timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(5) }; 
    timer.Tick += TimerTick; 
    timer.Start(); 
} 

private void TimerTick(object sender, EventArgs e) 
{ 
    image.Source = new BitmapImage(
     new Uri(@"C:\Users\Pictures\Braccio" + imageIndex + ".jpg")); 

    if (++imageIndex == 5) 
    { 
     imageIndex = 2; 
    } 
} 
+0

谢谢,abd如果我想显示1或N次这个序列? – luca 2014-10-29 14:15:27

+0

只要你想调用'timer.Stop()'。 – Clemens 2014-10-29 14:18:15

+0

完美,感谢您的帮助 – luca 2014-10-29 14:59:49