今更ですが基本に戻ってみよう、ということで、JAISDKの使い方を見てみます、
最新バージョンは3.01ですね、下記に情報載せてます
mengineer.hatenablog.com
インストールすると、sampleフォルダ内にJAISDKのサンプルが有ります、
CPPがVisualC++、NETがVisualC#、いずれもVisualStudio2005形式です。
今回はNETの方を見てみます、フォルダ内には24種類のサンプルが有ります、
ちなみにCPPでは35種類、サンプルが豊富なのもJAISDKの特徴です。
基本中の基本(ということで、はじめの一歩)SimpleImageDisplaySampleで
JAISDKの使い方を見てみましょう。
基本的な流れ
NETフォルダ内のサンプルはJAISDK.NETというWrapperを使っています、
docフォルダ内にJAI SDK .NETのマニュアルも有りますので、参照して下さい。
以下、SimpleImageDisplaySampleのソースを元に流れを追っていきます。
1. Jai_FactoryDotNET.dllへの参照追加
binフォルダ内に有ります、VisualStudioの参照設定→参照の追加、で選択、
SimpleImageDisplaySampleでは、当然追加済みになっています。
もちろんusingにも追加します。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Jai_FactoryDotNET;
2. CFactory、CCamera、CNodeの定義
CFactoryはSDK全体のエントリーポイントです、CCameraは接続されたカメラ。
CNodeはGenICamのNode名で、このサンプルではWidth、Height、Gainの3つを
定義していますが、他にも必要なものが有れば定義しておきます。
namespace SimpleImageDisplaySample { public partial class Form1 : Form { // Main factory object CFactory myFactory = new CFactory(); // Opened camera object CCamera myCamera; // GenICam nodes CNode myWidthNode; CNode myHeightNode; CNode myGainNode;
3. CFactoyオープンとカメラ検索
myFactory.OpenでFactoryをOpenします、その後で接続されたカメラを検索します、
このサンプルでは、SerchButtonクリック時に検索するようになっています。
public Form1() { InitializeComponent(); Jai_FactoryWrapper.EFactoryError error = Jai_FactoryWrapper.EFactoryError.Success; // Open the factory with the default Registry database error = myFactory.Open(""); // Search for cameras and update all controls SearchButton_Click(null, null); }
4. カメラリスト更新 → カメラオープン
以下はSearchButton_Click以降、カメラ検索の実際の処理を追っていきます、
最初の部分は、既にOpen済みのカメラが有れば一旦閉じているだけです。
myFactory.UpdateCameraListで、接続されたカメラを検出してくれます、
見つかったカメラの台数がmyFactory.CameraList.Countに戻ってきます。
リストの順番にOpenしていきますが、もしカメラが複数台有る場合は
先頭のカメラがOpen出来た時点でbreakします。
private void SearchButton_Click(object sender, EventArgs e) { if (null != myCamera) { if (myCamera.IsOpen) { myCamera.Close(); } myCamera = null; } // Discover GigE and/or generic GenTL devices using myFactory.UpdateCameraList(in this case specifying Filter Driver for GigE cameras). myFactory.UpdateCameraList(Jai_FactoryDotNET.CFactory.EDriverType.FilterDriver); // Open the camera - first check for GigE devices for (int i = 0; i < myFactory.CameraList.Count; i++) { myCamera = myFactory.CameraList[i]; if (Jai_FactoryWrapper.EFactoryError.Success == myCamera.Open()) { break; } }
5. 所望の処理を実施
無事にカメラがOpen出来れば、それに対して所望の処理を実施します。
このサンプルでは各Node値を取得、startボタンを押すと別ウィンドウに画像表示
stopボタンで表示終了という処理が入っています、以下がサンプル画面です。
右上の…と書かれた小さいボタンがSearchButtonです、Width,Height,Gainは
カメラのNode値です、Nodeの読み書きについては別記事で分けて見てみます。
6. カメラクローズ
サンプル終了時、myCamera.Close()でカメラをクローズしています。
(Factoryは閉じなくても大丈夫なのかな?、ちょっと謎)
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (myCamera != null) { StopButton_Click(null, null); myCamera.Close(); } }
ということで、FactoryOpen → CameraOpen → 所望の処理 → CameraClose
というのが、おおまかな処理の流れになります、今回はここまで!