说道WPF想必有很多朋友跟小编一样不知道wpf是什么,今天小编就给大家简单普及下基本概念。

WPF(Windows Presentation Foundation)是微软推出的基于Windows 的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。
一、视频呈现
前段时间,在一个wpf的项目中需要实时显示ip摄像头,对此的解决方案想必大家都应该知道很多。在winform中,我们可以将一个控件(一般用panel或者pictruebox)的句柄丢给摄像头的sdk以实现该功能,而在wpf中我们同样可以使用该方案快速实现。
我们以海康平台为例,海康的sdk就需要我们传递一个控件的句柄,winform中可以直接使用控件的handle属性来获取句柄,而在wpf中我们则有两种方法:
1、将WindowsFormsHost作为容器在内部嵌套一个winform控件,比如panel,这样的话就和winform中一样了;
2、直接使用 ((HwndSource)PresentationSource.FromVisual(你的wpf元素)).Handle; 获取句柄;
二、叠加控件
简单的视频展示使用一中的方案就可以解决,但我接手的项目是一个将摄像头视频用以AR处理的程序,界面上需要展示很多图标和信息栏,最重要的是整个主程序的大背景就是实时的摄像头画面,除此之外还有各种子窗口,子窗口中也要用到视频,这样就必然涉及到在视频画面上叠加控件的难题。
1、使用Microsoft.DwayneNeed
之所以说是难题,是微软也在试图解决却也没有给出真正完美的解决方案。这个难题就是著名的空域问题(airspace issues)。这里有一份园友的随笔链接,主要介绍的是微软目前的解决方案:https://www./article/110896.htm,这套方案在我实际使用中虽然可以正常的在视频上叠加控件,但在上方拖动控件则非常卡顿,通常的情况就是鼠标已经移动到了右侧,被拖控件还在左侧依依不舍,即便是release版本也无济于事,这套方案最终流产。
2、将视频流转码,使用d3d渲染为ImageSource
此方案比较麻烦,需要自己控制转码过程,这里有一篇关于此方案的文章链接:https://www./article/110898.htm,我这里准备了一份demo(非本人编写):https://pan.baidu.com/s/1i59OZC5,以下是demo运行的截图:
大致的原理就是利用sdk的回调机制逐帧获取码流,再使用direct进行渲染;
此方案除了代码量相对多点之外还存在和1中同样的问题,控件拖动时依然卡顿,各位园友不知有何好的解决办法呢。
3、最终的解决方案
在1和2都达不到理想中的要求时,我突然意识到一个问题,为什么会出现空域问题?那是因为winform和wpf的渲染方式不同,如果将他们统一,问题是不是解决了?只能说解决了一半,如果需要叠加的控件是规规矩矩的矩形,换句话说,不需要透明通道的那些控件,则完全可以使用这套方案,但是像那些有圆角的控件还需要另外想办法,我们先说前者吧,简单的代码如下:
<wfi:WindowsFormsHost> <wf:Panel/> </wfi:WindowsFormsHost> <wfi:WindowsFormsHost Width="114" Height="152"> <ElementHost> <Border Width="114" Height="152"/> </ElementHost> </wfi:WindowsFormsHost>
其实就是在 WindowsFormsHost再套一个ElementHost,现在无论是视频的panel还是在其上方的border控件由于都被WindowsFormsHost所包含,所以border在渲染时不会被覆盖到底层了。
下面再谈谈我个人认为最难的不规则控件的叠加方式,如果你能在wpf应用中通过代码让WindowsFormsHost背景透明,那么你不需要再继续往下看了,请你联系我,我认为这才是最好的解决方案,而接下来我要说的方案可能会让你们不屑,甚至嘲笑。
我的办法很简单,就是使用两个窗口,底部窗口单独显示视频,并设置为主窗口,顶部窗口设置AllowsTransparency="True",ShowInTaskbar="False",在显示顶部窗口时使用showdialog而不是show,这样能够保证用户永远在顶部窗口上操作,到不了视频窗口。针对子窗口的情况,虽然可以用popup来模拟上述过程,但popup也有很多问题,他默认是置顶的,有时会给用户带来困惑,比如两个子窗口重叠时,明明带视频的那个窗口在底部,但由于其中的视频部分使用的是popup来展示的,它居然会显示在顶层窗口之上,完美实现了窗口洗牌的特效,除此之外你还需要通过特殊的偏移量才能控制popup的位置,鉴于此,我建议你单独定制一个专门用来弹出信息的窗体,再将包含视频的控件作为子元素传入其中。
最终的解决方案是结合这三种,由于主界面是个实时视频大背景,所以任何拖动的操作都不该延迟,所以主界面用了3号解决方案,而一些子界面不涉及到在上方拖动的操作,则可以用1号方案,至于2号方案则可以用来兼容各大视频平台,例如有些视频平台不支持句柄的传入,则可以使用该方案。
以上所述是小编给大家介绍的WPF中在摄像头视频上叠加控件的解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# wpf
# 控件叠加
# 摄像头
# C# WPF ListView控件的实例详解
# WPF图形解锁控件ScreenUnLock使用详解
# WPF实现带全选复选框的列表控件
# WPF实现ScrollViewer滚动到指定控件处
# WPF中引入WindowsForms控件的方法
# WPF的ListView控件自定义布局用法实例
# 在WPF中动态加载XAML中的控件实例代码
# 超炫酷的WPF实现Loading控件效果
# WPF中不规则窗体与WindowsFormsHost控件兼容问题的解决方法
# WPF自定义选择年月控件详解
# 句柄
# 拖动
# 小编
# 微软
# 的是
# 这套
# 则可
# 而在
# 于都
# 可以使用
# 涉及到
# 大背景
# 是一个
# 解决了
# 多点
# 是个
# 如果你
# 是在
# 也有
# 在我
相关文章:
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
营销式网站制作方案,销售哪个网站招聘效果最好?
在线制作视频的网站有哪些,电脑如何制作视频短片?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
北京建设网站制作公司,北京古代建筑博物馆预约官网?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
如何在云主机快速搭建网站站点?
高端网站建设与定制开发一站式解决方案 中企动力
如何通过FTP空间快速搭建安全高效网站?
如何在IIS管理器中快速创建并配置网站?
如何高效搭建专业期货交易平台网站?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
如何用PHP工具快速搭建高效网站?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
香港网站服务器数量如何影响SEO优化效果?
如何选购建站域名与空间?自助平台全解析
如何在建站宝盒中设置产品搜索功能?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
网站图片在线制作软件,怎么在图片上做链接?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
零服务器AI建站解决方案:快速部署与云端平台低成本实践
网站制作的步骤包括,正确网址格式怎么写?
建站之星如何实现网站加密操作?
郑州企业网站制作公司,郑州招聘网站有哪些?
公众号网站制作网页,微信公众号怎么制作?
建站10G流量真的够用吗?如何应对访问高峰?
如何快速搭建高效WAP手机网站吸引移动用户?
广德云建站网站建设方案与建站流程优化指南
教程网站设计制作软件,怎么创建自己的一个网站?
已有域名和空间如何搭建网站?
XML的“混合内容”是什么 怎么用DTD或XSD定义
大型企业网站制作流程,做网站需要注册公司吗?
Python lxml的etree和ElementTree有什么区别
如何选择高效稳定的ISP建站解决方案?
寿县云建站:智能SEO优化与多行业模板快速上线指南
香港服务器网站卡顿?如何解决网络延迟与负载问题?
建站之星上传入口如何快速找到?
网页设计与网站制作内容,怎样注册网站?
如何在橙子建站上传落地页?操作指南详解
网站制作价目表怎么做,珍爱网婚介费用多少?
如何快速查询网站的真实建站时间?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
定制建站价位费用解析与套餐推荐全攻略
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
如何通过PHP快速构建高效问答网站功能?
*请认真填写需求信息,我们会在24小时内与您取得联系。