我有一个通过火线连接的高分辨率摄像机。SDK允许我将帧捕获到字节缓冲区中。例如:
unsigned char *buffer = new unsigned char[size];
GetFrameBuffer(cameraHandle, buffer);
由于API的性质,帧需要连续抓取(20+ fps)以显示实时视图。现在,我想在我的WPF UI中显示这个。我可以想到几种方法,但我需要帮助来决定选择哪种方法!
思想- 通过互操作更新属性,持续更新Image元素的
Source
。 - 在HwndHost中设置基于
HWND
的自定义控件。当消息泵空闲时,将更新图像。 - 在DirectShow中编写一个源过滤器,使用某种定时逻辑,连续读取缓冲区-使得使用MediaElement显示实时视图成为可能。
显然,我想要最小化CPU负载。
问题归结为:
在WPF中,如何使用GetFrameBuffer
等原始api显示来自火线连接的实时流?
我认为最简单的方法是第一个。只需更新图像源。如果你只想显示它,你不需要directshow过滤器。但是如果你也想捕捉它,DirectShow过滤器是最好的方法!
更新图像源是一项简单的任务。一个很好的例子是。net的Mjpeg解码器。您只需要用您自己的抓取器逻辑替换Mjpeg阅读器/解析器。