佳能 EDSDK:在 LiveView 中拍照会永远破坏 LV

Canon EDSDK: Taking photo in LiveView breaks up the LV forever

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

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

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

有效,我可以使用Download + DownloadCompleteDownloadCancel 功能下载图片或取消下载。不幸的是,此后无法再获取 LiveView 图像,DownloadEvfImage returns OBJECT_NOT_READY 并使其永远返回。

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

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

"LiveView + taking photo + LiveView again" 甚至可以在您的应用程序中运行,无论是 C# 还是 C++?我需要执行一些技巧吗?

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

终于找到发生了什么事了!因此,为了让其他人知道,要注意的是相机在其 LCD 上拍摄照片后正在显示照片(即普通审查)。在此显示期间,LiveView 不工作! EOS 实用程序没有将图像保存在相机卡上,所以没有什么可审查的,LV 继续不间断。

总之,solution/workaround就是去掉LCD上的评论图。到目前为止,我已经找到了两种方法可以再次让 LV 无缝工作,而无需将其关闭和打开并拍打镜子:

模拟半按快门

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

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

使用 kEdsPropID_Evf_OutputDevice 标志

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