2012-10-07 140 views
2

對於使用Windows Mobile 6.1的設備,我正在爲C#開發SmartDevice應用程序(Pocket PC 2003模板)。我需要使用此設備的相機(照片,視頻);做這個工作我嘗試使用CameraCaptureDialog類,但它不適用於Pocket PC應用程序。 所以,我記錄在互聯網上,發現我可能指DirectShow API,但問題是,我不知道從哪裏開始,因爲我找不到一個工作/正確的例子。

我的問題:
這是正確的方法嗎?有替代品嗎?
我在哪裏可以找到一個非常好示例顯示如何做這項工作?使用DirectShow捕獲相機

+0

爲什麼使用不知道CameraCaptureDialog的PocketPC2003模板?對於WindowsMo​​bile 6.1,您應該使用WM6pro模板。使用DirectShow將會很困難,並且沒有設備OEM的額外信息,您將無法使用所有功能。更進一步說,在Compact Framework中使用DirectShow使得方法變得更加困難。我測試了DirectShow示例(由MS或其他人)以及緊湊的框架包裝器。他們沒有一個讓我滿意。什麼是該設備的製造商?他們是否爲那裏的設備提供了一個SDK? – josef

+0

因爲如果我使用WM 6標準(或專業)模板,當我嘗試使用此代碼使用CameraCaptureDialog時:'CameraCaptureDialog dlg = new CameraCaptureDialog(); dlg.ShowDialog();'它引發一個InvalidOperationException異常,消息:「發生未知錯誤」。該設備是[Getac PS236](http://us.getac.com/products/handhelds/ps236/techspecs)。 – Nick

+0

@downvoter爲什麼選擇downvote?!? – Nick

回答

1

網上有很多directshow的例子。有一個網站致力於將API轉換爲C#,這使得它變得更容易,也許這就是它http://directshownet.sourceforge.net/about.html。直到我從微軟出版社讀到「編程directshow」這本書之前,我一直在使用DirectShow。在這本書中,大約三分之一的內容看起來非常簡單,我能夠完成我想要的東西。最後,它很像引用任何庫並使用該庫中的類。另外的困難是你需要添加包裝,因爲它們都是COM對象,但是已經爲你完成了。

+0

網上沒有很多directshow的例子..然而,你唯一的鏈接(directshow.net)是一個偉大的庫,但它不適用於我的設備:我有很多編譯錯誤,我不能使用其中的一些類,因爲它們拋出了TypeLoadException(例如,我收到了這條消息:_Cannot從程序集'DirectShowLib-2005'_中加載'DirectShowLib.DsDevice'類型)。 – Nick

4

如果您真的想要使用DirectShow和NetCF,您可以嘗試directshowbetcf:http://alexmogurenko.com/blog/directshownetcf/

+0

這是一個很好的工作庫+1,但不是開源的。 – Nick

+1

Eccept for DirectShowNetCF有(AFAIK)沒有其他(開源或沒有)directshow緊湊框架的lib。你可以繼續搜索,但如果你想要去directshow的方式,上面是你可以得到的最好的。 – josef

+0

還有其他方法嗎? – Nick

1

這可能對您瞭解DirectShow技術有用。基本上給了DirctShow一個開始,並解釋了一些重要的觀點。但它的C++不是C#。希望這有助於

Basic Video Capture

1

DirectShow是,在Windows Mobile 6的video capture API有一個Video Capture Filter那裏,所有的一切東西都設計的非常他們是在Windows中同樣的方式。

問題是,這是一個本機API,而不僅僅是在Windows Mobile中。要在C#中進行開發,您需要一些綁定並且它們缺失。在桌面上有DirectShow.NET,這是一個缺失的部分,但它似乎不適合CE。但是你仍然需要填補Windows Mobile的這個空白。

爲了解決這個問題,你有幾種方法,第一種方法是通過DirectShow.NET並適當更新,以開始在你的設備上工作,去除移動操作系統中缺失的部分等。這會讓你成爲一個雙胞胎DS.NET但是用於移動操作系統。

另一種選擇是做一些C++開發,並在該域中實現最小的足夠功能集,通過COM公開該組件。然後,您將從託管代碼中引用此內容,並將事物連接在一起。另一個顯而易見的選擇是使用第三方解決方案,該解決方案已經完成了上述的一個。