2015年11月7日土曜日

その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.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 件のコメント:

コメントを投稿