0

我正在编写一个应用程序,它将显示相机看到的当前图像,它需要实时更新显示的图像,或者接近它。从本质上讲,我有一台可以捕捉图像的相机,我需要每隔 1 秒捕捉一个图像并将该图像显示到屏幕上。目前,我的应用程序有一个 Image 控件,我正在从相机捕获一个 BitmapImage 并将其设置为 Image.Source。我的麻烦是让它不断更新。不幸的是,我没有处理这样的事情的经验,它必须永远更新自己(或者直到我正在编写的应用程序关闭),老实说,似乎很少甚至没有(我已经能够发掘)在web 关于在 WPF/C# 中做这样的事情。我怀疑我 必须生成一个线程来执行图像捕获,但老实说,这是我的问题的一部分——我很少有使用线程的经验,而且对所有这些工作的原理有点困惑。非常感谢您提供的任何帮助。

4

3 回答 3

3

要使数据绑定正确更新,您可以使用INotifyPropertyChanged。只需添加对 System.ComponentModel 的引用:

using System.ComponentModel;

然后继承接口:

MyWindow : INotifyPropertyChanged

然后添加以下代码:

public event PropertyChangedEventHandler PropertyChanged;

private void NotifyPropertyChanged(String info)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(info));
    }
}

最后,添加要绑定的属性。

private BitmapImage currentImage;
public BitmapImage CurrentImage{get{return currentImage;} set{currentImage=value;NotifyPropertyChanged("CurrentImage");}}

最后,在您的 xaml 中,将绑定更改为 {Binding CurrentImage} 然后对于窗口,将数据上下文设置为相对源自身...这将是窗口的属性:

DataContext="{Binding RelativeSource={RelativeSource Self}}"

这应该使绑定正常工作。在单独的线程上做事需要调度程序

于 2010-08-03T20:31:40.593 回答
0

您应该阅读 WPF 中的数据绑定。WPF 充满了观察者模式,一旦绑定的数据项发生更改,就会更新显示。您正在更改 Image.Source 而不是更改图像内容的事实可能是令人困惑的事情。您需要将 XAML 中的图像控件设置为数据绑定到位图对象(可能是表单的字段),然后根据需要更改或重新加载位图对象。数据绑定图像控件应在每次更改位图对象时自动重绘自身。

由于您提到了后台线程,因此您需要注意仅在 UI 线程上修改 UI 元素(Image、Bitmap)的属性。如果您在后台线程中收到新图像并希望在 UI 中显示它,则需要将该更新同步到 UI 线程。请参阅调度程序 .Invoke()

于 2010-08-03T18:01:30.247 回答
0

我处于类似的情况,除了图像通过 WCF 传递给我的 WPF 客户端。所以我设置了一个计时器并每隔1秒调用一次WCf服务。但是当我将 ImageSource 分配给 bitmapImage 时,图像会闪烁,就像我得到一个白屏一样,Image, whit screen, image 如何让它连续?

于 2010-08-17T10:14:11.690 回答