<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        WPF中在攝像頭視頻上疊加控件的解決方案

        來源:懂視網 責編:小OO 時間:2020-11-27 22:35:50
        文檔

        WPF中在攝像頭視頻上疊加控件的解決方案

        說道WPF想必有很多朋友跟小編一樣不知道wpf是什么,今天小編就給大家簡單普及下基本概念。WPF(Windows Presentation Foundation)是微軟推出的基于Windows 的用戶界面框架,屬于.NET Framework 3.0的一部分。它提供了統一的編程模型、語言和框架,真正做到了分離界面設計人員與開發人員的工作;同時它提供了全新的多媒體交互用戶圖形界面。一、視頻呈現;前段時間,在一個wpf的項目中需要實時顯示ip攝像頭,對此的解決方案想必大家都應該知道很多。在winform中,可以將一個控件(一般用panel或者pictruebox)的句柄丟給攝像頭的sdk以實現該功能,而在wpf中我們同樣可以使用該方案快速實現。
        推薦度:
        導讀說道WPF想必有很多朋友跟小編一樣不知道wpf是什么,今天小編就給大家簡單普及下基本概念。WPF(Windows Presentation Foundation)是微軟推出的基于Windows 的用戶界面框架,屬于.NET Framework 3.0的一部分。它提供了統一的編程模型、語言和框架,真正做到了分離界面設計人員與開發人員的工作;同時它提供了全新的多媒體交互用戶圖形界面。一、視頻呈現;前段時間,在一個wpf的項目中需要實時顯示ip攝像頭,對此的解決方案想必大家都應該知道很多。在winform中,可以將一個控件(一般用panel或者pictruebox)的句柄丟給攝像頭的sdk以實現該功能,而在wpf中我們同樣可以使用該方案快速實現。

        說道WPF想必有很多朋友跟小編一樣不知道wpf是什么,今天小編就給大家簡單普及下基本概念。

        WPF(Windows Presentation Foundation)是微軟推出的基于Windows 的用戶界面框架,屬于.NET Framework 3.0的一部分。它提供了統一的編程模型、語言和框架,真正做到了分離界面設計人員與開發人員的工作;同時它提供了全新的多媒體交互用戶圖形界面。

        一、視頻呈現

          前段時間,在一個wpf的項目中需要實時顯示ip攝像頭,對此的解決方案想必大家都應該知道很多。在winform中,我們可以將一個控件(一般用panel或者pictruebox)的句柄丟給攝像頭的sdk以實現該功能,而在wpf中我們同樣可以使用該方案快速實現。

          我們以??灯脚_為例,??档膕dk就需要我們傳遞一個控件的句柄,winform中可以直接使用控件的handle屬性來獲取句柄,而在wpf中我們則有兩種方法:

          1、將WindowsFormsHost作為容器在內部嵌套一個winform控件,比如panel,這樣的話就和winform中一樣了;

          2、直接使用    ((HwndSource)PresentationSource.FromVisual(你的wpf元素)).Handle;  獲取句柄;

        二、疊加控件

          簡單的視頻展示使用一中的方案就可以解決,但我接手的項目是一個將攝像頭視頻用以AR處理的程序,界面上需要展示很多圖標和信息欄,最重要的是整個主程序的大背景就是實時的攝像頭畫面,除此之外還有各種子窗口,子窗口中也要用到視頻,這樣就必然涉及到在視頻畫面上疊加控件的難題?! ?/p>

          1、使用Microsoft.DwayneNeed

          之所以說是難題,是微軟也在試圖解決卻也沒有給出真正完美的解決方案。這個難題就是著名的空域問題(airspace issues)。這里有一份園友的隨筆鏈接,主要介紹的是微軟目前的解決方案://www.gxlcms.com/article/110896.htm,這套方案在我實際使用中雖然可以正常的在視頻上疊加控件,但在上方拖動控件則非常卡頓,通常的情況就是鼠標已經移動到了右側,被拖控件還在左側依依不舍,即便是release版本也無濟于事,這套方案最終流產?!?/p>

          2、將視頻流轉碼,使用d3d渲染為ImageSource

          此方案比較麻煩,需要自己控制轉碼過程,這里有一篇關于此方案的文章鏈接://www.gxlcms.com/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中在攝像頭視頻上疊加控件的解決方案,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        WPF中在攝像頭視頻上疊加控件的解決方案

        說道WPF想必有很多朋友跟小編一樣不知道wpf是什么,今天小編就給大家簡單普及下基本概念。WPF(Windows Presentation Foundation)是微軟推出的基于Windows 的用戶界面框架,屬于.NET Framework 3.0的一部分。它提供了統一的編程模型、語言和框架,真正做到了分離界面設計人員與開發人員的工作;同時它提供了全新的多媒體交互用戶圖形界面。一、視頻呈現;前段時間,在一個wpf的項目中需要實時顯示ip攝像頭,對此的解決方案想必大家都應該知道很多。在winform中,可以將一個控件(一般用panel或者pictruebox)的句柄丟給攝像頭的sdk以實現該功能,而在wpf中我們同樣可以使用該方案快速實現。
        推薦度:
        標簽: 視頻 攝像頭 攝像
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲日韩av无码中文| 亚洲不卡1卡2卡三卡2021麻豆| 亚洲av极品无码专区在线观看 | 亚洲精品无码国产片| 精品久久久久久久久免费影院| 亚洲高清在线播放| 久久精品无码精品免费专区| 国产亚洲综合成人91精品| 国产在线观看xxxx免费| 亚洲熟妇丰满多毛XXXX| 好久久免费视频高清| 日韩亚洲人成在线综合日本| 久久精品电影免费动漫| 亚洲码一区二区三区| 国拍在线精品视频免费观看| 亚洲AV综合色区无码二区偷拍| 成人免费a级毛片无码网站入口| 亚洲伊人久久大香线蕉AV| 国产国产人免费人成免费视频 | 国产真人无码作爱视频免费 | 国产免费黄色大片| www成人免费视频| 国精无码欧精品亚洲一区| 2021精品国产品免费观看 | 亚洲jizzjizz在线播放久| 最近的免费中文字幕视频| 午夜亚洲乱码伦小说区69堂| 亚洲伊人成无码综合网 | 国产大陆亚洲精品国产| 亚洲精品第一国产综合境外资源| a级毛片在线免费| 激情内射亚洲一区二区三区| 午夜视频在线在免费| 九九九精品视频免费| 亚洲视频在线观看免费视频| 在线观看免费大黄网站| 国产免费A∨在线播放| 久久久久亚洲AV无码永不| 日本免费无遮挡吸乳视频电影| 一级毛片免费视频网站| 亚洲美女一区二区三区|