从Windows C#Canon SDK与PTP或MTP对齐图片

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

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

我发现的另一个选项叫做Windows便携设备。 显然,它是一个API,可以与实现PTP和MTP标准的设备进行通信。 它是基于COM的,据我所知,它没有.Net包装器。 然而,这不是一个节目限制。 我可以P / Invoke我需要的function或写一个托管C ++ DLL在我的应用程序中使用与相机交谈。

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

WPD api提供命令WPD_COMMAND_STILL_IMAGE_CAPTURE_INITIATE

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

PTP和MTP都是用于从数码相机(DSC)传输文件的协议。 协议不提供触发新图像或设置曝光控制的function。 你将被困在使用相机专用SDK。 如果您需要多个供应商支持,尼康有一个SDK,可以为其相机提供与Canon 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 /相机组合,而无需额外的软件。

  • 引自http://msdn.microsoft.com/en-us/windows/hardware/gg463507.aspx#EXC

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

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

这是非常通用的,但它可能有所帮助。

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

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