2

我的应用程序使用 C# 和相当轻量级的 EDSDKWraper (我已经修改了一点)来控制相机。我基本上已经可以控制一切,例如 LiveView、对焦(自动 + 手动)、设置和读取各种属性和拍摄图片,可选择使用自动对焦包围/堆叠。

但是,有一个问题:当我启动 LiveView 然后使用标准方式拍照时

SendCommand(Camera.Handle, PressShutterButton, ShutterButton_Completely_NonAF);
SendCommand(Camera.Handle, PressShutterButton, ShutterButton_OFF);

它有效,我可以下载图片或使用Download+DownloadCompleteDownloadCancel功能取消下载。不幸的是,在那之后不可能再获得 LiveView 图像,DownloadEvfImage返回OBJECT_NOT_READY并让它永远返回。

唯一的出路是停止并再次启动 LiveView 或使用DoEvfAF命令启动 LiveView 自动对焦。但我想避免这种情况。

这发生在佳能 5D Mark IV 和 5D Mark III 上,同样的问题也发生在完全不同的 C# 框架上,我刚刚从网上下载了一个不同的示例。EOS Utility 似乎工作正常,所以似乎有某种方法。

“LiveView + 拍照 + LiveView 再次”甚至可以在您的应用程序中使用,无论是 C# 还是 C++?我需要执行一些技巧吗?

我已经花了很多时间试图找出一个错误,比如没有发布数据,并在网上搜索答案,但到目前为止还没有运气。

4

1 回答 1

4

终于发现是怎么回事了!所以要让其他人知道,关键是相机在拍摄后在其液晶显示屏上显示照片(即普通评论)。在此显示期间,LiveView 不起作用!EOS 实用程序没有将图像保存在相机卡上,因此没有什么可查看的,LV 继续不间断。

无论如何,解决方案/解决方法是摆脱 LCD 上的审查图像。到目前为止,我已经找到了两种方法可以再次让 LV 无缝工作,而无需关闭和打开它并拍打镜子:

模拟半按快门按钮

即这个简单的代码将LV返回到正常工作模式:

SendCommand(Camera.Handle, PressShutterButton, ShutterButton_Halfway_NonAF);
SendCommand(Camera.Handle, PressShutterButton, ShutterButton_OFF);

使用 kEdsPropID_Evf_OutputDevice 标志

您可以将 LV 输出更改为相机而不是 PC,关闭 PC 输出,然后再次打开 PC 输出。镜子不会动。这意味着首先设置kEdsPropID_Evf_OutputDeviceKEdsEvfOutputDevice_TFT,然后立即将其重新设置,但这次设置为KEdsEvfOutputDevice_PC(或者KEdsEvfOutputDevice_TFT | KEdsEvfOutputDevice_PC如果您想保留相机输出)。

于 2017-02-24T18:24:14.707 回答