我想发送一个命令来对焦相机,然后关闭自动对焦功能,然后拍照。这是为了避免在每张照片之间聚焦所需的时间。这可能吗?我有一个完整的程序,但这是拼图的最后一部分。
答案 0 :(得分:2)
有一种更精确的方法来检测焦点开始后实际发生的情况。首先,您可以判断焦点是否成功,还可以判断焦点何时完成,因此您无需等待太长时间。
LiveView和普通模式下的操作不同。我在LiveView中对它进行了测试,但文档说明了正常模式下的一些差异。无论如何,这是为LV:
使用第一个命令:
MainCamera.SendCommand(CameraCommand.DoEvfAf, kEdsCameraCommand_EvfAf_ON);
然后定期检查kEdsPropID_FocusInfo
属性以检测是否有一些焦点在焦点上。
我的相机(5D Mark IV)上的文档显然不正确,因为返回的焦点有一个justFocus
值,根据文档应该是0或1,但事实并非如此!
相反,我发现justFocus
至少包含以下值:
我的策略是扫描返回的焦点并搜索成功或失败的焦点。如果找到,我将通过调用
来停止聚焦过程 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);
希望这对某些人有所帮助,因为我看起来很长很难。