＊目次＊

1.概要 .................................................................................................................... 1

2.リファレンス ...................................................................................................... 2

2-1.プログラムへの組込み手順 ............................................................................. 2
2-1-1.ライブラリの準備 .................................................................................... 2
2-1-2.画像の撮影手順 ....................................................................................... 2
ステップ 0－ プロジェクトの作成................................................................... 3

ステップ 1－ デバイスオープン ...................................................................... 5

ステップ 2－ ステージ・カメラ設定の確認 ...................................................... 6

ステップ 3－

画像の撮影 ............................................................................... 8

ステップ 4－

画像の表示・ファイル保存 ....................................................... 10

ステップ 5－ デバイスクローズ .................................................................... 10

2-1-3.画像の表示 ............................................................................................ 11

2-1-4.撮影した画像のファイル保存 ................................................................. 13
2-1-5.カメラの設定 ......................................................................................... 15

2-1-6.撮影した画像の加工 .............................................................................. 18

2-1-7.撮影タイミングをソフトで制御する場合 ............................................... 19
2-1-8.各設定項目の範囲 .................................................................................. 21
2-2.関数一覧 ....................................................................................................... 22
2-3.関数詳細 ....................................................................................................... 23

2-3-1.デバイスオープン（igOpenDevice） .................................................... 23
2-3-2.デバイスクローズ（igCloseDevice） .................................................... 24

2-3-3.撮影画素数の取得（igGetPixcelLine）.................................................. 25
2-3-4.撮影画素数の変更（igSetPixcelLine） .................................................. 26
2-3-5.ステージ駆動パラメタの取得（igGetStageParam） ............................. 27
2-3-6.ステージ駆動パラメタの変更（igSetStageParam） .............................. 28

2-3-7.カメラ設定パラメタの取得（igGetCameraParam） ............................. 29
2-3-8.カメラ設定パラメタの変更（igSetCameraParam） .............................. 30
2-3-9.画像サイズを縦横 1：1 比率に設定（igSetEquallyImageRate） ........... 31
2-3-10. ステージの原点復帰（igResetStagePos） ......................................... 32

2-3-11. ステージの現ポジション取得（igGetCurrentPos） ........................... 33

2-3-12. ステージの現ポジションリセット（igResetCurrentPos） ................. 34
2-3-13. ステージの移動（igMoveStagePos） ................................................ 35
2-3-14. 画像の撮影（igShotImage） ............................................................. 36

2-3-15. ラインセンサ画像撮影（igCaptureImage） ...................................... 37

2-3-16. 画像データポインタ取得（igGetImageAddress） ............................. 38
2-3-17. 画像データの描画（igDrawImage） .................................................. 40
2-3-18. 画像のファイル保存（igSaveImageFile） .......................................... 41
2-3-19. 画像ファイルの読み込み（igLoadImageFile） .................................. 42

2-4.戻り値一覧 ................................................................................................... 43

1.概要
本ライブラリは、X ステージ（中央精機製 ALS-220-C2P）の制御を行うと同時に、ラインセンサ（竹中システム機器製 TL-7450UFD）の制御も行い、ラインセンサでの撮影が容易に行えるライブラリです。
開発環境は、Microsoft Visual C++6.0、対応 OS は Windows2000 Professional、およびWindowsXP HomeEdition／Professional です。
本ライブラリには、以下の特徴があります。
・デバイスをオープンすると、デフォルト設定で即撮影が可能です。
・撮影した画像は、画面への表示やファイルへの保存が簡単に実行できます。
・メモリ内の画像アドレス（DIB 形式）を取得することで、画像処理が自由に行えます。

X ステージ

制御信号

ラインセンサ

トリガ信号

撮影指示

専用コントロールボックス

制御コマンド
撮影画像

PC（キャプチャーボード）

1

2.リファレンス
2-1.プログラムへの組込み手順
ここでは、本ライブラリを呼び出して画像を撮影するサンプルプログラム（IPVSample）の作
成手順を説明します。サンプルプログラムでは、画像の撮影だけでなく、ステージのスピードやカメラの設定処理等も行いますので、プログラミングの参考にしてください。
また、サンプルプログラムは初期状態で PC にインストールされていますので、プログラムメニ
ューから起動して、ステージやラインセンサの動作の確認にもご利用いただけます。

2-1-1.ライブラリの準備
本ライブラリのインストール先（c:￥Program Files￥igunoss￥IP-View）フォルダ内に、LIB
ファイル・ヘッダファイル・サンプルプログラム等が入っています。また、DLL ファイルはWindows の System32 フォルダに入っています。
LIB ファイルおよびヘッダファイルは、プロジェクトのビルド時に必要になりますので、プロジェクト作成後にプロジェクトのフォルダにコピーするか、VisualC++6.0 のオプションでパスを設定する等の操作が必要です。

2-1-2.画像の撮影手順
本ライブラリを呼び出して、ラインセンサで画像撮影を行うには、基本的には以下のステップ
を実行します。
●最初にデバイスをオープンします。

ステップ 1

デバイスオープンステップ 2

ステージ・カメラ設定の確認

ステップ 3

画像の撮影●必要に応じて、ステッ
プ 3 からステップ 4 を繰り返します。

ステップ 4

画像の表示・ファイル保存ステップ 5

デバイスクローズ

●プログラム終了までに、必ずデバイスをクローズします。

2

ここからは、VisualC++6.0 のダイアログベースで作成したプロジェクトでの手順を説明しま
す。VisualC++6.0 の操作方法等の詳細については、VisualC++6.0 のヘルプやマニュアルを参照してください。
ステップ 0－ プロジェクトの作成

VisualC++6.0 の「ファイル」メニューから「新規作成」を選択し、新規プロジェクト（MFC
APP Wizard／ダイアログベース）を作成します。
プロジェクト名：IPVSample

本ライブラリを呼び出すために、LIB ファイル「IPVDevice.lib」およびヘッダファイル「IPVDevice.h」を、作成したプロジェクトのフォルダにコピーしておきます。
メインのダイアログボックス（IDD_IPVSAMPLE_DIALOG）には、以下のコントロールを作成し、必要なメンバ変数を登録します。
コントロールの ID

コントロールの種類

キャプション

説明

IDC_BTN_RESET

ボタン

原点復帰

IDC_BTN_MOVE

ボタン

ステージ移動

IDC_BTN_CAPTURE

ボタン

画像撮影

IDC_BTN_RESET_STEP

ボタン

リセット

IDC_SEL_SPEED

コンボボックスステージのスピード

IDC_STEP_CNT

エディットボックス

駆動ステップ数

IDC_MoveMM

スタティックテキスト

移動距離

IDC_CURRENT_STEP

スタティックテキスト

現在のステップ位置

IDC_STAGE_PLUS

ラジオボタン

プラス方向

プラスにステージ移動

IDC_STAGE_MINUS

ラジオボタン

マイナス方向マイナスにステージ移動

IDC_STATIC

グループボックス

ステージ方向

ラジオボタングループ

IDC_GET_POS

エディットボックス

ステップ数リセット

画像取得ポイント3

移動距離（スタティックテキスト）

ラジオボタングループ

スタティックテキスト

スピードを選択するコンボボックスは、プロパティの「データ」タブで、500～5000 の値を入力し、「スタイル」タブで「ソート」のチェックをはずします。

ここではわかりやすいように、現ステップ位置のスタティックテキストに境界線を表示し、それぞれの項目に単位を表示しています。また、ステージ方向のラジオボタンは、タブオーダーとグループを設定して、メンバ変数を登録します。他にも以下のメンバ変数を登録します。

4

ステップ 1

－ デバイスオープン

画像を撮影する前に、まずはデバイスをオープンします。
private:HANDLE DevHandle;//デバイスハンドル

上記の変数を、クラスの private 変数として定義します。
#include ”IPVDevice.h”
//

省略

//

BOOL CIPVSampleDlg::OnInitDialog(){// 省略 //// TODO: 特別な初期化を行う時はこの場所に追加してください。
ULONG Ret = igOpenDevice(&DevHandle, NULL, NULL, true);
if(Ret != IG_NO_ERROR){
AfxMessageBox("デバイスオープンエラー");}
IPVSampleDlg.cpp を開き、IPVDevice.h をインクルードします。ここでは、CIPVSampleDlg
クラスの WM_INITDIALOG メッセージの処理（OnInitDialog）でデバイスオープンします。
デバイスをオープンするには、igOpenDevice 関数を呼び出します。igOpenDevice 関数の定義は以下のとおりです。
ULONG

igOpenDevice(
HANDLE* pigHandle,//デバイスハンドル格納域アドレス

LPTSTR igConfigName, //カメラの設定ファイルパス名
LPTSTR igPortName,
BOOL igTrigerSignal)//COM ポート名//トリガ信号の使用有無

pigHandle には、クラスの private 変数として定義したデバイスハンドルの格納域アドレスを指定します。igConfigName には、カメラ設定ファイルのフルパス名を指定しますが、通常はNULL を指定してください（システム初期設定時のカメラ設定ファイルを参照します）。
igPortName にはステージを接続した COM ポート名を指定します。igPortName に NULL を指定
すると、「COM1」を使用します。igTrigerSignal には、コントロールボックスからのトリガ信号を使用するなら TRUE を、使用せずにプログラムから撮影タイミングを指示する場合は FALSEを指定してください。ここではトリガ信号を使用するので、TRUE を指定します。
igOpenDevice 関数の戻り値が IG_NO_ERROR 以外はエラーのため、メッセージを表示しています。本ライブラリの関数の戻り値は、基本的に IG_NO_ERROR は正常終了、それ以外はエラー
コードとなっています。また、サンプルプログラムでは詳しいエラー処理は省略していますが、必要に応じてエラー処理を行ってください。各関数でのエラーコードは「2-3.関数詳細」を、エ
ラーコードの一覧は、「2-4.戻り値一覧」を参照してください。
5

ステップ 2－ ステージ・カメラ設定の確認

デバイスオープンができたら、次にステージとカメラのデフォルト設定値を取り出します。デ
フォルト値を取得しなくてもそのまま撮影は可能ですが、ここでは確認（表示）のために取得します。
UINT ScanPixel;
UINT ScanLines;
UINT STDIS;UINT STENB;//画像のピクセル数//画像のライン数//カメラの STDIS//カメラの STENB

上記の変数を、クラスの private 変数として追加します。これらは、カメラの設定ファイルに登録されている値で、メインダイアログボックスには表示せず、変数に格納しておきます。
OnInitDialog で、デバイスオープンに続けて初期設定値を取得します。
WORD SelSpeed;//スピード//デバイスオープン
ULONG Ret = igOpenDevice(&DevHandle, NULL, NULL, true);
if(Ret != IG_NO_ERROR){
AfxMessageBox("デバイスオープンエラー");}else{
igGetPixcelLine(DevHandle, &ScanPixel, &ScanLines);
igGetCameraParam(DevHandle, &STDIS, &STENB);
igGetStageParam(DevHandle, &SelSpeed, &m_StepCnt, &m_GetPos);}//設定値を表示
m_SelSpeed.SetCurSel(SelSpeed);
m_MoveMM.Format("［ %.3fmm ］", m_StepCnt * IG_MM_PER_STEP);//移動距離DispCurrentPos();//現ポジションの表示
m_StageDirect = 0;//ステージ方向プラス
UpdateData(false);
各設定値は、3 つの関数で取り出します。
撮影する画像のピクセル数およびライン数は、igGetPixcelLine 関数で取り出します。カメラのパラメタ（STDIS および STENB）は、igGetCameraParam 関数で取り出します。そして、ステー
ジのスピード、駆動ステップ数および画像取得ポイントは、igGetStageParam 関数で取り出します。
各関数の定義は以下のとおりです。
ULONG

ULONG

igGetPixcelLine (HANDLE igHandle,//デバイスハンドル

UINT* pigPixel,
UINT* pigLine)//主走査（ピクセル数）格納域アドレス//副走査（ライン数）格納域アドレス

igGetCameraParam (HANDLE igHandle,//デバイスハンドル
UINT* pigSTDIS,UINT* pigSTENB)//STDIS 格納域アドレス//STENB 格納域アドレス
6

ULONG

igGetStageParam (HANDLE igHandle,//デバイスハンドル

WORD* pigStageSpeed,//ステージのスピード格納域アドレス

UINT * pigMoveStep,UINT* pigStartCameraPos)//駆動ステップ数格納域アドレス//画像取得ポイント格納域アドレス

各関数の igHandle には、igOpenDevice で取得したハンドルを指定します。続けて、それぞれの設定値を格納する変数のアドレスを指定します。
これ以降はメンバ変数で処理することにし、駆動ステップ数と画像取得ポイントは直接メンバ変数に格納しています。スピードの値のみ一度ローカル変数に格納して、コンボボックスに値をセットしています。
ステージの移動距離は、「移動したステップ数×1 ステップあたりの距離」で計算でき、1 ステ
ップあたりの距離は、「IG_MM_PER_STEP」として IPVDevice.h に定義されています。
現ポジションの位置はステージを移動するたびに再表示するので、以下の private 関数を作成
して呼び出します。
void CIPVSampleDlg::DispCurrentPos(){
UINT CPos;
igGetCurrentPos(DevHandle, &CPos);
m_CurrentStep.Format(" %d", CPos);
UpdateData(false);}//現ポジション取り出し

現ポジションは、igGetCurrentPos 関数で取り出します。igGetCurrentPos 関数の定義は以下のとおりです。
ULONG

igGetCurrentPos (HANDLE igHandle,
UINT* pigCurPos)//デバイスハンドル//現ポジション格納域アドレス

igHandle には、igOpenDevice で取得したハンドルを指定します。pigCurPos には、現ポジシ
ョンを格納する変数のアドレスを指定します。
この他、「リセット」ボタンのクリックイベントで、現ポジションを 0 にリセットする処理を行います。ステージのポジションは起動時の位置が 0 になるため、ステージを移動後に 0 にリセ
ットできるようにこのボタンを作成してあります。
void CIPVSampleDlg::OnBtnResetStep(){
UpdateData(true);
igResetCurrentPos(DevHandle);
DispCurrentPos();}//現ポジションリセット//現ポジションの表示

現ポジションのリセットは、igResetCurrentPos 関数で設定します。igResetCurrentPos 関数の定義は以下のとおりです。igHandle には、igOpenDevice で取得したハンドルを指定します。
ULONG

igResetCurrentPos (HANDLE igHandle)//デバイスハンドル
7

ステップ 3

－ 画像の撮影「画像撮影」ボタンのクリックイベントで撮影の処理を行います。
void CIPVSampleDlg::OnBtnCapture(){
UpdateData(true);if(igSetStageParam(DevHandle, m_SelSpeed.GetCurSel(), m_StepCnt, m_GetPos)!= IG_NO_ERROR)
AfxMessageBox("ステージ移動パラメタ設定エラー");
else if(igCaptureImage(DevHandle, NULL) != IG_NO_ERROR)
AfxMessageBox("画像取得エラー発生");}
DispCurrentPos();}
ステージの設定値を、igSetStageParam 関数で設定します。igSetStageParam 関数の定義は以下のとおりです。
ULONG

igSetStageParam (HANDLE igHandle,//デバイスハンドル

WORD igStageSpeed,//ステージのスピード

UINT igMoveStep,UINT igStartCameraPos)//駆動ステップ数//画像取得ポイント

igHandle には、igOpenDevice で取得したハンドルを指定します。その後に、ステージのスピ
ード、駆動ステップ数、画像取得ポイントを指定します。ステージのスピードには、以下の値（0～5）を指定してください。ここでは、コンボボックスの選択インデックス値が 0～5 になるため、そのまま使用しています。以下の値が IPVDevice.h で定義されています。
定 義

値

IG_SPEED_500

0

IG_SPEED_1000

1

IG_SPEED_2000

2

IG_SPEED_3000

3

IG_SPEED_4000

4

IG_SPEED_5000

5

ステージの設定ができたら、いよいよ画像の撮影です。画像の撮影は igCaptureImage 関数で行います。igCaptureImage 関数の定義は以下のとおりです。
ULONG

igCaptureImage (HANDLE igHandle,
BOOL* pigCancel)//デバイスハンドル//キャンセルフラグのアドレス

igCaptureImage 関数では、ステージの移動、ラインセンサでの撮影から BMP 形式データ作成までを行います。
8

igHandle には、igOpenDevice 関数で取得したハンドルを指定します。pigCancel には、キャンセルフラグのアドレスを指定します。撮影の途中でこの変数の値が true になると、撮影が中止されます。必要な場合のみ指定してください。NULL を指定するとキャンセルはできません。
画像の撮影に伴って、ステージの移動と原点復帰の処理が必要になるため、それらの処理を記述します。
「ステージ移動」ボタンのクリックイベントに以下の処理を追加します。
void CIPVSampleDlg::OnBtnMove(){
UpdateData(true);
int StepCnt = (m_StageDirect == 0 ? (int)m_StepCnt : -1 * (int)m_StepCnt);
if(igSetStageParam(DevHandle, m_SelSpeed.GetCurSel(), m_StepCnt, m_GetPos) !=IG_NO_ERROR)
AfxMessageBox("ステージ移動パラメタ設定エラー");
else if(igMoveStagePos(DevHandle, StepCnt) != IG_NO_ERROR)
AfxMessageBox("ステージ移動エラー発生");
DispCurrentPos();}
ステージの移動は igMoveStagePos 関数で行います。igMoveStagePos 関数の定義は以下のと
おりです。
ULONG

igMoveStagePos (HANDLE igHandle,
long igStepCount)//デバイスハンドル//移動ステップ数

igHandle には、igOpenDevice 関数で取得したハンドルを指定します。igStepCount には、移動するステップ数を指定します。マイナス方向に移動する場合は、マイナス値を指定してください。ここでは、ラジオボタンの値が 0 の場合はプラス方向、1 の場合はマイナス方向に移動するので、マイナス方向を指定された場合は、ステップ数をマイナス値に変更しています。
「原点復帰」ボタンのクリックイベントに以下の処理を追加します。
void CIPVSampleDlg::OnBtnReset(){if(igResetStagePos(DevHandle) != IG_NO_ERROR)
AfxMessageBox("原点復帰エラー発生");
DispCurrentPos();}
ステージの原点復帰は igResetStagePos 関数で行います。関数の定義は以下のとおりです。
ULONG igResetStagePos (HANDLE igHandle) //デバイスハンドル
igHandle には、igOpenDevice で取得したハンドルを指定します。

9

ステップ 4

－ 画像の表示・ファイル保存

撮影した画像の表示とファイル保存については、次項以降で説明します。
ステップ 5－ デバイスクローズ

デバイスの使用が終了したら、必ずデバイスのクローズを行ってください。本ライブラリでは、
デバイスクローズするまでは、他のプロセスでのデバイスの使用ができません。デバイスクロー
ズせずにアプリケーションを終了した場合、それ以降のデバイス動作は保証しません。
ここでは、CIPVSampleDlg クラスの WM_DESTROY メッセージの処理（OnDestroy）でデバ
イスのクローズを行います。
void CIPVSampleDlg::OnDestroy(){
CDialog::OnDestroy();
igCloseDevice(DevHandle);//デバイスクローズ}
画像の撮影は igCloseDevice 関数で行います。igCloseDevice 関数の定義は以下のとおりです。
ULONG

igCloseDevice(
HANDLE igHandle)//デバイスハンドル

igHandle には、igOpenDevice で取得したハンドルを指定します。

10

2-1-3.画像の表示
次に、撮影した画像をピクチャボックスに表示してみましょう。
メインのダイアログ（IDD_IPVSAMPLE_DIALOG）に以下のコントロールを追加します。
コントロールの ID

コントロールの種類

キャプション

IDC_CAP_IMAGE

ピクチャボックス

IDC_DRAW_MODE1

ラジオボタン

元画像と同比率

IDC_DRAW_MODE2

ラジオボタン

ストレッチ

IDC_STATIC

グループボックス

画像表示

説明
撮影画像の描画エリア

ラジオボタングループ

ラジオボタングループ

ピクチャボックス

ここでは、CIPVSampleDlg クラスの WM_PAINT メッセージの処理（OnPaint）で画像を描画します。
BOOL CaptureFlag;
上記の変数を、クラスの private 変数として追加します。これは、描画するときに、撮影画像があるかどうかをチェックするフラグです。画像の撮影前に false をセットして、撮影後に trueをセットします。また、OnInitDialog 内で、false をセットしておきます。
OnPaint で、CaptureFlag 変数が true の場合に描画処理を行います。ここでは DrawPictureという private 関数を作成して、それを呼び出すことにします。
void CIPVSampleDlg::OnPaint(){
if (IsIconic())
//

省略

//

else
{
CDialog::OnPaint();
DrawPicture();//ピクチャボックスに描画}}

11

//ピクチャボックスに描画
void CIPVSampleDlg::DrawPicture(){if(!CaptureFlag)//撮影画像なし
return;UpdateData(true);
BeginWaitCursor();//マウスポインタを砂時計に
igDrawImage(DevHandle, GetDlgItem(IDC_CAP_IMAGE), m_DrawMode);
EndWaitCursor();//マウスポインタを元に戻す}//描画

ピクチャボックスへの描画は igDrawImage 関数で行います。igDrawImage 関数の定義は以下のとおりです。
ULONG

igDrawImage (HANDLE igHandle,//デバイスハンドル

CWnd* pWnd,
int igDrawMode)//ピクチャボックスコントロールのハンドル//描画モード

igHandle には、igOpenDevice で取得したハンドルを指定します。pWnd には、ピクチャーボ
ックスのウィンドウハンドルを指定します。igDrawMode には、描画モードを指定します。以下の値が IPVDevice.h で定義されていますので、ビットごとの OR（|）演算子で組み合わせて指定
します。
定義

値

IG_DRAW_SAMERATE0

IG_DRAW_STRETCH

1

IG_DRAW_REFRESH0

IG_DRAW_NOREFRESH 2

説明
元画像と同比率で表示する
ピクチャボックスのサイズに合わせてストレッチ表示する
描画前に背景をクリアする
描画前に背景をクリアしない

さらに、他の描画が必要な個所で、同様に DrawPicture 関数を呼び出します。ここでは、画像
撮影後や、描画モードのラジオボタンのクリックイベントに処理を追加します。
void CIPVSampleDlg::OnBtnCapture(){// 省略 //
else if(igCaptureImage(DevHandle, NULL) != IG_NO_ERROR)
AfxMessageBox("画像取得エラー発生");
else{
CaptureFlag = true;
DrawPicture();//ピクチャボックスに描画}// 省略 //}

12

2-1-4.撮影した画像のファイル保存
ここまでで、画像を撮影して表示するまでの部分を作成しました。次に、撮影した画像をファイルに保存します。保存できるのは、BMP 形式のみです。
メインのダイアログ（IDD_IPVSAMPLE_DIALOG）に以下のコントロールを追加します。
コントロールの ID
IDC_BTN_SAVE

コントロールの種類
ボタン

キャプション説明

画像保存「画像保存」ボタンのクリックイベントに、以下の処理を追加します。
void CIPVSampleDlg::OnBtnSave(){
CFileDialog sfdlg(false, "bmp", "*.bmp",
OFN_FILEMUSTEXIST | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR,"画像データ(*.bmp)\0*.bmp\0\0");if(sfdlg.DoModal() != IDOK)
return;if(igSaveImageFile(DevHandle, sfdlg.GetPathName()) != IG_NO_ERROR)
AfxMessageBox("画像ファイル（BMP）保存エラー発生");}
保存ファイル名を決定する方法として、ここではファイル保存ダイアログボックスを表示していますが、もちろんこの方法でなくてもかまいません。
撮影した画像のファイル保存は、igSaveImageFile 関数で行います。igSaveImageFile 関数の定義は以下のとおりです。
ULONG

igSaveImageFile (HANDLE igHandle,
CString FileName)//デバイスハンドル//保存する BMP ファイル名

igHandle には、igOpenDevice で取得したハンドルを指定します。FileName には、保存する
BMP 形式のファイルパス名を指定します。拡張子は「.bmp」でなければなりません。
ピクチャボックスへ表示する画像も、ファイルに保存する画像も、同じ内部メモリで管理しています。一度保存したファイルを読み込むと、同様に内部のメモリに読み込むため、そのままピクチャボックスへの描画も可能です。
ファイルの保存の確認の意味も含めて、画像データを読み込んでみましょう。メインのダイアログ（IDD_IPVSAMPLE_DIALOG）に以下のコントロールを追加します。
コントロールの ID
IDC_BTN_LOAD

コントロールの種類
ボタン

キャプション
画像読込み

13

説明

BOOL ReadFlag;
上記の変数を、クラスの private 変数として追加します。これは、画像を読み込んだかどうかをチェックするフラグです。画像の撮影前と OnInitDialog 内で false をセットして、画像の読込
み後に true をセットします。
「画像読込み」ボタンのクリックイベントに、以下の処理を追加します。
void CIPVSampleDlg::OnBtnLoad(){
CFileDialog rfdlg(true, "bmp", "*.bmp", OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR,"画像データ(*.bmp)\0*.bmp\0\0");if(rfdlg.DoModal() != IDOK)
return;if(igLoadImageFile(DevHandle, rfdlg.GetPathName()) != IG_NO_ERROR)
AfxMessageBox("画像ファイル（BMP）読込みエラー発生");
else{
ReadFlag = true;
DrawPicture();//ピクチャボックスに描画}}
画像の読込みは、igLoadImageFile 関数で行います。igLoadImageFile 関数の定義は以下のと
おりです。
ULONG

igLoadImageFile (HANDLE igHandle,
CString FileName)//デバイスハンドル//読み込む BMP ファイル名

igHandle には、igOpenDevice で取得したハンドルを指定します。FileName には、保存する
BMP 形式のファイルパス名を指定します。拡張子は「.bmp」でなければなりません。
フラグを追加したので、DrawPicture 関数内で、ReadFlag が true の場合にも描画するように変更しておきます。
これで、一度保存したデータをファイルから読み込んだ後にも、ピクチャボックスに表示されます。

14

2-1-5.カメラの設定
カメラの初期設定値での撮影・描画・保存まではできましたが、画像サイズ等の設定を変更したい場合もあるでしょう。ここでは、設定値を変更するダイアログボックスを作成してカメラの設定値を変更する方法を説明します。
メインのダイアログ（IDD_IPVSAMPLE_DIALOG）に以下のコントロールを追加します。
コントロールの ID
IDC_BTN_SETCONFIG

コントロールの種類
ボタン

キャプション

説明

カメラ設定

新規にダイアログ（IDD_SET_CAMERA）を作成し、以下のコントロールを作成します。
コントロールの ID

コントロールの種類

キャプション

説明

IDC_PIXCEL

エディットボックス

ピクセル数

X 方向のサイズ

IDC_LINES

エディットボックス

ライン数

Y 方向のサイズ

IDC_STDIS

エディットボックス

STDIS

IDC_STENB

エディットボックス

STENB

クラス（CCameraConfig）を作成して、それぞれのエディットボックスにメンバ変数を割り当
てます。

15

次に、IPVSampleDlg.cpp で CcameraConfig クラスのヘッダファイル（CameraConfig.h）を
インクルードして、「カメラ設定」ボタンのクリックイベントに、以下の処理を追加します。
void CIPVSampleDlg::OnBtnSetconfig(){
CCameraConfig Dlg;//カメラ設定ダイアログボックス
Dlg.m_Pixcel = ScanPixel;
Dlg.m_Lines = ScanLines;
Dlg.m_STDIS = STDIS;
Dlg.m_STENB = STENB;
if(Dlg.DoModal() == IDOK){
ScanPixel = Dlg.m_Pixcel;
ScanLines = Dlg.m_Lines;
STDIS = Dlg.m_STDIS;STENB = Dlg.m_STENB;
if(igSetPixcelLine(DevHandle, ScanPixel, ScanLines) != IG_NO_ERROR)
AfxMessageBox("画像サイズの変更エラー");
else if(igSetCameraParam(DevHandle, STDIS, STENB) != IG_NO_ERROR)
AfxMessageBox("カメラパラメタの変更エラー");}}
private 変数として定義し、OnInitDialog 関数で初期設定値を格納しておいた 4 つの変数を、ダイアログボックスのメンバ変数にコピーします。ダイアログボックスの DoModal 関数を呼び出し、「OK」ボタンがクリックされたら、設定値をメンバ変数からコピーします。
画像サイズの設定は igSetPixcelLine 関数で行います。igSetPixcelLine 関数の定義は以下のと
おりです。
ULONG

igSetPixcelLine (HANDLE igHandle,//デバイスハンドル

UINT igPixel,
UINT igLine)//主走査（ピクセル数）//副走査（ライン数）

igHandle には、igOpenDevice で取得したハンドルを指定します。igPixel には画像のピクセ
ル数、igLine には撮影するライン数を指定します。
カメラのパラメタ（STDIS および STENB）の設定は igSetCameraParam 関数で行います。
igSetCameraParam 関数の定義は以下のとおりです。
ULONG

igSetCameraParam (HANDLE igHandle,//デバイスハンドル
UINT igSTDIS,UINT igSTENB)//STDIS//STENB

16

igHandle には、igOpenDevice 関数で取得したハンドルを指定します。igSTDIS およびigSTENB にカメラのパラメタを指定します。STDIS と STENB は走査周期を表し、一般的には同じ値を設定することで、安定した撮影条件が得られます。
ラインセンサは、ステージを移動しながら走査するため、移動と走査のタイミングがずれると撮影した画像の縦横の比率が 1 対 1 ではなくなってしまいます。本ライブラリでは、設定したス
テージのスピードに合わせて、1 対 1 の画像が撮影できるように、カメラパラメタ値を調整する
関数を用意しています。
メインのダイアログ（IDD_IPVSAMPLE_DIALOG）に以下のボタンを追加します。
IDC_BTN_SET_RATE

1 対 1 比率設定

ボタン

「1 対 1 比率設定」ボタンのクリックイベントに、以下の処理を追加します。
void CIPVSampleDlg::OnBtnSetRate(){if(igSetEquallyImageRate(DevHandle) != IG_NO_ERROR)
AfxMessageBox("カメラパラメタ設定エラー");else
igGetCameraParam(DevHandle, &STDIS, &STENB);}
カメラパラメタ値の調整は igSetEquallyImageRate 関数で行います。igSetEquallyImageRate
関数の定義は以下のとおりです。
ULONG

igSetEquallyImageRate (HANDLE igHandle)//デバイスハンドル

igHandle に、igOpenDevice 関数で取得したハンドルを指定します。
本システムでの、STDIS・STENB とスピードとの関係は、以下のようになっています。
スピード

STDIS および STENB

5000pps

9250

4000pps

11563

3000pps

15417

2000pps

23125

ただし、2000PPS 以下の値は設定不可能（STDIS および STENB の設定可能範囲外）であるた
め、1 対 1 の撮影の設定ができるのは、5000pps から 3000pps までとなります。

17

2-1-6.撮影した画像の加工
igCaptureImage 関数で撮影した画像を加工する場合は、画像データのポインタを取得します。
画像データのポインタは igGetImageAddress 関数で取得します。igGetImageAddress 関数の定義は以下のとおりです。
ULONG

igGetImageAddress (HANDLE igHandle,//デバイスハンドル
LPVOID *pigPtr,//画像データポインタ格納域アドレス

int igPtrKind,
int igLineNo)//画像データポインタの種別//画像データのライン番号

igHandle に、igOpenDevice 関数で取得したハンドルを指定します。pigPtr には、取得した画像データポインタ格納域のアドレスを指定します。igPtrKind には、取得するポインタの種別を指定します。以下の値が IPVDevice.h で定義されています。
定 義説

IG_BMPFILEHEADER_PTR

BMPFILEHEADER のポインタ

IG_BMPINFOHEADER_PTR
IG_IMAGE_PTR

明

BMPINFOHEADER のポインタ
BMP 画像データへのポインタ

igLineNo には、画像データ上側からのライン番号（0～）を指定します。メモリ内の画像デー
タは、一般的な DIB 形式であるため、画像の左下のデータから格納されています。画像データのメモリ内での先頭位置アドレスを取得する場合には、IG_BMP_START（IPVDevice.h で定義されています）を指定してください。
取得したメモリは、本ライブラリ内で管理しています。メモリサイズの変更等が必要な場合は、別に領域を用意して、画像データをコピーしてから処理するようにしてください。

18

2-1-7.撮影タイミングをソフトで制御する場合
ここまで説明した、igCaptureImage 関数を呼び出して撮影する方法は、ステージ制御も同時に行われるため、撮影が容易に実行できます。しかし、ラインセンサの特長を生かして連続撮影する場合など、撮影するタイミングをソフトから制御する必要が発生するかもしれません。その場合は、トリガ信号を発生しない設定でデバイスをオープンして（igOpenDevice 関数の第 4 引
数に false を指定する）、撮影は igShotImage 関数を呼び出します。igShotImage 関数の定義は以下のとおりです。
ULONG

igShotImage (HANDLE igHandle,//デバイスハンドル

BOOL* pigCancel,
LPVOID pigPtr)//キャンセルフラグのアドレス//撮影データ格納域アドレス

igShotImage 関数では、撮影のみ行います。ステージ制御は行いませんので、必要であれば
igMoveStagePos 関数でステージ制御をしてください。また、pigPtr には、撮影した画像データを格納する領域のアドレスを指定します。事前に撮影する画像サイズ分のメモリを確保して、そのアドレスを指定してください。
以下に、撮影タイミングをソフトで制御するサンプルプログラム（SoftTrigSample）から、連続撮影する部分について解説します。
LPVOID pImgBuf = new char[ScanPixel * ScanLines];//メモリ確保for(Cnt = 0; ; Cnt++){//メッセージチェック
while(::PeekMessage(&msg,NULL,0,0,PM_REMOVE)){::TranslateMessage(&msg);::DispatchMessage(&msg);}
if(!CaptureFlag)//終了
break;//撮影のみ実行
Ret = igShotImage(DevHandle, NULL, pImgBuf);
if(Ret != IG_NO_ERROR){
WStr.Format("撮影エラー(%d)", Cnt + 1);
AfxMessageBox(WStr);
break;}//撮影画像をメモリに格納
for(Cnt2 = 0; Cnt2 < (MAX_BUFFER_LINE - 1); Cnt2++)
memcpy(pImageMemory + (ScanPixel * (Cnt2 + 1)),
pImageMemory + (ScanPixel * Cnt2), ScanPixel);
memcpy(pImageMemory, pImgBuf, ScanPixel);//描画
DrawBMPImage();}delete[] pImgBuf; //メモリ解放

19

撮影中フラグ（CaptureFlag）が true の間撮影を繰り返します。撮影した画像の先頭 1 ライン
を、画像データ域（pImageMemory）にコピーします。画像データ域の最大ライン数は
MAX_BUFFER_LINE で定義してあり、そのライン数分を 1 ラインずつずらしてコピーし、一番古いデータを捨てています。これを撮影が停止されるまで繰り返します。
また、撮影した画像データは、そのままでは表示や保存ができません。本ライブラリでは、撮影した画像データから BMP 形式のデータを作成する関数も用意しています。ここではDrawBMPImage という private 関数を作成して、それを呼び出すことにします。
void CSoftTrigSampleDlg::DrawBMPImage(){
BeginWaitCursor();igMakeBMPData(DevHandle, pImageMemory, ScanPixel,
ScanLines * MAX_BUFFER_LINE);
igDrawImage(DevHandle, GetDlgItem(IDC_IMAGE_BOX),
IG_DRAW_SAMERATE | IG_DRAW_NOREFRESH);
EndWaitCursor();}
撮影した画像データからの BMP 形式のデータ作成は、igMakeBMPData 関数で行います。
igMakeBMPData 関数の定義は以下のとおりです。
ULONG

igMakeBMPData(
HANDLE igHandle,//デバイスハンドル

LPVOID pigImgData, //撮影した画像データ格納域アドレス
UINT igXpixel,
UINT igYLines)//画像データピクセル数（主走査）//画像データライン数（副走査）igHandle に、igOpenDevice 関数で取得したハンドルを指定します。pigImgData には撮影した画像データ格納域アドレスを指定します。ここでは（ScanPixel×MAX_BUFFER_LINE） のサイズで確保してあるデータ域アドレスを指定しますが、pigImgData に NULL を指定すると、最後に撮影した画像を参照し、画像サイズも撮影したサイズになります。pigImgData を指定する場
合は、igXpixel にピクセル数、igYLines にライン数も指定してください。
igMakeBMPData 関数で BMP 形式のデータを作成すると、その後 igDrawImage 関数を呼び出してピクチャボックスに描画できます。ピクチャボックスへの描画手順は、2-1-3 を参照してく
ださい。
また、igSaveImageFile 関数によりファイルの保存もできます。ファイル保存手順は 2-1-4 を参照してください。

●撮影タイミングをソフトで制御するサンプルプログラム（SoftTrigSample）では、ライ
ブラリの使用手順の説明に重点を置くために、それ以外の部分は極力簡単な記述にしています。そのため一般的なプログラミング方法とは異なる部分があるかもしれません。VC++での一般的なプログラミング方法については、オンラインヘルプや市販の書籍等を参照してく
ださい。

20

2-1-8.各設定項目の範囲
本ライブラリで設定する各項目の指定可能範囲は、以下のとおりです。この範囲を超えた値を指定するとエラーになります。サンプルプログラムでは、メインダイアログの処理ボタンクリッ
ク時に範囲チェックを行い、カメラ設定ダイアログボックスの各コントロールのメンバ変数に対しては入力範囲を指定しています。
設定項目

最小値

最大値

画像ピクセル数（X 方向のサイズ）

1

7450

撮影ライン数（Y 方向のサイズ）

1

16200

STDIS

4000

16200

STENB

4000

16200

-5000050000

ステージ移動ステップ数(＊)＊：画像撮影時は、1 以上（プラス値）を指定しなければなりません。また、0 は指定できません。

21

2-2.関数一覧
No.

関 数

名

1 igOpenDevice
2 igCloseDevice

機

能

参照

デバイスをオープンし、ステージおよびラインセンサ P.5の初期化を行います。
P.23
デバイスをクローズし、各リソースを解放します。
P.10
P.24

3 igGetPixcelLine

ラインセンサの、現在設定されている撮影画素数（主走査/副走査）を取得します。

P.6

4 igSetPixcelLine

ラインセンサの撮影画素数（主走査/副走査）を変更します。カメラの設定ファイルの内容を更新します。

P.16

5 igGetStageParam

ステージの現在の設定値（ステージスピード/駆動ス
テップ数/画像取得ポイント）を取得します。

P.6, 7

6 igSetStageParam

ステージの設定値（ステージスピード/駆動ステップ
数/画像取得ポイント）を変更します。

P.8

7 igGetCameraParam

カメラ設定パラメタ（STDIS・STEMB）を取得します。

P.6

8 igSetCameraParam

カメラ設定パラメタ（STDIS・STEMB）を変更します。カメラの設定ファイルの内容を更新します。

P.16

9 igSetEquallyImageRate

撮影画像の縦横の比率が 1：1 になるように、カメラ
設定パラメタを調整します。
ステージの原点復帰を行います。

P.17

10 igResetStagePos
11 igGetCurrentPos
12 igResetCurrentPos

P.26
P.27

P.28
P.29
P.30
P.31
P.9

P.32

起動時の位置を 0 とした、ステージの現ポジションを取得します。
ステージの現ポジションをリセットします。

P.7

P.33
P.7

P.34

13 igMoveStagePos

ステージのポジションを移動します。

14 igShotImage

カメラの設定により、画像の撮影のみ行います。

15 igCaptureImage

ステージとカメラの設定により、ステージの移動およ

16 igGetImageAddress

P.25

P.9

P.35
P.19
P.36

び画像の撮影を行い、BMP 形式データを作成します。
撮影した画像のメモリアドレスを取得します。

P.8

P.37
P.18
P.38
P.20

17 igMakeBMPData

撮影した画像から、BMP 形式のデータを作成します。

18 igDrawImage

メモリ上の画像データをピクチャボックスに描画します。

P.12, 2019 igSaveImageFile

メモリ上の画像データを BMP 形式でファイルに保存
します。

P.13

20 igLoadImageFile

BMP 形式のファイルから画像データをメモリ上に読み
込みます。

P.14

P.39

22

P.40
P.41
P.42

2-3.関数詳細
2-3-1.デバイスオープン（igOpenDevice）
機

能igOpenDevice
デバイスをオープンし、ステージおよびラインセンサの初期化を行います。

書

式

ULONG

関数名

引

数

igOpenDevice(
HANDLE* pigHandle,//デバイスハンドル格納域アドレス

LPTSTR ConfigName,//カメラの設定ファイル名

LPTSTR PortName,//COM ポート名

BOOL TrigerSignal)//トリガ信号の使用有無

pigHandle

本ライブラリで使用するデバイスハンドルの格納バッファアド
レスを指定します。

ConfigName

カメラの設定ファイル名を、フルパスで指定します。NULL を指定するとシステム初期設定時のカメラ設定ファイルを使用します。通常は NULL を指定してください。

PortName

ステージを接続している COM ポートの名称を指定します。
NULL を指定すると、"COM1"を使用します。

TrigerSignal

コントロールボックスからのトリガ信号を使用するなら TRUE
を、使用せずにプログラムから撮影タイミングを指示する場合
は FALSE を指定してください。ステージと連動させて撮影する場合は、TRUE を指定してください。

戻り値

備

考

正常にオープン・初期化を行った場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_ALREADY_USED

他のプロセスがデバイスを使用中

IGERR_CONFIG_FILE

カメラの設定ファイル名の指定が正しくない

IGERR_ALLOC_MEM

メモリが確保できない

IGERR_IPM_DEVICE

デバイスの未接続やリソースエラー

IGERR_IPM_IPCONTROL

デバイスとの通信エラー

IGERR_IPM_OPENDEVICE

デバイスドライバがオープンできない

IGERR_IPM_INITDEVICE

デバイスの初期化エラー

IGERR_OPEN_COMPORTCOM ポートがオープンできない

IGERR_NOT_SUPPORT

サポートしていない環境で実行している

IGERR_SYSTEM

その他システムエラー発生

igOpenDevice を呼び出すと、ステージとカメラの初期設定値が設定されます。設定値は、igGetPixcelLine、igGetCameraParam、igGetStageParam を呼び出して確認してください。
＊使用例参照ページ

P.5

23

2-3-2.デバイスクローズ（igCloseDevice）
機

能

igCloseDevice
デバイスをクローズし、リソースを解放します。

書

式

ULONG

関数名

引

数

戻り値

igCloseDevice(
HANDLE igHandle)

igHandle//デバイスハンドル

igOpenDevice で取得したデバイスハンドルを指定します。

正常にデバイスの終了処理を行った場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル

備考

IGERR_IPM_IPCONTROL

デバイスとの通信エラー

IGERR_NOT_SUPPORT

サポートしていない環境で実行している

IGERR_SYSTEM

その他システムエラー発生

プログラム終了までに、必ず igCloseDevice を呼び出してください。呼び出さずに終了すると、他のプロセスでデバイスが使用できなくなります。
＊使用例参照ページ

P.10

24

2-3-3.撮影画素数の取得（igGetPixcelLine）
機

能

igGetPixcelLine
ラインセンサの撮影画素数を取得します。

書

式

ULONG

関数名

引

数

戻り値

igGetPixcelLine (HANDLE igHandle,//デバイスハンドル

UINT* pigPixel,//主走査（ピクセル数）格納域アドレス

UINT* pigLine)//副走査（ライン数）格納域アドレス

igHandle

igOpenDevice で取得したデバイスハンドルを指定します。

pigPixel

ラインセンサの主走査（ピクセル数）を格納するバッファアド
レスを指定します。

pigLine

ラインセンサの副走査（ライン数）を格納するバッファアドレ
スを指定します。

正常に撮影画素数を取得した場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル

備考

カメラ設定ファイルに登録されている設定値を取得します。
＊使用例参照ページ

P.625

2-3-4.撮影画素数の変更（igSetPixcelLine）
機

能

igSetPixcelLine
ラインセンサの撮影画素数を変更します。

書

式

ULONG

関数名

引

数

戻り値

igSetPixcelLine (HANDLE igHandle,//デバイスハンドル

UINT igPixel,//主走査（ピクセル数）

UINT igLine)//副走査（ライン数）

igHandle

igOpenDevice で取得したデバイスハンドルを指定します。

igPixel

ラインセンサに設定する主走査（ピクセル数）を指定します。

igLineラインセンサに設定する副走査（ライン数）を指定します。

正常に撮影画素数を変更した場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル

備考

IGERR_PARAM_PIXCEL

ピクセル数が有効範囲外

IGERR_PARAM_LINE

ライン数が有効範囲外

IGERR_ALLOC_MEM

メモリが確保できない

IGERR_FREE_MEM

メモリの解放エラー

IGERR_CONFIG_FILE

カメラの設定ファイルのアクセスエラー

IGERR_IPM_DEVICE

デバイスエラー（リソースエラー等）

IGERR_IPM_IPCONTROL

デバイスとの通信エラー

IGERR_IPM_MEMORYTBL

メモリテーブルエラー

IGERR_NOT_SUPPORT

サポートしていない環境で実行している

IGERR_SYSTEM

その他システムエラー発生

撮影画像のピクセル数を変更すると、カメラの設定ファイルを変更し、画像格
納メモリを一度解放して、新たに確保します。
ピクセル数の有効範囲は 1～7450、ライン数の有効範囲は 1～16200 です。
＊使用例参照ページ

P.16

26

2-3-5.ステージ駆動パラメタの取得（igGetStageParam）
機

能

igGetStageParam
ステージ駆動パラメタを取得します。

書

式

ULONG

関数名

igGetStageParam (HANDLE igHandle,//デバイスハンドル

WORD* pigStageSpeed,//ステージのスピード格納域アドレス

UINT * pigMoveStep,//駆動ステップ数格納域アドレス

UINT* pigStartCameraPos) //画像取得ポイント格納域アドレス
引

数

戻り値

igHandle

igOpenDevice で取得したデバイスハンドルを指定します。

pigStageSpeed

ステージのスピード（0～5）を格納するバッファアドレ
スを指定します。備考を参照してください。

pigMoveStep

駆動ステップ数を格納するバッファアドレスを指定します。

pigStartCameraPos

画像取得ポイントを格納するバッファアドレスを指定します。

正常にステージ駆動パラメタを取得した場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル

備考

ステージのスピードには、以下の値を使用します。
定 義
値
説 明
IG_SPEED_500

0

IG_SPEED_1000

1

IG_SPEED_2000

2

IG_SPEED_3000

3

IG_SPEED_4000

4

IG_SPEED_5000

5＊使用例参照ページ

500PPS の場合
1000PPS の場合
2000PPS の場合
3000PPS の場合
4000PPS の場合
5000PPS の場合

P.6～P.727

2-3-6.ステージ駆動パラメタの変更（igSetStageParam）
機

能igSetStageParam
画像撮影時のステージ駆動パラメタを変更します。

書

式

ULONG

関数名

引

数

戻り値

igSetStageParam (HANDLE igHandle,//デバイスハンドル

WORD igStageSpeed,//ステージのスピード

UINT igMoveStep,//駆動ステップ数

UINT igStartCameraPos)//画像取得ポイント

igHandle

igOpenDevice で取得したデバイスハンドルを指定します。

igStageSpeed

ステージのスピードを指定します。スピードの設定については、前項を参照してください。

igMoveStep

画像撮影時の駆動ステップ数を指定します。0 以下の値は指定できません。

igStartCameraPos

画像取得ポイントを指定します。0 以下の値は指定できません。

正常にステージ駆動パラメタを変更した場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル
IGERR_PARAM_SPEED

ステージのスピードが有効範囲外

IGERR_PARAM_STEP

駆動ステップが有効範囲外、または、スピードの設定が 1000PPS 以上で駆動ステップが 1000 ステッ
プ未満

IGERR_PARAM_CAPTPOS 画像取得ポイントが有効範囲外
IGERR_IO_COMPORT備考COM ポート通信エラー

変更する必要がない項目は、igGetStageParam で取得した設定値をそのまま指定してください。
駆動ステップ数と画像取得ポイントの有効範囲は 1～50000 です。
＊使用例参照ページ

P.828

2-3-7.カメラ設定パラメタの取得（igGetCameraParam）
機

能

igGetCameraParam
カメラ設定パラメタを取得します。

書

式

ULONG

関数名

引

数

戻り値

igGetCameraParam (HANDLE igHandle,//デバイスハンドル
UINT* pigSTDIS,//STDIS 格納域アドレス

UINT* pigSTENB)//STENB 格納域アドレス

igHandle

igOpenDevice で取得したデバイスハンドルを指定します。

pigSTDISSTDIS を格納するバッファアドレスを指定します。

pigSTENBSTENB を格納するバッファアドレスを指定します。

正常にカメラ設定パラメタを取得した場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル

備考

カメラ設定ファイルに登録されている設定値を取得します。
＊使用例参照ページ

P.629

2-3-8.カメラ設定パラメタの変更（igSetCameraParam）
機

能igSetCameraParam
カメラ設定パラメタを変更します。

書

式

ULONG

関数名

引

数

戻り値

igSetCameraParam (HANDLE igHandle,//デバイスハンドル
UINT igSTDIS,//STDISUINT igSTENB)//STENB

igHandle

igOpenDevice で取得したデバイスハンドルを指定します。

igSTDIS

カメラに設定する STDIS を指定します。

igSTENB

カメラに設定する STENB を指定します。

正常にカメラ設定パラメタを変更した場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル

備考

IGERR_PARAM_STDISSTDIS が有効範囲外

IGERR_PARAM_STENB

STENB が有効範囲外

IGERR_CONFIG_FILE

カメラの設定ファイルのアクセスエラー

IGERR_IPM_IPCONTROL

デバイスとの通信エラー

IGERR_SYSTEM

その他システムエラー発生

設定を変更すると、カメラ設定ファイルを更新します。また、STDIS および
STENB の有効範囲は 4000～16200 です。
＊使用例参照ページ

P.16

30

2-3-9.画像サイズを縦横 1：1 比率に設定（igSetEquallyImageRate）
機

能

igSetEquallyImageRate
撮影画像の縦横の比率が 1 対 1 になるように、カメラパラメタを変更します。

書

式

ULONG

引

数

igHandle

関数名

戻り値

igSetEquallyImageRate (HANDLE igHandle)//デバイスハンドル

igOpenDevice で取得したデバイスハンドルを指定します。

正常にカメラ設定パラメタを変更した場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル

備考

IGERR_CONFIG_FILE

カメラの設定ファイルのアクセスエラー

IGERR_IPM_IPCONTROL

デバイスとの通信エラー

IGERR_SYSTEM

その他システムエラー発生

この縦横比率 1:1 設定は、システム標準レンズ最大倍率（×1）・標準カメラ（4.7μm／pixel）が前提となります。レンズの倍率を変えたり、標準レンズ・標準カメラ以外を使用して撮影した画像の比率は保証しません。その場合は、igSetCameraParam 関数を呼び出して、カメラ設定パラメタを変更してください。
＊使用例参照ページ

P.17

31

2-3-10. ステージの原点復帰（igResetStagePos）
機

能

igResetStagePos
ステージの原点復帰（原点位置に移動）を行います。

書

式

ULONG

関数名

引

数

戻り値

igHandle

igResetStagePos (HANDLE igHandle)//デバイスハンドル

igOpenDevice で取得したデバイスハンドルを指定します。

正常に原点復帰を行った場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル
IGERR_IO_COMPORT備考COM ポート通信エラー

原点位置にステージを移動するとともに、ステージの現ポジションをゼロにリセットします。原点復帰は、画像取得時のパラメタとして設定したステージス
ピードにかかわらず、最速スピードでステージ移動します。
＊使用例参照ページ

P.932

2-3-11. ステージの現ポジション取得（igGetCurrentPos）
機

能

igGetCurrentPos
ステージの現ポジション（ステップ）を取得します。

書

式

ULONG

関数名

引

数

戻り値

igGetCurrentPos (HANDLE igHandle,//デバイスハンドル

UINT* pigCurPos)//現ポジション格納域アドレス

igHandle

igOpenDevice で取得したデバイスハンドルを指定します。

pigCurPos

ステージの現ポジションを格納するバッファアドレスを指定します。

正常に現ポジションを取得した場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル

備考

ステージの現ポジション値は、プログラム起動時のステージの位置を 0 とし、そこから移動したステップ数を示しています。原点復帰を行うとゼロにリセットします。その他 igResetCurrentPos を呼び出してゼロにリセットできます。
＊使用例参照ページ

P.7

33

2-3-12. ステージの現ポジションリセット（igResetCurrentPos）
機

能

igResetCurrentPos
ステージの現ポジション値をゼロにリセットします。

書

式

ULONG

関数名

引

数

戻り値

igHandle

igResetCurrentPos (HANDLE igHandle)//デバイスハンドル

igOpenDevice で取得したデバイスハンドルを指定します。

正常に現ポジションをリセットした場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル

備考

ステージの現ポジション値は、プログラム起動時のステージの位置を 0 とし、そこから移動したステップ数を示しています。ステージを移動した後に、ポジ
ション値を 0 にリセットする場合にこの関数を呼び出します。
＊使用例参照ページ

P.734

2-3-13. ステージの移動（igMoveStagePos）
機

能

igMoveStagePos
ステージを移動します。

書

式

ULONG

関数名

引

数

戻り値

igMoveStagePos (HANDLE igHandle,//デバイスハンドル

long igStepCount)//移動ステップ数

igHandle

igOpenDevice で取得したデバイスハンドルを指定します。

igStepCount

ステージを移動するステップ数を指定します。マイナス方向に移動する場合は、マイナス値を指定します。

正常に原点復帰を行った場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル

備考

IGERR_PARAM_STEP

移動ステップ数が有効範囲外

IGERR_IO_COMPORTCOM ポート通信エラー

ステージを移動すると現ポジションを更新します。ここで指定したステップ数
は、画像取得時のパラメタにある駆動ステップ数には影響しません。
移動ステップ数の有効範囲は-50000～50000 です。ただし、実際のステージの位置によっては、指定したステップ数分移動するとは限りません。
＊使用例参照ページ

P.935

2-3-14. 画像の撮影（igShotImage）
機

能igShotImage
ラインセンサで撮影を行います。

書

式

ULONG

関数名

引

数

igShotImage (HANDLE igHandle,//デバイスハンドル

BOOL* pSetCancel,//キャンセルフラグのアドレス

LPVOID pigPtr)//撮影データ格納域アドレス

igHandle

igOpenDevice で取得したデバイスハンドルを指定します。

pSetCancel

キャンセルフラグのアドレスを指定します。画像の撮影中に処理を中止する場合に指定します。NULL を指定するとキャンセ
ル処理は行いません。また、撮影をキャンセルしても、ステージは停止しません。本関数呼出し時には、変数の初期値としてfalse をセットしてください。

pigPtr

戻り値

撮影した画像データの格納域アドレスを指定します。事前に、撮影するピクセル数×ライン数分のメモリを確保してください。

正常に画像を撮影した場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル

備考

IGERR_IO_COMPORTCOM ポート通信エラー

IGERR_CANCEL

処理中止（pSetCancel が TRUE になった）

IGERR_IPM_DEVICE

デバイスエラー（リソースエラー等）

IGERR_IPM_IPCONTROL

デバイスとの通信エラー

ラインセンサでの撮影のみ行います。ステージの制御が必要な場合は、
igMoveStagePos 関数で移動を行ってください。撮影画像の格納域は、撮影するピクセル数×ライン数以上のサイズが必要です。
また、撮影画像から igMakeBMPData 関数で BMP 形式の画像を作成できます。
＊使用例参照ページ

P.19

36

2-3-15. ラインセンサ画像撮影（igCaptureImage）
関数名

igCaptureImage機

能

ステージ制御とラインセンサでの撮影を行い、BMP 形式の画像を作成します。

書

式

ULONG

引

数

igCaptureImage (HANDLE igHandle,//デバイスハンドル

BOOL* pigCancel)//キャンセルフラグのアドレス

igHandle

igOpenDevice で取得したデバイスハンドルを指定します。

pigCancel

キャンセルフラグのアドレスを指定します。画像の撮影中に処理を中止する場合に指定します。NULL を指定するとキャンセ
ル処理は行いません。また、撮影をキャンセルしても、ステージは停止しません。本関数呼出し時には、変数の初期値としてfalse をセットしてください。

戻り値

正常に画像を撮影した場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル

備考

IGERR_IO_COMPORTCOM ポート通信エラー

IGERR_CANCEL

処理中止（pSetCancel が TRUE になった）

IGERR_IPM_DEVICE

デバイスエラー（リソースエラー等）

IGERR_IPM_IPCONTROL

デバイスとの通信エラー

IGERR_ALLOC_MEM

メモリが確保できない

ステージ移動後にステージの現ポジションを更新します。
＊使用例参照ページ

P.837

2-3-16. 画像データポインタ取得（igGetImageAddress）
関数名

igGetImageAddress機

能BMP 形式画像データの各ポインタを取得します。

書

式

ULONG

引

数

igGetImageAddress (HANDLE igHandle,//デバイスハンドル
LPVOID *pigPtr,//画像データポインタ格納域アドレス

int igPtrKind,//画像データポインタの種別

int igLineNo)//画像データのライン番号

igHandle

igOpenDevice で取得したデバイスハンドルを指定します。

pigPtr

画像データポインタを格納する変数のポインタを指定します。

igPtrKind

以下の、画像データポインタの種別を指定します。

igLineNo

IG_BMPFILEHEADER_PTR

BMPFILEHEADER のポインタ

IG_BMPINFOHEADER_PTR

BMPINFOHEADER のポインタ

IG_IMAGE_PTR

BMP 画像データへのポインタ

画像データ上側からのライン番号（0～）を指定します。
IG_BMP_START（-1）を指定すると、メモリ上の先頭位置（画像の左下）のアドレスを返します。この引数は PtrKind が
IG_IMAGE_PTR の場合のみ有効です。

戻り値

正常にポインタを格納した場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル

備考

IGERR_BMP_NODATA

BMP 画像はまだ作成していない

IGERR_PARAM_LINE

ライン番号の指定が違う

IGERR_PARAM

画像データポインタ種別の指定が違う

メモリ上には、画像の左下のデータから格納されています。画像の上側から処理する場合は、igLineNo に 0 から（画像のライン数-1）のライン番号を指定して、1 行ずつ読み込んでください。
一般的な DIB フォーマットのデータとして処理する場合は、igLineNo に
IG_BMP_START を指定してください。画像の左下のポインタを返します。
＊使用例参照ページ

P.18

38

2-3-17. BMP 形式データの作成（igMakeBMPData）
関数名

igMakeBMPData機

能

撮影した画像データから、BMP 形式のデータを作成します。

書

式

ULONG

igMakeBMPData(
HANDLE igHandle,//デバイスハンドル

LPVOID pigImgData, //撮影した画像データ格納域アドレス

引

数

UINT igXpixel,//画像データピクセル数（主走査）UINT igYLines)//画像データライン数（副走査）igHandle

igOpenDevice で取得したデバイスハンドルを指定します。

pigImgData

撮影した画像データの格納域アドレスを指定します。NULL を指定すると、最後に撮影した画像データから作成します。その場合は、igXpixel および igYLines は無効になります。

戻り値

igXpixel

pImgData で指定した画像データのピクセル数（主走査）を指定します。

igYLines

pImgData で指定した画像データのライン数（副走査）を指定します。

正常に描画した場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル

備考

IGERR_NOT_CAPTURE

画像を撮影していない

IGERR_ALLOC_MEM

メモリが確保できない

igShotImage 関数で撮影したデータを BMP 形式の画像に変換する場合などに呼び出します。
igMakeBMPData 関数で作成した BMP 形式データは、igDrawImage 関数やigSaveImageFile 関数で、描画や保存ができます。
＊使用例参照ページ

P.20

39

2-3-18. 画像データの描画（igDrawImage）
関数名

igDrawImage機

能BMP 形式の画像データをピクチャボックスに描画します。

書

式

ULONG

引

数

igDrawImage (HANDLE igHandle,//デバイスハンドル

CWnd* pigWnd,//ピクチャボックスコントロールのハンドル

int igDrawMode)//描画モード

igHandle

igOpenDevice で取得したデバイスハンドルを指定します。

pigWndピクチャボックスコントロールのウィンドウハンドルを指定します。

igDrawMode

以下の、画像モードを、ビットごとの OR（|）演算子で組み合わせて指定します。
IG_DRAW_SAMERATE

原画像と同比率で描画する

IG_DRAW_STRETCH

ピクチャボックスのサイズに合わせて伸縮する

IG_DRAW_REFRESH

描画前に背景をクリアする

IG_DRAW_NOREFRESH 描画前に背景をクリアしない
戻り値

正常に描画した場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル

備考

IGERR_BMP_NODATA

BMP 画像はまだ作成していない

IGERR_PARAM

ピクチャボックスコントロールの指定エラー

IGERR_DRAW_BMP

BMP 描画エラー

撮影した画像のほかに、igLoadImageFile 関数を呼び出して読み込んだ画像も描画できます。
igDrawMode は、IG_DRAW_SAMERATE より IG_DRAW_STRETCH の指定が、
IG_DRAW_REFRESH より IG_DRAW_NOREFRESH の指定が優先されます。
＊使用例参照ページ

P.12

P.20

40

2-3-19. 画像のファイル保存（igSaveImageFile）
関数名

igSaveImageFile機

能

BMP 形式の画像データをファイルに保存します。

書

式

ULONG

引

数

igSaveImageFile (HANDLE igHandle,//デバイスハンドル

CString igFileName)//保存する BMP ファイル名

igHandle

igOpenDevice で取得したデバイスハンドルを指定します。

igFileName

画像を保存する、BMP ファイル名をフルパスで指定します。
拡張子は「.bmp」でなければなりません。

戻り値

正常に保存した場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル

備考

IGERR_BMP_NODATA

BMP 画像はまだ作成していない

IGERR_PARAM

保存ファイル名の指定エラー（拡張子が「.bmp」
でない）

IGERR_BMP_FILE

BMP ファイルオープンエラー

ファイルの格納先フォルダが存在するかどうかはチェックしません。存在しない場合は IGERR_BMP_FILE を返します。
＊使用例参照ページ

P.13

41

2-3-20. 画像ファイルの読み込み（igLoadImageFile）
関数名

igLoadImageFile機

能

BMP 形式の画像データをファイルから読み込みます。

書

式

ULONG

引

数

igLoadImageFile (HANDLE igHandle,//デバイスハンドル

CString igFileName)//読み込む BMP ファイル名

igHandle

igOpenDevice で取得したデバイスハンドルを指定します。

igFileName

画像を保存する、BMP ファイル名をフルパスで指定します。
拡張子は「.bmp」でなければなりません。

戻り値

正常に保存した場合は、IG_NO_ERROR（0）を返します。
エラーが発生した場合は、以下のエラーコードを返します。
IGERR_NOT_OPEN

デバイスの未オーブン

IGERR_INVALID_HANDLE 無効なデバイスハンドル
IGERR_PARAM

読み込みファイル名の指定エラー（拡張子が「.bmp」でない）

備

考

IGERR_BMP_FILE

BMP ファイルアクセスエラー

IGERR_ALLOC_MEM

メモリが確保できない

読み込んだ画像は、igDrawImage 関数でピクチャボックスに描画できます。
＊使用例参照ページ

P.14

42

2-4.戻り値一覧
戻り値定義名値

エラー内容

IG_NO_ERROR

0

IGERR_SYSTEM(0xE0000001) システムエラー（ライブラリの内部エラー等）(0xE0000002) メモリが確保できない

IGERR_ALLOC_MEM
IGERR_FREE_MEM

正常終了

IGERR_CANCEL(0xE0000003) メモリの解放エラー(0xE0000004) 処理中止

IGERR_NOT_CAPTURE(0xE0000005) 画像を撮影していない

IGERR_DRAW_BMP(0xE0000006) BMP 描画エラー

IGERR_BMP_FILE
IGERR_BMP_NODATA(0xE0000007) BMP ファイルエラー(0xE0000008) 画像を撮影または読込みしていない

IGERR_CONFIG_FILE(0xE0000009) カメラ設定ファイルのアクセスエラー

IGERR_NOT_SUPPORT(0xE001000A) サポート対象外の OS(0xE0000010) デバイス使用中（別プロセスがオープン中）

IGERR_ALREADY_USED
IGERR_NOT_OPEN
IGERR_INVALID_HANDLE
IGERR_PARAM
IGERR_PARAM_PIXCELIGERR_PARAM_LINE
IGERR_PARAM_SPEED
IGERR_PARAM_STEP(0xE0000011) デバイスをオープンしていない(0xE0000012) デバイスハンドルが無効(0xE0000013) 関数のパラメタの指定が間違っている(0xE0000014) ピクセル数が有効範囲外(0xE0000015) ライン数が有効範囲外(0xE0000016) ステージのスピードが有効範囲外

IGERR_PARAM_CAPTPOS(0xE0000017) 駆動ステップ数が有効範囲外(0xE0000018) 画像取得ポイント（ステップ数）が有効範囲外

IGERR_PARAM_STDIS(0xE0000019) STDIS が有効範囲外

IGERR_PARAM_STENB(0xE000001A) STENB が有効範囲外(0xE0010001) デバイスエラー（未接続・リソースエラー等）

IGERR_IPM_DEVICEIGERR_IPM_INITDEVICEIGERR_IPM_IPCONTROL
IGERR_IPM_OPENDEVICEIGERR_IPM_MEMORYTBL
IGERR_IPM_MEMORY
IGERR_IPM_TIMEOUT(0xE0010002) デバイスの初期化エラー(0xE0010003) デバイスとの通信エラー(0xE0010004) デバイスドライバのオープンエラー(0xE0010005) メモリテーブルエラー(0xE0010006) 画像メモリエラー（未使用）(0xE0011001) タイムアウト発生

IGERR_IPM_OVERRUN(0xE0011002) FIFO が FULL（未使用）(0xE0011003) オーバーランエラー発生

IGERR_IPM_STOPGRABBER(0xE0011004) 画像処理装置にエラーが発生

IGERR_OPEN_COMPORT(0xE0020001) ステージ制御用 COM ポートのオープンエラー

IGERR_IO_COMPORT(0xE0020002) COM ポート通信エラー

IGERR_IPM_FULLFIFO

43

IPVDevice（ラインセンサシステム開発キット IP-View 用ライブラリ）ver.1.0

仕様説明書

2006 年 6 月 21 日

第 1 版発行

有限会社イグノス
岩手県北上市相去町山田 2-18 北上オフィスプラザ 202 号
TEL 0197-67-6396
URL http://www.igunoss.co.jp

FAX 050-7509-7281
E-Mail igunoss@igunoss.co.jp●Microsoft および Windows は Microsoft Corporation の米国およびその他の国における登録商標です。
●その他、本書に掲載されている会社名、製品名は、それぞれ各社の商標、登録商標、商品名です。なお、本文中に Ⓡ、ＴＭマークは明記していません。
●本書の内容について、将来予告なしに変更することがあります。
●本書の内容の一部または全部を無断で転載することは堅くお断りいたします。

ラインセンサシステム開発キット IP-View 用ライブラリ

ver.1.0