- 通过海康威视SDK调用摄像头实现预览以及录像功能。按照SDK说明,在WinForm上一切OK,轻松加愉快。
- 但是因为软件主体使用的是WPF。所以想通过WindowsFormHost,将picturebox或panel等控件包装在WPF上。一顿操作猛如虎,咋看像这么回事,但是实际上,使用了WindowsFormHost后。如果有WPF控件会显示在WindowsFormHost之上,那就会出现大问题,因为WinForm控件始终是最顶层,哪怕你设置了 IsHitTestVisible="False" IsEnabled="False" Panel.ZIndex="-2" Background="Transparent" 都没用,他还是显示在WPF控件上面。这样很不爽,还会影响到我软件的其他功能。
看最终解决方案请看最后一条- 尝试其他方案:
- 使用WPF控件句柄:
添加一个Image控件,通过var abc = ((HwndSource)PresentationSource.FromVisual(imageControl)).Handle;
获取WPF控件的句柄;
测试发现通过这个句柄会将整个窗口渲染成预览图像,原因是在WPF中,所有元素是以元素树的形式渲染的,各个控件没有单独的句柄。 - 使用海康SDK实时预览回调函数:
在解码回调中将数据添加到队列(数据大,不要直接在回调函数中解码)。
通过各种方式将YV12格式数据转成RGB图像(论坛中有些这个方法)。再将图像转成ImageSource 传给WPF的Image控件。但是直接耗时长,debug模式300ms一张图。
其他解码方式:public Bitmap RGB24_to_Image(byte[] byteBuff, int nWidth, int nHeight) { if (byteBuff.Length <= 0 || byteBuff.L
- 使用WPF控件句柄:
踩大坑!关于海康威视摄像头预览与录像,WinForm和WPF控件的问题
于 2023-11-27 11:15:21 首次发布
文章讲述了在WPF应用中集成海康威视SDK遇到的问题,包括如何通过WindowsFormHost预览和录像,以及使用Image控件处理YUV到RGB转换。作者最终通过定时器和PictureBox控件实现了稳定的实时预览,尽管录像功能受限于回调函数处理。

最低0.47元/天 解锁文章
2371





