2010-02-05 74 views
1

我有一個攝像頭捕捉應用程序,我試圖在我的WPF UI中實現視頻預覽。捕獲發生在C++ DLL中。我有一個最新的解決方案,但我不太滿意。主要目標是UI中的視頻預覽不會干擾C++ DLL,因爲它必須壓縮視頻幀並將它們寫入磁盤。我將無法顯示每一幀,因爲壓縮相當CPU密集型。在C中的視頻預覽#

我目前的視頻預覽的解決方案是:

  • 的圖像控制在我的窗口中使用,它的來源屬性是數據綁定到一個的BitmapSource稱爲VideoPreviewSource

  • 我建立了一個系統.Threading.TimerCallback更新我的預覽。定時器回調函數調度到一個可以更新UI的線程(使用this.Dispatcher.BeginInvoke),它調用UpdatePreview()向C++ DLL詢問視頻幀,它調用UpdatePreview()

  • UpdatePreview對DLL的調用將圖像的原始數據放入byte [] _rawImageData中,我在窗口的構造函數中分配一次。然後UpdatePreview()將VideoPreviewSource設置爲:BitmapSource.Create(width,height,96,96,pf,null,_rawImageData,width * 4);最後調用OnPropertyChanged(「VideoPreviewSource」)。

看起來好像如果我讓計時器更頻繁,垃圾收集被調用的次數更少,它基本上看起來像內存泄漏。

任何更好的方法來預覽視頻?

+0

您需要釋放C++ DLL爲您提供的數據嗎? – 2010-02-05 22:46:18

回答

0

This InteropBitmapRenderer我寫的可能會幫助你。雖然我把它硬編碼爲RGBA(32位)。不知道它如何與RGB24協同工作,因爲我認爲WPF 3.51之前版本在24位版本方面存在問題。

如果您的攝像頭支持DirectShow中,你可以使用我WPF MediaKit並使用VideCaptureElement顯示一個攝像頭。