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);
}
答
你通常会用一个定时器做到这一点,最好是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;
}
}
我不知道,如果你可以动画'Image.Source',但您可以创建许多图像和运行[关键帧动画(http://msdn.microsoft.com/en-us/库/ ms742524.aspx)来改变它们的可见性,从而产生想要的效果。你有没有考虑过创建gif呢?一旦将其分配给“Image”,它将自动播放。 – Sinatr 2014-10-29 11:29:18
哦,你的错误显然是在UI线程中一次完成整个工作。用户界面不会在整个持续时间内更新,这就是为什么你只看到最后一帧*。您可以通过使用“DispatcherTimer”而不是“Thread.Sleep”来分割动画。或者在单独的'Task' /'Thread'中运行作业(使用'BackgroundWorker'),但是你需要在UI线程中调用*设置'Source'。 – Sinatr 2014-10-29 11:32:32
谢谢,但我需要在时间有一个图像,因为我比较此图像与一个参考图像。我曾经想过,我可以在一张图片中显示一张图片,在2ms后用另一个ecc更改此图片...因此,在同一时间,我将展示图片与我的流式图片进行比较。 – luca 2014-10-29 11:45:37