Canon EDSDK Focus

Я хотел бы отправить команду, чтобы сфокусировать камеру, затем отключить функцию автоматической фокусировки, а затем сделать фотографии. Это сделано для того, чтобы избежать фокусировки между фотографиями. Это возможно? У меня полностью написана программа, но это последний кусок головоломки.

2 ответа

Решение

Вот что я нашел.

фокусировка немного проблематична с Canon 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 в соответствии с документацией, но это не так!

Вместо этого я обнаружил, что justFocus имеет по крайней мере эти значения:

  • 16 = неизвестное состояние фокуса и в данный момент не фокусируется
  • 17 = Фокусировка выполнена успешно, фокусировка приостановлена ​​(в режиме однократной съемки). Однако фокусировка все еще находится в режиме "Вкл.", Поэтому вы должны изменить ее на "Выкл.", Используя приведенную ниже команду, в противном случае некоторые операции, такие как масштабирование, не будут работать.
  • 18 = Фокус не удался
  • 20 = фокусировка выполнена успешно, фокусировка все еще выполняется (в режиме следящего АФ)

Моя тактика состоит в том, чтобы сканировать возвращенные точки фокусировки и искать успешную или неудачную фокусировку. Если найден, я остановлю процесс фокусировки, вызвав:

MainCamera.SendCommand(CameraCommand.DoEvfAf, kEdsCameraCommand_EvfAf_OFF);

Другие вопросы по тегам