2016-10-28 1 views
3

Je voudrais envoyer une commande pour faire la mise au point de l'appareil photo, puis désactiver la fonction de mise au point automatique, puis prendre des photos. Ceci afin d'éviter le temps nécessaire pour faire la mise au point entre chaque photo. Est-ce possible? J'ai un programme entièrement écrit, mais c'est la dernière pièce du puzzle.Canon EDSDK Focus

Répondre

1

Voici ce que j'ai trouvé.

La mise au point est un peu problématique avec le Canon SDK. Mais pour votre cas, je pense que la chose la plus simple serait:

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

Ou si vous utilisez la vue en direct, vous devez faire quelque chose comme ceci:

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

Hope this helps quelqu'un, comme J'ai cherché longtemps et dur pour cela.

2

Il existe un moyen plus précis de détecter ce qui se passe réellement après le démarrage de la mise au point. Premièrement, vous pouvez dire si la mise au point a réussi et vous pouvez également savoir quand le focus a été terminé, vous n'avez donc pas besoin d'attendre trop longtemps.

L'opération est différente dans LiveView et en mode normal. Je l'ai testé dans LiveView, mais la documentation indique une différence en mode normal. Quoi qu'il en soit, ceci est pour LV:

Utilisez la première commande que vous avez fait:

MainCamera.SendCommand(CameraCommand.DoEvfAf, kEdsCameraCommand_EvfAf_ON);

puis vérifier périodiquement la propriété kEdsPropID_FocusInfo pour détecter si certains des points de discussion sont mis au point.

La documentation est clairement incorrecte sur mon appareil photo (5D Mark IV), parce que les points de focus retournés ont une valeur justFocus, qui devrait être 0 ou 1 selon les docs, mais ce n'est pas le cas!

Au lieu de cela, je trouve que justFocus a au moins ces valeurs:

  • 16 = état de mise au point inconnu et en se concentrant actuellement pas
  • 17 = Axé avec succès et mise au point est mis en pause (en mode one-shot). Cependant, la mise au point est toujours en mode "On", vous devez donc la changer en "Off" en utilisant la commande ci-dessous, sinon certaines opérations comme le zoom ne fonctionneront pas.
  • 18 = Mise au point a échoué
  • 20 = Axé avec succès et mise au point est toujours en cours (en AF en mode Servo)

Ma tactique consiste à parcourir les points de discussion retournés et la recherche de mise au point réussi ou échoué. Si trouvé, je puis arrêter le processus de mise au point en appelant:

MainCamera.SendCommand(CameraCommand.DoEvfAf, kEdsCameraCommand_EvfAf_OFF);

+0

Salut, je ne trouve pas seulement se concentrer propriété. J'ai PropertyID.FocusInfo, je ne peux pas trouver aucune de ses valeurs. Une aide est grandement appréciée, Cordialement – smoothumut

+0

Cela fait longtemps et j'utilise un wrapper EDSDK pour C#, qui couvre un peu les choses. Toutefois, si vous récupérez les données pour la propriété FocusInfo, vous devez obtenir une structure EdsFocusInfo, dont une partie est le tableau focusPoint (structures EdsFocusPoint). Chacun des points de discussion a sa propre variable justFocus. –