winform 使用 視頻 作為窗口背景

最近做 Windows 上的項目,客戶要求要做的“炫”一點,所以,動態的窗口背景永遠是必不可少的內容(比如手機qq的登錄界面對吧?

我本以為這是一個很容易實現的功能於是就滿口答應下來……是的,在 winform 裡,並不是那麼容易就能達到你想要的效果的。

理所當然,我們想到如果要播放視頻,那麼就用系統自帶的 media player,只要添加一個控件就可以搞定——結果就是播放的視頻要么被按鈕擋住,要么就是永遠在第一,把按鈕擋住……

所以了,想要實現播放視頻,還是要老老實實的使用 圖片框

那麼這就要用到所謂的 mciSendString 方法,比如說這樣:

但這個是不能用的,即使把官方的代碼拷貝過來,也無法得到正確的結果——就是不播放你有脾氣?

最終,我還是用 OpenCV的 實現了這個效果,當然,給 C# 用,我們得找 OpenCV 的 .net 封裝,也就是 EmguCV

這裡我就大略的記錄一下實現過程,首先你要去下載 Emgu 庫安裝一下,地址在這裡:https://sourceforge.net/projects/emgucv/files/emgucv/3.2/libemgucv-windesktop-3.2.0.2682.exe/download

你要注意下載的版本,如果有更新的版本,請下載新版。

原理

其實使用 emgu 的原理和上文用 pictureBox 播放視頻應該是一致的,都是把視頻按照時間獲取幀,然後顯示一張圖片罷了。使用 emgu 的另外一個好處是它可以把任意視頻做成這樣,比如你的 mp4,或者是串流地址。

環境配置

下載安裝後,默認的安裝位置為: C:\Emgu\emgucv-windesktop 3.2.0.2682\箱子 具體版本號可能會有變化。現在我們打開 vs,在裡邊導入 emgu:

    1. 點開你的程序項目,在「設計」模式下左側的「工具箱」中點鼠標右鍵,選擇「選擇項…」;
    2. 在彈出的對話框中點下邊的「瀏覽」,找到 emgu 的安裝位置,選中 Emgu.簡歷.UI.DLLZedgraph.DLL 這兩個進行打開;
    3. VS 會自動導入並選中這些 emgu 的控件,確定即可;
    4. 在項目右側的「解決方案資源管理器」中,找到「引用」,在裡邊點右鍵選擇「添加引用」;
    5. 在彈出的對話框左側選擇「瀏覽」,然後手動導入 Emgu.簡歷.UI.DLLZedgraph.DLLEmgu.簡歷.UI.GL.DLLEmgu.簡歷.世界.DLL 這四個文件。

這樣,環境就配置好了。

使用控件

這個時候你就可以從工具箱中拖入要用的 emgu 控件了,這裡我們用 emgu 的 ImageBox ,拖入後把它命名為 VideoBox 備用。

這裡我們要用到的類變量,注意聲明在類中:

當要播放視頻的時候,就這麼做:

這裡有兩點需要注意:

  1. 第 4 行獲取視頻的幀率,並不是所有的視頻都能正確獲取到,所以如果不能獲取,我們就給一個默認的 24 FPS,當然,你也可以默認 25 或者 30;
  2. 第 8 行注意這裡一定要調用啟動,不然視頻就不會播放了,不會自動啟動計時器的。

現在我們再來看看 視頻控制器 的實現,這裡最重要,因為計時器會在規定的時間輪詢這個控制器,具體的顯示操作就是由這個控制器來完成的:

注意如果你想要連續播放(重複循環播放),那麼就在高亮的一行重新初始化一個 視頻截取 就可以了。

加入透明背景的控件

當然,最後我們還要加入控件,比如說一個 按鍵 ,你需要一個具有透明設定的 png 來作為按鈕的內容,然後就做如下配置:

這裡 是我的一個 按鍵 ,總之,如此配置之後,按鈕就是透明的了,但你會發現它雖然覆蓋在視頻之上,但顯然透明到的還是窗口本身的背景而不是顯示其下視頻的內容。

這時我們可以手動調整按鈕的父級為這我們的 VideoBox ,這樣,它就能顯示出視頻的內容了。

動態鏈接庫

最後,你還需要把運行時依賴的動態鏈接庫拷貝到程序的運行目錄下,這個分為32位和64位,你如果是debug運行,就拷貝32位目錄內的文件即可: C:\Emgu\emgucv-windesktop 3.2.0.2682\箱子\86

參考文獻

  1. OpenCV的
  2. Emgu CV: OpenCV的.NET中 (C#, VB, C ++多)
  3. 如何使用PictureBox播放視頻
  4. 【Emgu】一起學EmguCV(一)配置與使用
  5. VS2010+C#+EmguCV讀取和錄製視頻
  6. [emguCV]播放影片—臨時筆記(未整理)

本文由 落格博客 原創撰寫:落格博客 » winform 使用 視頻 作為窗口背景

轉載請保留出處和原文鏈接:https://www.logcg.com/archives/2893.html

關於作者

R0uter

如非聲明,本人所著文章均為原創手打,轉載請註明本頁面鏈接和我的名字。

發表評論

您的電子郵件地址不會被公開. 必填字段標 *