Pergunta

Estou esperando para receber alguma orientação geral sobre a realização de uma meta aparentemente simples. Eu tenho uma câmera DSLR (Canon EOS 50D) e necessidade de escrever um aplicativo que irá dizer a câmera para tirar uma foto. Eu também preciso transferir a imagem para o computador e, possivelmente, excluí-lo do armazenamento da câmera. Um bônus seria para obter uma pré-visualização ao vivo da câmera em meu aplicativo. Meu ambiente será Windows (XP Pro ou Vista Enterprise) e .Net 3.5 (C #).

Eu fiz alguma pesquisa e encontrou um par de opções. Um eu sei que vai funcionar, mas limites me a usar apenas câmeras da Canon no futuro. Eu encontrei e baixado um SDK da Canon que oferece um monte de esta funcionalidade. Eu olhei sobre o SDK e enquanto é extensa e escrito em C que tem C # wrappers que vai acelerar o desenvolvimento de um bit.

Outra opção que eu encontrei é chamado de Windows dispositivos portáteis. Aparentemente, é uma API que vai falar com dispositivos que implementam padrões PTP e PMP. É baseado COM e, tanto quanto eu posso dizer que não tem wrappers .Net. Esta não é, contudo, uma rolha de show. Eu poderia P / Invoke a funcionalidade que eu preciso ou escrever um ++ DLL C conseguiu usar no meu aplicativo para conversar com a câmera.

Eu estou procurando alguém com experiência com WPD para me dar ponteiros. Eu já percorreu a documentação e visto referências a transferência de imagens e apagar imagens. Não tenho, porém, menção visto de comandos para tirar uma foto, obter uma imagem de visualização, ou dizer / auto-focus foco.

Foi útil?

Solução

O api WPD fornece o comando WPD_COMMAND_STILL_IMAGE_CAPTURE_INITIATE

Eu não tenho certeza se os seus suportes de câmera, mas isso deve ser suficiente simples para descobrir. Se você pode obter o "wpdinfo" ferramenta a partir do kit de desenvolvimento de motorista e iniciá-lo com sua câmera ligada, em seguida, enviá-lo um comando WPD_COMMAND_CAPABILITIES_GET_SUPPORTED_COMMANDS e ver se ele suporta o comando de captura de imagem estática. Se assim for, então você pode dar um que tente.

Outras dicas

PTP e MTP são os dois protocolos para a transferência de arquivos a partir de uma câmera fotográfica digital (DSC). Os protocolos fornecem nenhuma funcionalidade para desencadear novas imagens, ou a criação de controle de exposição. Você vai ser preso usando o SDK câmera específica. Se você quiser suporte a múltiplos fornecedores Nikon tem um SDK que fornece suporte semelhante como a Canon SDK para suas câmeras.

Mais informações sobre PTP e MTP pode ser encontrada aqui: http://en.wikipedia.org/wiki/Picture_Transfer_Protocol e http://en.wikipedia.org/wiki/Media_Transfer_Protocol

Editar

Eu esqueci de mencionar que WIA pode ser interessante para você, assumindo o motorista de sua câmera fornece uma interface WIA.

O comentário de TallGanglyGuy está incorreto. ptp lhe permite desencadear novas imagens e exposição a mudança, etc. Algumas câmeras têm firmware que só expõe alguns dos comandos PTP.

PTP suporta controles de dispositivo comuns, como tirar uma fotografia, de modo a que o usuário pode tirar vantagem da combinação PC / câmera em novos e diferentes formas novamente, sem a necessidade de software adicional.

tentar o meu Eos Framework: https://github.com/esskar/Canon.Eos.Framework

IMHO é uma alternativa melhor, em seguida, o arquivo .cs que vem com o SDK.

Este é realmente genérico, mas pode ajudar.

Eu tive que escrever um aplicativo que usou dois scanners de código de barras diferentes de dois fornecedores diferentes, com diferentes SDK do. Eu criei uma interface que define os métodos e eventos que eu queria código para, em seguida, escreveu adaptador classes que implementaram a minha interface.

Isso funcionou bem no meu caso, e mudar de um para o outro foi muito transparente. Se você tomou a mesma abordagem, você não estaria totalmente dependente de um SDK.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top