踩大坑!关于海康威视摄像头预览与录像,WinForm和WPF控件的问题

文章讲述了在WPF应用中集成海康威视SDK遇到的问题,包括如何通过WindowsFormHost预览和录像,以及使用Image控件处理YUV到RGB转换。作者最终通过定时器和PictureBox控件实现了稳定的实时预览,尽管录像功能受限于回调函数处理。
  1. 通过海康威视SDK调用摄像头实现预览以及录像功能。按照SDK说明,在WinForm上一切OK,轻松加愉快。
  2. 但是因为软件主体使用的是WPF。所以想通过WindowsFormHost,将picturebox或panel等控件包装在WPF上。一顿操作猛如虎,咋看像这么回事,但是实际上,使用了WindowsFormHost后。如果有WPF控件会显示在WindowsFormHost之上,那就会出现大问题,因为WinForm控件始终是最顶层,哪怕你设置了 IsHitTestVisible="False" IsEnabled="False" Panel.ZIndex="-2" Background="Transparent" 都没用,他还是显示在WPF控件上面。这样很不爽,还会影响到我软件的其他功能。
  3. 看最终解决方案请看最后一条
  4. 尝试其他方案:
    1. 使用WPF控件句柄:
      添加一个Image控件,通过var abc = ((HwndSource)PresentationSource.FromVisual(imageControl)).Handle;
      获取WPF控件的句柄;
      测试发现通过这个句柄会将整个窗口渲染成预览图像,原因是在WPF中,所有元素是以元素树的形式渲染的,各个控件没有单独的句柄。
    2. 使用海康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
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值