8

我希望获得一些关于完成一个看似简单的目标的一般指导。我有一台数码单反相机(佳能 EOS 50D),需要编写一个应用程序来告诉相机拍照。我还需要将照片传输到计算机上,并可能将其从相机的存储中删除。一个好处是在我的应用程序中从相机中获得实时预览。我的环境将是 Windows(XP Pro 或 Vista Enterprise)和 .Net 3.5 (C#)。

我做了一些研究,发现了几个选择。我知道一个可以工作,但限制我将来只能使用佳能相机。我从 Canon 找到并下载了一个 SDK,它提供了很多这样的功能。我查看了 SDK,虽然它很广泛并且是用 C 语言编写的,但它确实有 C# 包装器,可以稍微加快开发速度。

我发现的另一个选项称为 Windows 便携式设备。显然,它是一个与实现 PTP 和 MTP 标准的设备通信的 API。它是基于 COM 的,据我所知,它没有 .Net 包装器。然而,这不是表演的终结者。我可以 P/Invoke 我需要的功能,或者编写一个托管 C++ DLL 以在我的应用程序中与相机对话。

我正在寻找任何有 WPD 经验的人给我指点。我仔细阅读了文档并查看了有关传输图像和删除图像的参考资料。但是,我还没有看到提到拍照、获取预览图像或对焦/自动对焦的命令。

4

5 回答 5

3

WPD api 提供命令 WPD_COMMAND_STILL_IMAGE_CAPTURE_INITIATE

我不确定你的相机是否支持它,但它应该很简单就能找到。如果您可以从驱动程序开发工具包中获取“wpdinfo”工具并在连接相机的情况下启动它,然后向其发送 WPD_COMMAND_CAPABILITIES_GET_SUPPORTED_COMMANDS 命令并查看它是否支持静态图像捕获命令。如果是这样,那么您可以尝试一下。

于 2010-01-22T12:07:23.977 回答
3

TallGanglyGuy 的评论不正确。ptp 确实允许您触发新图像和更改曝光等。某些相机的固件仅公开一些 ptp 命令。

PTP 支持常见的设备控制,例如拍照,因此用户可以以新的不同方式再次利用 PC/相机组合,而无需额外的软件。

于 2011-08-15T22:37:42.460 回答
2

试试我的 Eos 框架:https ://github.com/esskar/Canon.Eos.Framework

恕我直言,它比 SDK 附带的 .cs 文件更好。

于 2012-02-06T20:52:59.993 回答
1

PTP 和 MTP 都是用于从数码相机 (DSC) 传输文件的协议。这些协议不提供触发新图像或设置曝光控制的功能。您将无法使用相机特定的 SDK。如果您想要多个供应商的支持,尼康的 SDK 可以为他们的相机提供与佳能 SDK 类似的支持。

关于 PTP 和 MTP 的更多信息可以在这里找到: http ://en.wikipedia.org/wiki/Picture_Transfer_Protocol 和 http://en.wikipedia.org/wiki/Media_Transfer_Protocol

编辑

我忘了提到你可能会对WIA感兴趣,假设你的相机驱动程序提供了 WIA 接口。

于 2009-11-10T23:24:41.293 回答
0

这确实是通用的,但它可能会有所帮助。

我必须编写一个应用程序,该应用程序使用来自两个不同供应商的两个不同的条码扫描器和不同的 SDK。我创建了一个接口,它定义了我想要编码的方法和事件,然后编写了实现我的接口的适配器类。

这在我的情况下效果很好,并且从一个切换到另一个非常无缝。如果您采用相同的方法,您将不会完全依赖于一个 SDK。

于 2009-11-13T02:15:19.113 回答