2009-11-10 22 views
8

spero di ricevere alcune indicazioni generali sulla realizzazione di un obiettivo apparentemente semplice. Ho una fotocamera DSLR (Canon EOS 50D) e ho bisogno di scrivere un'applicazione che dirà alla fotocamera di scattare una foto. Devo anche trasferire l'immagine sul computer ed eventualmente cancellarla dalla memoria della videocamera. Un bonus sarebbe ottenere un'anteprima dal vivo dalla fotocamera nella mia applicazione. Il mio ambiente sarà Windows (XP Pro o Vista Enterprise) e .Net 3.5 (C#).scattare foto da Windows C# Canon SDK vs PTP o MTP

Ho fatto qualche ricerca e ho trovato un paio di opzioni. Uno che so funzionerà, ma mi limita a utilizzare solo le fotocamere Canon in futuro. Ho trovato e scaricato un SDK di Canon che fornisce molte funzionalità. Ho esaminato l'SDK e mentre è esteso e scritto in C ha wrapper C# che velocizzeranno lo sviluppo un po '.

Un'altra opzione che ho trovato è chiamato Windows Portable Devices. Apparentemente, è un'API che parlerà con dispositivi che implementano gli standard PTP e MTP. È basato su COM e, per quanto posso dire, non ha wrapper .Net. Questo non è comunque uno stopper. Potrei P/Richiamare la funzionalità di cui ho bisogno o scrivere una DLL gestita C++ da utilizzare nella mia applicazione per parlare con la fotocamera.

Sto cercando qualcuno con esperienza con WPD a me dare indicazioni. Ho letto attentamente la documentazione e ho visto riferimenti al trasferimento di immagini e all'eliminazione di immagini. Tuttavia, non ho visto menzionare comandi per scattare una foto, ottenere un'immagine di anteprima o dire messa a fuoco/auto-focus.

+0

Sono interessato a vedere la risposta a questa domanda. Personalmente, se sto solo scrivendo l'app per me stesso, proverei prima l'SDK Canon. Inoltre, se hai già un set di obiettivi Canon, in futuro probabilmente starai con Canon :-). –

+1

Sembra che sarebbe un ottimo progetto CodePlex. Ho un Rebel XTi e questo suona come un concetto divertente su cui lavorare. Se decidi di avviare un progetto CodePlex, fammelo sapere! –

+0

Il lavoro continua su un wrapper C++/CLI per l'SDK Canon. È stata una vera sfida. Non penso che sarei in grado di rilasciare un progetto CodePlex perché non avrò diritti sul codice. Scusate. Mi piacerebbe avere più libertà in questo senso. – Nate

risposta

2

L'API WPD fornisce il comando WPD_COMMAND_STILL_IMAGE_CAPTURE_INITIATE

io non sono sicuro se la vostra macchina fotografica la sostiene, ma dovrebbe essere abbastanza semplice da scoprire. Se è possibile ottenere lo strumento "wpdinfo" dal kit di sviluppo del driver e avviarlo con la videocamera collegata, inviare un comando WPD_COMMAND_CAPABILITIES_GET_SUPPORTED_COMMANDS e verificare se supporta il comando di acquisizione di immagini fisse. Se così fosse, potresti provare.

+0

Grazie! Questo e 'esattamente quello che stavo cercando. Non l'ho ancora provato, ma una volta avrò la possibilità. Attualmente sto usando l'SDK Canon. Ha i suoi problemi, per non parlare funziona solo con fotocamere EOS Canon ... – Nate

+0

Ho finito per provarlo. Sfortunatamente non è stato supportato dalla mia EOS 50D. Se mai avrò un'altra fotocamera da provare, lo farò. Ho inviato per e-mail gli sviluppatori di Microsoft WPD (utilizzando il blog WPD) per un elenco di produttori che supportano vari comandi WPD, ma non hanno tale elenco. Erano, comunque molto utili nel capire come dovrei usare WPD. – Nate

2

PTP e MTP sono entrambi i protocolli per il trasferimento di file da una fotocamera digitale (DSC). I protocolli non forniscono funzionalità per l'attivazione di nuove immagini o l'impostazione del controllo dell'esposizione. Sarai bloccato utilizzando l'SDK specifico della videocamera. Se si desidera un supporto per più fornitori, Nikon ha un SDK che fornisce un supporto simile all'SDK Canon per le proprie telecamere.

Maggiori informazioni su PTP e MTP può essere trovato qui: http://en.wikipedia.org/wiki/Picture_Transfer_Protocol e http://en.wikipedia.org/wiki/Media_Transfer_Protocol

EDIT

ho dimenticato di dire che WIA potrebbe essere interessante per voi, supponendo che il driver della fotocamera fornisce un Interfaccia WIA

+0

Ho esaminato WIA, che è stato sostituito da Windows Portable Devices. Mentre non sono sicuro che PTP o MTP includano questa funzionalità (scattare foto), ho visto le informazioni in WPD che allude a ciò che potrebbe. In ogni caso, si suppone che WPD (vedi sotto), che è quello che stavo considerando di utilizzare con questa app. Da allora ho deciso di utilizzare l'SDK ed eventualmente esplorare WPD in un secondo momento. "Le applicazioni basate su WPD possono esplorare un dispositivo, inviare e ricevere contenuti e persino controllare il dispositivo, ad esempio, scattare una foto ..." http://msdn.microsoft.com/en-us /library/dd388998%28VS.85%29.aspx – Nate

0

Questo è veramente generico, ma può essere d'aiuto.

ho dovuto scrivere un'applicazione che utilizza due diversi scanner di codici a barre da due fornitori diversi con differenti SDK. Ho creato un'interfaccia che definiva i metodi e gli eventi che volevo codificare, quindi ho scritto le classi dell'adattatore che implementavano la mia interfaccia.

Questo ha funzionato bene nel mio caso e il passaggio da uno all'altro era piuttosto semplice. Se hai seguito lo stesso approccio, non saresti totalmente dipendente da un solo SDK.

+0

Sì, un'interfaccia è un dato. Posso facilmente creare una classe base o un'interfaccia con metodi generici e implementata secondo necessità. Sebbene ciò sia utile, disporre di un singolo SDK per molte marche di fotocamere richiederebbe meno lavoro. Grazie. – Nate

2

Il commento da TallGanglyGuy non è corretto. ptp ti consente di attivare nuove immagini e cambiare esposizione, ecc.Alcune fotocamere dispongono di firmware che espone solo alcuni dei comandi ptp.

PTP supporta i controlli dei dispositivi comuni, come ad esempio di scattare una foto, in modo che l'utente potrebbe sfruttare la combinazione di PC/fotocamera in nuovo e diversi modi di nuovo, senza bisogno di software aggiuntivo.

Problemi correlati