我有一个提供图像的IP摄像机。然后通过EmguCV处理这些图像,然后我想显示处理后的图像。
为了显示图像,我使用以下代码:
Window1(){
...
this.Dispatcher.Hooks.DispatcherInactive
+= new EventHandler(Hooks_DispatcherInactive);
}
Hooks_DispatcherInactive(...)
{
Next()
}
Next() 调用调用图像处理方法并(应该)显示图像:
MatchResult? result = survey.Step();
if (result.HasValue)
{
Bitmap bit = result.Value.image.Bitmap;
ImageSource src = ConvertBitmap(bit);
show.Source = src;
...
}
当我连接普通的 30fps 网络摄像头时,这工作正常。但是,IPCam的图像需要一秒钟才能到达这里,当我通过浏览器访问它们时也是如此。因此,同时,WPF 不显示任何内容,甚至不显示以前处理的图像。
如何让 WPF 至少显示以前的图像?
可以使用"创建"(从数组)或"创建"(从 IntPtr)将图像的缓冲区复制到相同格式(像素格式、高度、宽度、步幅)的新 BitmapSource 图像中,并在 WPF 的"图像"控件中显示该位图源。或者你可以使用 DirectX 来更快地做到这一点(对于 30fps(和 1fps),BitmapSource 方法应该可以做到)。
此外,请考虑不要在视图中使用事件,而是使用绑定和命令。