2012-10-07 138 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公开该组件。然后,您将从托管代码中引用此内容,并将事物连接在一起。另一个显而易见的选择是使用第三方解决方案,该解决方案已经完成了上述的一个。