佳能EDSDK焦点

时间:2016-10-28 20:43:16

标签: edsdk

我想发送一个命令来对焦相机,然后关闭自动对焦功能,然后拍照。这是为了避免在每张照片之间聚焦所需的时间。这可能吗?我有一个完整的程序,但这是拼图的最后一部分。

2 个答案:

答案 0 :(得分:2)

有一种更精确的方法来检测焦点开始后实际发生的情况。首先,您可以判断焦点是否成功,还可以判断焦点何时完成,因此您无需等待太长时间。

LiveView和普通模式下的操作不同。我在LiveView中对它进行了测试,但文档说明了正常模式下的一些差异。无论如何,这是为LV:

使用第一个命令:

MainCamera.SendCommand(CameraCommand.DoEvfAf, kEdsCameraCommand_EvfAf_ON);

然后定期检查kEdsPropID_FocusInfo属性以检测是否有一些焦点在焦点上。

我的相机(5D Mark IV)上的文档显然不正确,因为返回的焦点有一个justFocus值,根据文档应该是0或1,但事实并非如此!

相反,我发现justFocus至少包含以下值:

  • 16 =未知焦点状态且当前未聚焦
  • 17 =成功聚焦并暂停聚焦(在单次拍摄模式下)。但是,聚焦仍处于“开启”模式,因此您必须使用以下命令将其更改为“关闭”,否则某些操作(如缩放)将无效。
  • 18 =焦点失败
  • 20 =成功聚焦并且聚焦仍在进行中(在AF伺服模式下)

我的策略是扫描返回的焦点并搜索成功或失败的焦点。如果找到,我将通过调用

来停止聚焦过程

MainCamera.SendCommand(CameraCommand.DoEvfAf, kEdsCameraCommand_EvfAf_OFF);

答案 1 :(得分:1)

这是我找到的。

使用佳能SDK时,聚焦有点问题。 但对于你的情况,我认为最简单的事情是:

MainCamera.SendCommand(CameraCommand.PressShutterButton,(int)ShutterButton.Completely);
//Wait for some time here and if the photo wasn't taken, call:
MainCamera.SendCommand(CameraCommand.PressShutterButton,(int)ShutterButton.Completely_NonAF);
//Then, in either case, call
MainCamera.SendCommand(CameraCommand.PressShutterButton,(int)ShutterButton.OFF);

或者,如果您使用实时视图,则必须执行以下操作:

MainCamera.SendCommand(CameraCommand.DoEvfAf, 1);
//Wait for some time here
MainCamera.SendCommand(CameraCommand.DoEvfAf, 0);
MainCamera.SendCommand(CameraCommand.PressShutterButton,(int)ShutterButton.Completely_NonAF);
MainCamera.SendCommand(CameraCommand.PressShutterButton,(int)ShutterButton.OFF);

希望这对某些人有所帮助,因为我看起来很长很难。