佳能 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
+ DownloadComplete
或DownloadCancel
功能下载图片或取消下载。不幸的是,此后无法再获取 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
)。
我的应用程序使用 C# 和相当轻量级的 EDSDKWraper(我对其进行了一些修改)来控制相机。我基本上已经可以控制一切,例如 LiveView、对焦(自动 + 手动)、设置和读取各种属性以及拍摄照片,可选择自动对焦 bracketting/stacking。
但是,有一个问题:当我启动LiveView然后使用标准方式拍照时
SendCommand(Camera.Handle, PressShutterButton, ShutterButton_Completely_NonAF);
SendCommand(Camera.Handle, PressShutterButton, ShutterButton_OFF);
有效,我可以使用Download
+ DownloadComplete
或DownloadCancel
功能下载图片或取消下载。不幸的是,此后无法再获取 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
)。