佳能EDSDK焦点

Canon EDSDK Focus

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

这是我找到的。

佳能 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);

希望这对某人有所帮助,因为我为此努力寻找了很长时间。

有一种更精确的方法可以检测焦点开始后实际发生的情况。首先可以判断对焦是否成功,也可以判断对焦什么时候结束,不用等太久。

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

像你一样使用第一个命令:

MainCamera.SendCommand(CameraCommand.DoEvfAf, kEdsCameraCommand_EvfAf_ON);

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

我的相机 (5D Mark IV) 上的文档明显不正确,因为返回的对焦点有一个 justFocus 值,根据文档应该是 0 或 1,但它不是t!

相反,我发现 justFocus 至少有这些值:

  • 16 = 未知对焦状态且当前未对焦
  • 17 = 对焦成功并暂停对焦(one-shot 模式)。但是,对焦仍然是"On"模式,所以你必须使用下面的命令将其更改为"Off",否则一些操作如缩放将不起作用。
  • 18 = 对焦失败
  • 20 = 对焦成功,对焦仍在进行中(AF伺服模式下)

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

MainCamera.SendCommand(CameraCommand.DoEvfAf, kEdsCameraCommand_EvfAf_OFF);