2017-02-22 4 views
1

J'ai mon application contrôlant la caméra en utilisant C# et EDSDKWraper assez léger (que j'ai modifié un peu). Je peux déjà contrôler pratiquement tout, comme LiveView, la mise au point (automatique + manuelle), le réglage et la lecture de diverses propriétés et la prise de vue, avec un bracketing/empilage de mise au point automatique.Canon EDSDK: Prendre une photo dans LiveView rompt le LV pour toujours

Cependant, il y a un problème: Quand je commence le LiveView, puis prendre une photo en utilisant la méthode standard

SendCommand(Camera.Handle, PressShutterButton, ShutterButton_Completely_NonAF); 
SendCommand(Camera.Handle, PressShutterButton, ShutterButton_OFF); 

cela fonctionne, je peux télécharger les images ou annuler le téléchargement en utilisant Download + DownloadComplete ou DownloadCancel les fonctions. Malheureusement, après cela, il n'est plus possible d'obtenir l'image LiveView, le DownloadEvfImage renvoie OBJECT_NOT_READY et le conserve pour toujours. La seule solution est d'arrêter et de redémarrer le LiveView OU de lancer l'autofocus LiveView à l'aide de la commande DoEvfAF. Mais je voudrais éviter cela. Cela se produit à la fois sur Canon 5D Mark IV et 5D Mark III et le même problème se produit également sur un C# Framework complètement différent avec un exemple différent que je viens de télécharger sur le Web. L'EOS Utility semble bien fonctionner, il semble donc y avoir un moyen.

Est-ce que "LiveView + prendre photo + LiveView" fonctionne même dans votre application, que ce soit en C# ou en C++? Y a-t-il un truc que je dois effectuer?

J'ai déjà passé beaucoup de temps à essayer de corriger un bug, comme les données non publiées, et la recherche de réponses sur le web, mais pas de chance jusqu'à présent.

Répondre

2

Enfin trouvé ce qui se passe! Donc, pour faire savoir aux autres, le hic était que la caméra affichait l'image après que le tir ait été pris sur son écran LCD (c'est-à-dire une revue ordinaire). Pendant cet affichage, le LiveView ne fonctionne pas! L'utilitaire EOS n'a pas enregistré les images sur la carte de l'appareil photo, il n'y avait donc rien à revoir et le LV a continué sans interruption. Quoi qu'il en soit, la solution/solution de contournement consiste à se débarrasser de l'image révisée sur l'écran LCD. Jusqu'à présent, je l'ai trouvé deux façons qui à nouveau obtenir le LV de travail seamslessly, sans qu'il soit nécessaire de l'éteindre et et gifler le miroir:

Simuler la mi-course sur le déclencheur

C'est à dire ce simple code renvoie le LV en mode de fonctionnement normal:

SendCommand(Camera.Handle, PressShutterButton, ShutterButton_Halfway_NonAF); 
SendCommand(Camera.Handle, PressShutterButton, ShutterButton_OFF); 

Jouer avec les drapeaux kEdsPropID_Evf_OutputDevice

Vous pouvez modifier la sortie de LV à la caméra au lieu du PC, en tournant la sortie PC hors tension et puis de nouveau tourner le PC. Le miroir ne bougera pas. Cela signifie d'abord définir kEdsPropID_Evf_OutputDevice à KEdsEvfOutputDevice_TFT puis de le définir immédiatement, mais cette fois sur KEdsEvfOutputDevice_PC (ou KEdsEvfOutputDevice_TFT | KEdsEvfOutputDevice_PC si vous souhaitez conserver la sortie de la caméra).