Schnappen Bilder vom Windows-C# - Canon-SDK vs PTP oder MTP
Ich hoffe, erhalten Sie einige Allgemeine Leitlinien zu vollbringen, die ein scheinbar einfaches Ziel. Ich habe eine DSLR-Kamera (Canon EOS 50D) und der Notwendigkeit, eine Anwendung zu schreiben, die wird Ihnen sagen, die Kamera um ein Bild zu machen. Ich brauche auch übertragen das Bild auf den computer sowie möglicherweise das löschen von der Kamera Speicher. Ein bonus wäre eine live-Vorschau von der Kamera in meiner Anwendung. Meine Umgebung wird Windows (entweder XP Pro oder Vista Enterprise) und .Net 3.5 (C#).
Ich habe einige der Forschung getan und fand ein paar Optionen. Ich weiß funktionieren, aber schränkt mich nur mit Canon-Kameras in der Zukunft. Habe ich gefunden und heruntergeladen ein SDK von Canon bietet eine Menge Funktionalität. Ich habe mir über die SDK und es ist zwar umfangreich und in C geschrieben ist, hat es, C# - Wrapper, der die Entwicklung beschleunigen ein bisschen.
Andere Möglichkeit, die ich gefunden habe, ist Windows Tragbare Geräte. Offenbar ist es eine API zur Verfügung, sprechen Sie mit Geräten, die zur Umsetzung von PTP-und MTP-standards. Es ist COM-basierte und soweit ich sagen kann hat es keine .Net-Wrapper. Dies ist jedoch nicht ein show-stopper. Ich könnte P/Invoke die Funktionen, die ich brauche oder schreiben Sie eine Verwaltete C++ - DLL zu verwenden in meiner Anwendung zu sprechen, um die Kamera.
Ich bin auf der Suche nach jemand mit Erfahrung mit WPD geben mir Hinweise. Ich habe mir die Dokumentation durchgelesen und gesehen, dass Verweise auf das übertragen von Bildern und zum löschen von Bildern. Ich habe allerdings nicht gesehen, Erwähnung von Befehlen, um ein Bild zu machen, erhalten Sie ein Vorschau-Bild, oder sagen Fokus/auto-Fokus.
- Ich bin daran interessiert, dass die Antwort auf diese Frage. Persönlich, wenn ich nur schreiben das app für mich, ich würde versuchen, die Canon SDK-ersten. Außerdem, wenn Sie bereits eine Reihe von Canon-Objektive, Sie werden wahrscheinlich kleben mit Canon in die Zukunft :-).
- Das klingt so, als wäre es eine große CodePlex-Projekt. Ich habe eine Rebel XTi und das klingt wie ein Spaß-Konzept zu arbeiten. Wenn Sie sich entscheiden, starten Sie ein CodePlex-Projekt, auf jeden Fall lassen Sie mich wissen!
- Die Arbeit geht auf eine C++/CLI wrapper für die Canon SDK. Es war eine echte Herausforderung. Ich glaube nicht, dass ich in der Lage wäre zu release ein CodePlex-Projekt, weil ich nicht die Rechte an dem code. Sorry. Ich hätte gerne mehr Spielraum in dieser Hinsicht.
- Wünschte, ich könnte. Es ist schon eine lange Zeit und dieser code wird eingewickelt in mein ehemaliger Arbeitgeber des Geistigen Eigentums. Ich landete mit dem Canon SDK und das einwickeln der C-code mit C# P/Invoke-Klassen. Es war ziemlich anspruchsvoll. Die Canon SDK war ziemlich kryptisch und IMO viel zu direkt gebunden an die MTP. Was ich wirklich wollte, war eine Bibliothek, um einfach nur sagen "take a picture" oder "gib mir die live-Ansicht-Vorschau". Zu der Zeit, war schwer zu kommen durch. Seitdem habe ich gelernt, es gibt eine Bibliothek unter Linux, die das machen werden, leider habe ich noch nicht gearbeitet und weiß nicht, Ihren Namen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der WPD-api bietet der Befehl WPD_COMMAND_STILL_IMAGE_CAPTURE_INITIATE
Ich bin mir nicht sicher, ob Ihre Kamera unterstützt, aber es sollte einfach genug sein, um das herauszufinden. Wenn man die "wpdinfo" - tool von der Treiber-development-kit und starten Sie es mit Ihrer Kamera verbunden, dann schicken Sie es ein WPD_COMMAND_CAPABILITIES_GET_SUPPORTED_COMMANDS Befehl und sehen, ob es unterstützt weiterhin image capture-Befehl. WENN ja, dann könnte man probieren.
PTP-und MTP sind beide Protokolle für die übertragung von Dateien von einem digital still camera (DSC). Die Protokolle bieten keine Funktionalität für das auslösen von neuen Bildern, oder die Einstellung " Belichtung. Sie stecken mit den Kamera-spezifischen SDK. Wenn Sie möchten, dass mehrere Hersteller-support-Nikon hat ein SDK, das bietet eine ähnliche Unterstützung wie die Canon SDK für Ihre Kameras.
Mehr info auf PTP und MTP können hier gefunden werden:
http://en.wikipedia.org/wiki/Picture_Transfer_Protocol
und
http://en.wikipedia.org/wiki/Media_Transfer_Protocol
BEARBEITEN
Ich vergaß zu erwähnen, dass WIA für Sie interessant sein können-vorausgesetzt, Ihre Kamera-Treiber stellt eine WIA-Schnittstelle.
Den Kommentar von TallGanglyGuy ist falsch. ptp erlaubt, Sie löst neue Bilder, und ändern Sie Belichtung, etc. Einige Kameras verfügen über firmware, die nur macht einige der ptp-Befehlen.
versuchen meine Eos Framework: https://github.com/esskar/Canon.Eos.Framework
IMHO ist es eine bessere alternative als die .cs-Datei, die mit dem SDK geliefert.
Dies ist wirklich generische, aber es kann helfen.
Musste ich ein Programm schreiben, dass zwei verschiedene bar-code-Scanner von zwei verschiedenen Anbietern mit verschiedenen SDK. Ich habe eine Schnittstelle definiert die Methoden und Ereignisse, die ich wollte, um code, und dann schrieb-adapter-Klassen implementiert, die mein interface.
Dies funktionierte gut in meinem Fall, und das Umschalten von einem auf den anderen war ziemlich nahtlos. Wenn Sie nahm den gleichen Ansatz, wäre Sie nicht völlig abhängig von einem einzigen SDK.