2015年11月7日土曜日

完成:とりあえず、カメラのシャッターをパソコンで押してみよう。

◆前回までのブログで、パソコンからカメラを制御して、画像を取り込むまでのプログラムの説明は一通り済みましたので、メインとなるコード(Form1.cs)全体を貼り付けておきます。
using System;
using System.Windows.Forms;
using System.IO;

using Nikon;

namespace WindowsFormsApplication1 {

      public  partial  class  Form1  :  Form  {
            private  NikonManager  nknManager;
            private  NikonDevice  nknDevice;
           
                  public  Form1()  {
                        InitializeComponent();

                        //  ニコンマネージャーの初設定("Type00**.md3"は、機種によって異なる。)
                        nknManager  =  new  NikonManager("Type0011.md3");
                        nknManager.DeviceAdded  +=  new  DeviceAddedDelegate(manager_DeviceAdded);
                        nknManager.DeviceRemoved  +=  new  DeviceRemovedDelegate(manager_DeviceRemoved);
                  }

                  private  void  button1_Click(object  sender,  EventArgs  e)  {
                        if  (nknDevice  ==  null)  {
                              return;
                        }

                        try  {
                              nknDevice.Capture();
                        }  catch  (NikonException  ex)  {
                              MessageBox.Show(ex.Message);
                  }
            }

              //デバイス接続時のイベントで呼び出されるメソッドです。
            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)  {
                  //ここで、ファイルに保存しています。
                  using  (FileStream  stream  =  new  FileStream("Image1.jpg",  FileMode.Create,  FileAccess.Write))  {
                        stream.Write(image.Buffer,  0,  image.Buffer.Length);
                  }
            }
      }
}

0 件のコメント:

コメントを投稿