Windows C# から写真をスナップする Canon SDK と PTP または MTP の比較
-
19-09-2019 - |
質問
一見単純な目標を達成するための一般的なガイダンスが得られることを期待しています。私は DSLR カメラ (Canon EOS 50D) を持っているので、カメラに写真を撮るように指示するアプリケーションを作成する必要があります。また、写真をコンピュータに転送し、場合によってはカメラのストレージから削除する必要もあります。ボーナスとしては、アプリケーションのカメラからライブ プレビューを取得できることです。私の環境は Windows (XP Pro または Vista Enterprise) と .Net 3.5 (C#) になります。
いくつか調査を行ったところ、いくつかの選択肢が見つかりました。私が知っているものはうまく機能しますが、将来的にはCanonのカメラのみを使用するように制限されます。この機能の多くを提供する SDK を Canon から見つけてダウンロードしました。SDK に目を通したところ、これは広範で C で書かれていますが、開発を少しスピードアップする C# ラッパーが含まれています。
私が見つけたもう 1 つのオプションは、Windows ポータブル デバイスと呼ばれるものです。どうやら、これは PTP および MTP 標準を実装するデバイスと通信する API のようです。これは COM ベースであり、私の知る限り、.Net ラッパーはありません。ただし、これはショーストッパーではありません。必要な機能を P/Invoke したり、マネージド C++ DLL を作成してアプリケーションで使用してカメラと通信したりできます。
WPD の経験があり、アドバイスをいただける方を探しています。ドキュメントを熟読し、イメージの転送とイメージの削除に関する参照を確認しました。ただし、写真を撮る、プレビュー画像を取得する、またはフォーカス/オートフォーカスなどのコマンドについての言及は見たことがありません。
解決
WPD APIは、コマンドWPD_COMMAND_STILL_IMAGE_CAPTURE_INITIATEを提供
私はあなたのカメラがそれをサポートしているかどうかわからないが、見つけることが十分に単純でなければなりません。あなたは、ドライバ開発キットから「wpdinfo」ツールを取得し、接続したカメラでそれを起動することができた場合は、それにWPD_COMMAND_CAPABILITIES_GET_SUPPORTED_COMMANDSコマンドを送信し、それが静止画キャプチャコマンドをサポートしているかどうかを確認します。そうならば、あなたはそれを試してみることができます。
他のヒント
PTPとMTPの両方デジタルスチルカメラ(DSC)との間でファイルを転送するためのプロトコルです。プロトコルは、新しいイメージをトリガ、または露出制御を設定するための機能を提供しません。あなたは、カメラ固有のSDKを使用して立ち往生されます。あなたは、複数のベンダーのサポートをしたい場合は、ニコンが自分のカメラ用キヤノンSDKと同様のサポートを提供するSDKを持っています。
PTPとMTPの詳細情報はここで見つけることができます: http://en.wikipedia.org/wiki/Picture_Transfer_Protocolする そして http://en.wikipedia.org/wiki/Media_Transfer_Protocolする
の編集の
私は WIA のことを言及するのを忘れてしまいましたお使いのカメラのドライバは、WIAインタフェースを提供仮定して、あなたに面白いかもしれません。
TallGanglyGuy からのコメントは間違っています。ptp を使用すると、新しい画像をトリガーしたり、露出を変更したりできます。一部のカメラには、一部の ptp コマンドのみを公開するファームウェアが搭載されています。
PTPは、写真を撮るなどの一般的なデバイスコントロールをサポートしているため、ユーザーは追加のソフトウェアを必要とせずに、PC/カメラの組み合わせを新しい方法で再び利用できるようにします。
私のEOSフレームワークを試してみてください
の私見それはSDKに付属している、その後は.csファイルより良い代替手段です。
これは本当に一般的なものであり、それが役立つことがあります。
私は別のSDKの持つ2つの異なるベンダーの二つの異なるバーコードスキャナを使用するアプリケーションを書かなければなりませんでした。私は私がコーディングしたかった、そして私のインターフェイスを実装し、アダプタクラスを書いたメソッド、およびイベントを定義したインターフェースを作成しました。
これは、私の場合にはうまく機能し、一方から他方への切り替えはかなりシームレスました。あなたは同じアプローチを取った場合、あなたは1つのSDKの際に完全に依存しないだろう。