Question

J'espère recevoir des orientations générales sur la réalisation d'un objectif apparemment simple. J'ai un appareil photo reflex numérique (Canon EOS 50D) et besoin d'écrire une application qui l'appareil photo pour prendre une photo. Je dois aussi transférer l'image à l'ordinateur et éventuellement le supprimer de la mémoire de l'appareil. Un bonus serait d'obtenir un aperçu en direct de la caméra dans ma demande. Mon environnement sera de Windows (soit XP Pro ou Vista Enterprise) et .Net 3.5 (C #).

Je l'ai fait quelques recherches et trouvé quelques options. Je ne connais personne va travailler, mais me limite à utiliser uniquement les appareils photo Canon à l'avenir. Je l'ai trouvé et téléchargé un SDK de Canon qui offre beaucoup de cette fonctionnalité. Je l'ai regardé par-dessus le SDK et alors qu'il est vaste et écrit en C, il n'ont wrappers C # qui accélérer le développement un peu.

Une autre option que j'ai trouvé est appelé Portable Devices de Windows. Apparemment, il est une API qui parlera aux appareils qui mettent en œuvre des normes de PTP et MTP. Il est COM base et pour autant que je peux dire qu'il n'a pas wrappers .Net. Ce n'est pas cependant un bouchon de spectacle. Je pourrais P / Invoke la fonctionnalité que je dois écrire un ou Managed C ++ DLL à utiliser dans mon application pour parler à la caméra.

Je cherche quelqu'un avec l'expérience avec WPD pour me donner des pointeurs. Je l'ai lu attentivement la documentation et vu les références à transférer des images et suppression des images. Je n'ai pas, cependant, on voit des commandes pour prendre une photo, obtenir une image d'aperçu, ou dire mise au point / auto-focus.

Était-ce utile?

La solution

L'API WPD fournit la commande WPD_COMMAND_STILL_IMAGE_CAPTURE_INITIATE

Je ne suis pas sûr que votre appareil prend en charge, mais il devrait être assez simple pour savoir. Si vous pouvez obtenir l'outil « wpdinfo » du kit de développement de pilotes et démarrer avec votre appareil photo connecté puis envoyer une commande WPD_COMMAND_CAPABILITIES_GET_SUPPORTED_COMMANDS et voir si elle prend en charge la commande de capture d'image fixe. Si oui, alors vous pourriez donner que l'essayer.

Autres conseils

PTP et MTP sont tous deux des protocoles pour le transfert des fichiers à partir d'un appareil photo numérique (DSC). Les protocoles ne fournissent aucune fonctionnalité pour déclencher de nouvelles images ou réglage du contrôle de l'exposition. Vous serez coincé à l'aide du SDK spécifique de la caméra. Si vous souhaitez le soutien de plusieurs fournisseurs Nikon a un SDK qui fournit un soutien similaire que le SDK Canon pour leurs caméras.

Plus d'info sur se trouve PTP et MTP ici: http://en.wikipedia.org/wiki/Picture_Transfer_Protocol et http://en.wikipedia.org/wiki/Media_Transfer_Protocol

EDIT

J'ai oublié de mentionner que WIA peut être intéressant de vous, en supposant que le pilote de l'appareil photo fournit une interface WIA.

Le commentaire de TallGanglyGuy est incorrect. ptp ne vous permet de déclencher de nouvelles images et de modifier l'exposition, etc. Certaines caméras ont firmware qui n'expose que quelques-unes des commandes ptp.

  

PTP prend en charge les commandes d'appareil courantes, telles que prendre une photo, de sorte que   l'utilisateur peut profiter de la combinaison PC / appareil photo nouvelle   différentes façons encore, sans nécessiter un logiciel supplémentaire.

essayer mon cadre Eos: https://github.com/esskar/Canon.Eos.Framework

à mon humble avis, il est une meilleure alternative, le fichier .cs qui vient avec le kit de développement.

Ceci est vraiment générique, mais il peut aider.

Je devais écrire une application qui utilise deux scanners de codes à barres différents de deux fournisseurs différents avec différents SDK. J'ai créé une interface qui définit les méthodes et les événements que je voulais coder pour, puis écrivis classes d'adaptateur qui mis en œuvre mon interface.

Cela a bien fonctionné dans mon cas, et le passage de l'un à l'autre était assez transparente. Si vous avez pris la même approche, vous ne seriez pas totalement dépendant de l'un SDK.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top