その2:とりあえず、カメラのシャッターをパソコンで押してみよう。
◆前回の追加
5. "ソリューションプラットホーム"を"x86"にする。
前回の設定の追加です。手順「3.」で、プラットホームターゲットを"Any CPU"から、"x86"に変更しましたが、ソリューションプラットホームも同様に変更しておきます。
6. フォームに、ボタンとラベルコントロールを配置します。
・それぞれのコントロールの名称は、デフォルトのまま、「button1」「label1」です。
7. ボタンをダブルクリックして、ボタンクリックイベントを作成し、Form1.CSを編集しましょう。
・namespace参照用のusingに、「System.IO」と、「Nikon」を追加します。
"using System.IO"は、撮影画像をファイルに保存するためメソッド呼び出し用に、
"using Nikon"は、ニコンSDK(NkdPTP.dll)API呼び出し用です。
・Form1クラスで使用するプロパティとして、「NikonManager型のnknManager」と、「NikonDevice nknDevice」を定義しておきます。
※変数の名称は、私独自のルールで行っています。悪しからずご了承ください。
・Fom1クラスのコンストラクタで、nknManagerのインスタンスを
new NikonManager("Type00**.md3");として作成します。
※私の機種は、D5300なので、Type0011.md3でした。ここは、機種によって定義ファイルは異なります。
・さらに、このnknManagerのカメラデバイス接続/切断時に発生するイベントに、デリゲートメソッドを登録しておきます。
※NikonManagerについての、トーマスさんのWiki(英語)の説明をの貼り付けておきます。以下グーグル翻訳
【NikonManagerは、システム上のカメラの到着と除去を追跡します。アプリケーションがNikonManager上のイベントをフックすることで、この情報を得ることができます。】
nknManager.DeviceRemoved += new DeviceRemovedDelegate(manager_DeviceRemoved);
ということで、
nknManager.DeviceAdded += new DeviceAddedDelegate(manager_DeviceAdded);nknManager.DeviceRemoved += new DeviceRemovedDelegate(manager_DeviceRemoved);
と、定義しました。
・デバイスの接続/切断時のイベントで実際に呼び出されるメソッドは次の通りです。
※以下、サンプルコードからのコピペです。
//デバイス接続時のイベントで呼び出されるメソッドです。
void manager_DeviceAdded(NikonManager sender, NikonDevice device) {
this.nknDevice = device;
//ラベルにデバイスネーム(カメラの種類:ここでは、”D5300”と表示される。)
label1.Text = device.Name;
// シャッターが押されて、撮影画像が準備出来たら呼び出されるメソッドを登録
device.ImageReady += new ImageReadyDelegate(device_ImageReady);
}
//デバイス切断時のイベントで呼び出されるメソッドです。
void manager_DeviceRemoved(NikonManager sender, NikonDevice device) {
this.nknDevice = null;//カメラデバイスを切断
}
//撮影画像がイメージバッファに準備出来た時に発火する(呼び出される)メソッドです。
void device_ImageReady(NikonDevice sender, NikonImage image) {
//ファイルは、実行ファイルと同じ場所に”Image1.jpg”として保存される。
using (FileStream stream = new FileStream("Image1.jpg", FileMode.Create, FileAccess.Write)) {
stream.Write(image.Buffer, 0, image.Buffer.Length);
}
}
シャッターを押して、写真を撮り、ファイルに保存するだけならこれだけでOKです。
当たり前のことですが、カメラの設定を"オート"にしておくと、露出、フォーカス、シャッタースピードすべて"自動"になります。
※ライブ画像表示時は、オートファーカスは効かないので要注意です。


0 件のコメント:
コメントを投稿