Fangen von Bildern aus Windows C # Canon SDK vs PTP oder MTP

8

Ich hoffe, eine allgemeine Anleitung zur Erreichung eines scheinbar einfachen Ziels zu erhalten. Ich habe eine DSLR-Kamera (Canon EOS 50D) und muss eine Anwendung schreiben, die der Kamera sagt, dass sie ein Foto machen soll. Ich muss das Bild auch 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 erhalten. Meine Umgebung wird Windows (entweder XP Pro oder Vista Enterprise) und .Net 3.5 (C #) sein.

Ich habe etwas recherchiert und ein paar Optionen gefunden. Eines, das ich kenne, wird funktionieren, beschränkt mich aber darauf, in Zukunft nur Canon-Kameras zu verwenden. Ich habe ein SDK von Canon gefunden und heruntergeladen, das viele dieser Funktionen bietet. Ich habe über das SDK geschaut und obwohl es umfangreich ist und in C geschrieben ist, hat es C # -Wrapper, die die Entwicklung ein wenig beschleunigen.

Eine andere Option, die ich gefunden habe, heißt Windows Portable Devices. Offensichtlich ist es eine API, die mit Geräten kommunizieren wird, die PTP- und MTP-Standards implementieren. Es ist COM-basiert und soweit ich es sagen kann, hat es keine .Net Wrapper. Dies ist jedoch kein Show-Stopper. Ich könnte P / rufen Sie die Funktionalität, die ich brauche, oder schreiben Sie eine verwaltete C ++ - DLL, um in meiner Anwendung zu verwenden, um mit der Kamera zu sprechen.

Ich suche jemanden mit Erfahrung mit WPD, um mir Hinweise zu geben. Ich habe die Dokumentation gelesen und Referenzen zum Übertragen von Bildern und Löschen von Bildern gesehen. Ich habe jedoch keine Befehle erwähnt, um ein Bild aufzunehmen, ein Vorschaubild zu erhalten oder Fokus / Autofokus zu sagen.

    
Nate 10.11.2009, 18:59
quelle

5 Antworten

2

Die WPD-API liefert den Befehl WPD_COMMAND_STILL_IMAGE_CAPTURE_INITIATE

Ich bin mir nicht sicher, ob deine Kamera es unterstützt, aber es sollte einfach genug sein, um es herauszufinden. Wenn Sie das Tool "wpdinfo" aus dem Treiber-Entwicklungskit erhalten und es mit angeschlossener Kamera starten können, senden Sie ihm einen WPD_COMMAND_CAPABILITIES_GET_SUPPORTED_COMMANDS-Befehl und prüfen Sie, ob es den Standbild-Capture-Befehl unterstützt. Wenn ja, dann könntest du es versuchen.

    
obelix 22.01.2010, 12:07
quelle
2

PTP und MTP sind beide Protokolle für die Übertragung von Dateien von einer digitalen Standbildkamera (DSC). Die Protokolle bieten keine Funktionen zum Auslösen neuer Bilder oder zum Einstellen der Belichtungssteuerung. Sie werden mit dem kameraspezifischen SDK feststecken. Wenn Sie Unterstützung mehrerer Hersteller wünschen, bietet Nikon ein SDK, das ähnliche Unterstützung bietet wie das Canon SDK für ihre Kameras.

Weitere Informationen zu PTP und MTP finden Sie hier: Ссылка und Ссылка

BEARBEITEN

Ich habe vergessen zu erwähnen, dass WIA für Sie interessant sein könnte, Angenommen, der Treiber Ihrer Kamera bietet eine WIA-Schnittstelle.

    
tallganglyguy 10.11.2009 23:24
quelle
2

Der Kommentar von TallGanglyGuy ist falsch. Mit ptp können Sie neue Bilder auslösen und die Belichtung ändern usw. Einige Kameras haben Firmware, die nur einige der ptp-Befehle verfügbar macht.

  

PTP unterstützt allgemeine Gerätesteuerungen, z. B. das Aufnehmen von Bildern   der Benutzer könnte die PC / Kamera-Kombination in neuen und nutzen   verschiedene Wege wieder, ohne zusätzliche Software zu benötigen.

user607645 15.08.2011 22:37
quelle
2

probiere mein Eos-Framework: Ссылка

IMHO ist es eine bessere Alternative als die .cs-Datei, die mit dem SDK kommt.

    
esskar 06.02.2012 20:52
quelle
0

Das ist wirklich generisch, aber es kann helfen.

Ich musste eine Anwendung schreiben, die zwei verschiedene Barcode-Scanner von zwei verschiedenen Herstellern mit unterschiedlichen SDKs verwendete. Ich habe eine Schnittstelle erstellt, die die Methoden und Ereignisse definiert, für die ich kodieren wollte, und dann Adapterklassen geschrieben, die meine Schnittstelle implementiert haben.

Das funktionierte in meinem Fall gut und der Wechsel von einem zum anderen war ziemlich nahtlos. Wenn Sie den gleichen Ansatz verfolgen, wären Sie nicht völlig von einem SDK abhängig.

    
Aaron Daniels 13.11.2009 02:15
quelle

Tags und Links