我希望获得一些关于实现看似简单的目标的一般指导。我有一台 DSLR 相机(佳能 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 经验的人给我指点。我仔细阅读了文档并看到了有关传输图像和删除图像的参考。然而,我还没有看到提及拍照、获取预览图像或对焦/自动对焦的命令。

有帮助吗?

解决方案

在WPD API提供指令WPD_COMMAND_STILL_IMAGE_CAPTURE_INITIATE

我不知道您的相机是否支持它,但它应该是足够简单了解一下。如果你可以从驱动程序开发工具包中的“wpdinfo”工具,并与您的相机连接启动它,然后它发送一个命令WPD_COMMAND_CAPABILITIES_GET_SUPPORTED_COMMANDS,看看它支持静态图像捕捉命令。如果是这样,那么你可以给一个尝试。

其他提示

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接口。

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

PTP支持常见的设备控件,例如拍照,以便用户可以再次以新的和不同的方式利用PC/摄像头组合,而无需其他软件。

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

IMHO它然后一个更好的选择附带SDK中的cs文件。

这是真正通用的,但它可以帮助。

我不得不编写使用两种不同的条形码扫描仪从与不同SDK的两个不同的供应商的应用程序。我创建了一个定义,我想为代码,然后写道,实现我的接口适配器类的方法和事件的接口。

这在我的情况效果很好,并从一个到另一个的切换是相当无缝的。如果你采取了同样的方法,你就不会完全依赖于一个SDK。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top