Frage

Ich hoffe auf das Erreichen eines scheinbar einfachen Ziel eine allgemeine Anleitung zu erhalten. Ich habe eine DSLR-Kamera (Canon EOS 50D) und benötigen eine Anwendung zu schreiben, die die Kamera sagen, wird ein Bild zu machen. Ich brauche auch das Bild auf den Computer übertragen und möglicherweise aus dem Speicher der Kamera löschen. Ein Bonus wäre eine Live-Vorschau von der Kamera in meiner Anwendung zu bekommen. Meine Umgebung wird Windows (entweder XP Pro oder Vista Enterprise) und .Net 3.5 (C #) sein.

Ich habe einige der Forschung getan und ein paar Optionen gefunden. Man weiß, dass ich arbeiten, aber schränkt mich nur mit Canon-Kameras in die Zukunft. Ich habe gefunden und heruntergeladen ein SDK von Canon, die eine Menge von dieser Funktionalität bietet. Ich habe über das SDK sah und während es in C umfangreich und geschrieben ist ist das C # Wrapper haben, die auf die Entwicklung etwas beschleunigen wird.

Eine weitere Option, die ich gefunden habe, ist Windows tragbare Geräte genannt. Offenbar ist es eine API, die auf Geräte sprechen werden, die PTP und MTP-Standards implementieren. Es ist COM-basierte und soweit ich sagen kann, es keine .Net Wrapper hat. Dies ist jedoch nicht eine Show Stopper. Ich konnte P / Invoke die Funktionalität, die ich brauche oder ein Managed C ++ DLL schreibe in meiner Anwendung verwenden, um die Kamera zu sprechen.

Ich suche jemand mit Erfahrung mit WPD mir Zeiger zu geben. Ich habe die Dokumentation durchgelesen und Referenzen gesehen Bilder zu übertragen und Löschen von Bildern. Ich habe jedoch nicht erwähnt Befehle gesehen ein Bild zu machen, um eine Vorschau Bild erhalten, oder sagt Fokus / Autofokus.

War es hilfreich?

Lösung

Die WPD api bietet den Befehl WPD_COMMAND_STILL_IMAGE_CAPTURE_INITIATE

Ich bin nicht sicher, ob Ihre Kamera unterstützt, aber es sollte genug, um herauszufinden, einfach sein. Wenn Sie das „wpdinfo“ Werkzeug aus dem Treiber-Entwicklungs-Kit bekommen und es mit Ihrer Kamera verbunden beginnen dann einen WPD_COMMAND_CAPABILITIES_GET_SUPPORTED_COMMANDS Befehl senden und sehen, ob es den Standbild-Capture-Befehl unterstützt. Wenn ja, dann könnte man, dass ein Versuch geben.

Andere Tipps

PTP und MTP sind beiden Protokolle für Dateien von einer Digitalkamera (DSC) übertragen. Die Protokolle bieten keine Funktionalität für das Auslösen neue Bilder oder Belichtungseinstellung. Sie werden mit der Kamera spezifische SDK stecken. Wenn Sie mehr Hersteller-Support Nikon wollen hat ein SDK, das als das Canon SDK für ihre Kameras ähnliche Unterstützung bereitstellt.

Weitere Informationen über PTP und MTP finden Sie hier: http://en.wikipedia.org/wiki/Picture_Transfer_Protocol und http://en.wikipedia.org/wiki/Media_Transfer_Protocol

EDIT

ich habe vergessen zu erwähnen, dass WIA können Sie interessant sein, Ihre Kamera-Treiber bietet eine WIA-Schnittstelle übernehmen.

Der Kommentar von TallGanglyGuy ist falsch. ptp ermöglicht es Ihnen, neue Bilder und ändern Exposition auslösen usw. Einige Kameras haben Firmware, die nur einen Teil der ptp Befehle aussetzt.

  

PTP unterstützt gemeinsame Gerätesteuerungen, wie beispielsweise ein Bild aufgenommen, so dass   der Anwender die Vorteile der PC / Kamera-Kombination in neue nehmen und   verschiedene Arten wieder, ohne zusätzliche Software erforderlich ist.

versuchen, meine Eos Framework: https://github.com/esskar/Canon.Eos.Framework

IMHO ist es eine bessere Alternative dann der CS-Datei, die mit dem SDK kommt.

Das ist wirklich generisch, aber es kann helfen.

Ich hatte eine Anwendung zu schreiben, die von zwei verschiedenen Herstellern mit unterschiedlichen SDK zwei verschiedenen Barcode-Scanner verwendet. Ich habe eine Schnittstelle, die Methoden und Ereignisse definiert, die ich für, kodieren wollte und dann Adapter Klassen geschrieben, die meine Schnittstelle implementiert.

Das funktionierte gut in meinem Fall, und von einem zum anderen Schalt war ziemlich nahtlos. Wenn Sie den gleichen Ansatz haben, würden Sie nicht völlig abhängig sein, auf ein SDK.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top