2016-10-28 66 views
3

我想發送一個命令來對焦相機,然後關閉自動對焦功能,然後拍照。這是爲了避免在每張照片之間聚焦的時間。這可能嗎?我有一個完整的程序,但這是最後一塊難題。Canon EDSDK Focus

回答

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

希望這可以幫助別人,爲我爲此長期努力尋找。

2

有一種更精確的方法來檢測焦點開始後實際發生的情況。首先,您可以判斷焦點是否成功,並且您可以知道焦點何時完成,因此您無需等待太久。

LiveView和正常模式下的操作不同。我已經在LiveView中對它進行了測試,但文檔在正常模式下指出了一些差異。無論如何,這是LV:

使用,你做的第一命令:

MainCamera.SendCommand(CameraCommand.DoEvfAf, kEdsCameraCommand_EvfAf_ON);

然後定期檢查kEdsPropID_FocusInfo屬性來檢測,如果一些焦點都在關注的焦點。

由於返回的焦點有justFocus值,根據文檔應該是0或1,但它不是這樣的!在我的相機(5D Mark IV)上,文檔顯然不正確。

相反,我發現,justFocus具有至少以下值:

  • 16 =未知聚焦狀態,當前未聚焦
  • 17 =聚焦成功地和聚焦暫停(在單次模式)。但是,對焦仍處於「開」模式,因此您必須使用以下命令將其更改爲「關」,否則某些操作(如縮放)將不起作用。
  • 18 =對焦失敗
  • 20 =成功地專注和聚焦仍在進行中(在AF伺服模式下)

我的戰術是通過返回的焦點掃描和搜索成功或失敗的焦點。如果找到了,我會再通過調用停止調焦處理:

MainCamera.SendCommand(CameraCommand.DoEvfAf, kEdsCameraCommand_EvfAf_OFF);

+0

您好,我無法找到只關注性能。我有PropertyID.FocusInfo,我找不到它的任何值。一個幫助深受讚賞,Regards – smoothumut

+0

它已經很長一段時間了,我正在使用一些EDSDK包裝器C#,它涵蓋了一些東西。但是,如果您檢索FocusInfo屬性的數據,則應該得到一個EdsFocusInfo結構,其中一部分是focusPoint數組(EdsFocusPoint結構)。每個焦點都有自己的justFocus變量。 –