デモアプリ
概要
静止画保存、動画保存、デバイスセッティング、プロパティのボタンを設置し、ライブ表示から動画/静止画保存までできるアプリケーションです。下記の機能をツールバーやアイコンで制御できるようにしています。
- (1)ライブ表示開始
- (2)ライブ表示停止
- (3)静止画保存
- (4)動画保存
- (5)デバイスダイアログ画面を表示
- (6)プロパティダイアログ画面を表示
- (7)トリガーを有効/無効化
このサンプルコードをもとに用途に合ったアプリケーションを再作成していただくことが可能です。
サンプルプログラム
Software | IC Imaging Control 3.5, Visual Studio™ 2019 |
---|---|
サンプル(C#) | demoapp_cs_3.5.zip |
サンプル(VB.NET) | demoapp_vb_3.5.zip |
実行結果
Visual Studioのプログラム上ではすでにボタンの設置や関数は定義済ですので、IC Imaging Contorl3.5をインストールされていれば、実行ボタンだけですぐにデバッグで動作確認することができます。
初めの設定項目
private void Form1_Load( object sender, EventArgs e )
{
// 最後に使用したビデオ キャプチャデバイスをレジストリから取得して開きます。
LoadLastUsedDevice();
// UpdateControls は、カメラがコンピュータに接続されているかどうかに応じて、
// アプリケーションのメニュー項目を有効または無効にします。
UpdateControls();
// フレームを取得するためにFrameSnapSinkを作成する。
_snapSink = new FrameSnapSink(); ;
icImagingControl1.Sink = _snapSink;
}
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'最後に使用したビデオ キャプチャ デバイスをレジストリから取得して開きます。
LoadLastUsedDevice()
'UpdateControls は、カメラがコンピュータに接続されているかどうかに応じて、
'アプリケーションのメニュー項目を有効または無効にします。
UpdateControls()
'フレームを取得するためにFrameSnapSinkを作成する。
_imageSink = New FrameSnapSink(TIS.Imaging.MediaSubtypes.RGB32)
IcImagingControl1.Sink = _imageSink
End Sub
フレームの取得をするにはシンクの取得をする必要があります。シンクとはカメラより送られてくるフレームを受け取り、そこからリングバッファにコピーまたは画像/動画ファイルに保存するオブジェクトのことでフォームロード時に下記のように設定する必要があります。
ツールバーのボタンのハンドラー
private void toolStrip1_ItemClicked( object sender, ToolStripItemClickedEventArgs e )
{
// Button プロパティを感知して、クリックされたボタンを特定します。
switch ( toolStrip1.Items.IndexOf( e.ClickedItem ) )
{
case 0: //(1)ライブ表示開始
StartLiveVideo();
break;
case 1: //(2)ライブ表示停止
StopLiveVideo();
break;
case 3: //(3)静止画保存
SaveImage();
break;
case 4: //(4)動画保存
ShowAVIDialog();
break;
case 6: //(5)デバイスダイアログ画面を表示
SelectDevice();
break;
case 7: //(6)プロパティダイアログ画面を表示
ShowProperties();
break;
case 10: //(7)トリガーを有効/無効化
ToggleTrigger();
break;
}
}
Private Sub toolStrip1_ItemClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles toolStrip1.ItemClicked
' Button プロパティを感知して、クリックされたボタンを特定します。
Select Case (toolStrip1.Items.IndexOf(e.ClickedItem))
Case 0 '(1)ライブ表示開始
StartLiveVideo()
Case 1 '(2)ライブ表示停止
StopLiveVideo()
Case 3 '(3)静止画保存
SaveImage()
Case 4 '(4)動画保存
ShowAVIDialog()
Case 6 '(5)デバイスダイアログ画面を表示
SelectDevice()
Case 7 '(6)プロパティダイアログ画面を表示
ShowProperties()
Case 10 '(7)トリガーを有効/無効化
ToggleTrigger()
End Select
End Sub
ツールバーで制御できる機能をSwitch文で条件分岐をしています。
ここからはツールバーあるいはアイコンボタンで制御するそれぞれの機能について説明しています。
(1)ライブ表示開始
private void StartLiveVideo()
{
if( icImagingControl1.DeviceValid )
{
icImagingControl1.LiveStart();
playToolStripMenuItem.Enabled = false;
stopToolStripMenuItem.Enabled = true;
ToolbarPlayButton.Enabled = false;
ToolBarStopButton.Enabled = true;
ToolBarSnapButton.Enabled = true;
}
}
Private Sub StartLiveVideo()
If IcImagingControl1.DeviceValid Then
IcImagingControl1.LiveStart()
playToolStripMenuItem.Enabled = False
stopToolStripMenuItem.Enabled = True
ToolbarPlayButton.Enabled = False
ToolBarStopButton.Enabled = True
ToolBarSnapButton.Enabled = True
End If
End Sub
ライブ表示を開始するためにはicImagingControl1.LiveStartメソッドで開始することができます。
LiveStartメソッドの詳細については下記を参照ください。
ICImagingControl.LiveStart メソッド
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル
(2)ライブ表示停止
private void StopLiveVideo()
{
if( icImagingControl1.DeviceValid )
{
icImagingControl1.LiveStop();
playToolStripMenuItem.Enabled = true;
stopToolStripMenuItem.Enabled = false;
ToolbarPlayButton.Enabled = true;
ToolBarStopButton.Enabled = false;
ToolBarSnapButton.Enabled = false;
}
}
Private Sub StopLiveVideo()
If IcImagingControl1.DeviceValid Then
IcImagingControl1.LiveStop()
playToolStripMenuItem.Enabled = True
stopToolStripMenuItem.Enabled = False
ToolbarPlayButton.Enabled = True
ToolBarStopButton.Enabled = False
ToolBarSnapButton.Enabled = False
End If
End Sub
ライブ表示を停止するためにはicImagingControl1.LiveStopメソッドで停止することができます。
LiveStopメソッドの詳細については下記を参照ください。
ICImagingControl.LiveStop メソッド
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル
(3)静止画保存
private void SaveImage()
{
if (!icImagingControl1.LiveVideoRunning)
{
return;
}
IFrameQueueBuffer buf;
try
{
// フレームを取得する
buf = _snapSink.SnapSingle(TimeSpan.FromSeconds(5));
}
catch (Exception ex)
{
MessageBox.Show("Failed to snap image due to: " + ex);
return;
}
// ファイルの保存ダイアログを呼び出して、画像のファイル名を入力します
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "bmp files (*.bmp)|*.bmp|All files (*.*)|*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.RestoreDirectory = true;
if( saveFileDialog1.ShowDialog() == DialogResult.OK )
{
// 静止画を保存する
buf.SaveAsBitmap( saveFileDialog1.FileName );
}
}
Private Sub SaveImage()
If IcImagingControl1.DeviceValid Then
Try
Dim image As IFrameQueueBuffer
' フレームを取得する
image = _imageSink.SnapSingle(TimeSpan.FromSeconds(1))
' ファイルの保存ダイアログを呼び出して、画像のファイル名を入力します
Dim saveFileDialog1 As SaveFileDialog = New SaveFileDialog()
saveFileDialog1.Filter = "bmp files (*.bmp)|*.bmp|All files (*.*)|*.*"
saveFileDialog1.FilterIndex = 1
saveFileDialog1.RestoreDirectory = True
If saveFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
' 静止画を保存する
image.SaveAsBitmap(saveFileDialog1.FileName)
End If
Catch
MessageBox.Show("Snap Image failed, timeout occurred.")
End Try
End If
End Sub
静止画を保存するためにはSnapSingleメソッドを使うことになります。
入ってきたばかりのフレームデータが入ったIFrameQueueBufferが返されます。
SnapSingleメソッドの詳細については下記を参照ください。
FrameSnapSink.SnapSingle メソッド
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル
(4)動画保存
private void ShowAVIDialog()
{
if( icImagingControl1.DeviceValid )
{
AviDialog AVIDlg = new AviDialog( icImagingControl1 );
AVIDlg.ShowDialog();
AVIDlg.Dispose();
AVIDlg = null;
}
}
Private Sub ShowAVIDialog()
If (icImagingControl1.DeviceValid) Then
Dim AVIDlg As AviDialog = New AviDialog(IcImagingControl1)
AVIDlg.ShowDialog()
AVIDlg.Dispose()
AVIDlg = Nothing
End If
End Sub
AviDialogで動画ファイルの保存の指定をします。
動画保存については下記を参照ください。
(5)デバイスダイアログを表示
private void SelectDevice()
{
if (icImagingControl1.LiveVideoRunning)
{
icImagingControl1.LiveStop();
icImagingControl1.ShowDeviceSettingsDialog();
if (icImagingControl1.DeviceValid)
{
icImagingControl1.LiveStart();
}
}
else
{
icImagingControl1.ShowDeviceSettingsDialog();
}
UpdateControls();
SetWindowSizeToImagesize();
DeviceSettings.SaveSelectedDevice( icImagingControl1 );
}
Private Sub SelectDevice()
If IcImagingControl1.LiveVideoRunning Then
IcImagingControl1.LiveStop()
IcImagingControl1.ShowDeviceSettingsDialog()
If (IcImagingControl1.DeviceValid) Then
IcImagingControl1.LiveStart()
End If
Else
IcImagingControl1.ShowDeviceSettingsDialog()
UpdateControls()
SetWindowSizeToImagesize()
DeviceSettings.SaveSelectedDevice(IcImagingControl1)
End If
End Sub
IC Imaging Controlではデバイスを選択するためのダイアログ(ShowDeviceSettingsDialogメソッド)を用意しています。
ダイアログを呼び出し、使用するカメラを選択することで簡単にデバイス指定を行うことができます。
ShowDeviceSettingsDialogメソッドの詳細については下記を参照ください。
ICImagingControl.ShowDeviceSettingsDialog メソッド
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル
(6)カメラプロパティダイアログを表示
private void ShowProperties()
{
if( icImagingControl1.DeviceValid )
{
icImagingControl1.ShowPropertyDialog();
UpdateControls();
}
}
Private Sub ShowProperties()
If IcImagingControl1.DeviceValid Then
IcImagingControl1.ShowPropertyDialog()
UpdateControls()
End If
End Sub
カメラで使用できるプロパティ(機能)をコントロールするためのダイアログ(ShowPropertyDialogメソッド)を表示します。
このダイアログを使うことでカメラのプロパティの変更を簡単に行うことができます。
ShowPropertyDialogメソッドの詳細については下記を参照ください。
ICImagingControl.ShowPropertyDialog メソッド
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル
(7)トリガー機能を有効化/無効化
private void ToggleTrigger()
{
if( icImagingControl1.DeviceValid )
{
if( icImagingControl1.DeviceTriggerAvailable )
{
bool trigger = !icImagingControl1.DeviceTrigger;
if( icImagingControl1.LiveVideoRunning )
{
icImagingControl1.LiveStop();
icImagingControl1.DeviceTrigger = trigger;
icImagingControl1.LiveStart();
}
else
{
icImagingControl1.DeviceTrigger = trigger;
}
externalTriggerToolStripMenuItem.Checked = trigger;
ToolBarTriggerButton.Checked = trigger;
}
}
}
Private Sub ToggleTrigger()
If IcImagingControl1.DeviceValid Then
If (IcImagingControl1.DeviceTriggerAvailable) Then
Dim trigger As Boolean = Not IcImagingControl1.DeviceTrigger
If (IcImagingControl1.LiveVideoRunning) Then
IcImagingControl1.LiveStop()
IcImagingControl1.DeviceTrigger = trigger
IcImagingControl1.LiveStart()
Else
IcImagingControl1.DeviceTrigger = trigger
End If
externalTriggerToolStripMenuItem.Checked = trigger
ToolBarTriggerButton.Checked = trigger
End If
End If
End Sub
外部トリガー機能の有効化あるいは無効化を切り替える機能です。
外部トリガーがONの場合には外部トリガー信号をカメラに入力しない限り、ライブ表示がされませんのでご注意ください。
DeviceTriggerプロパティの詳細については下記を参照ください。
ICImagingControl.DeviceTrigger プロパティ
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル
ライブ表示のサイズを変更
private void SetWindowSizeToImagesize()
{
if( icImagingControl1.DeviceValid )
{
// 幅を最小サイズの 230 ピクセルに変更します。
// 幅が 230 ピクセル未満の場合、ツールバーが完全に表示されません。
Width = Math.Max(icImagingControl1.LiveDisplayOutputWidth + Width - ClientSize.Width, 230);
Height = icImagingControl1.LiveDisplayOutputHeight + Height - ClientSize.Height + toolStrip1.Size.Height;
}
}
Private Sub SetWindowSizeToImagesize()
If IcImagingControl1.DeviceValid Then
'幅を最小サイズの 230 ピクセルに変更します。
'幅が 230 ピクセル未満の場合、ツールバーが完全に表示されません。
Width = Math.Max(IcImagingControl1.LiveDisplayOutputSize.Width + Width - ClientSize.Width, 230)
Height = IcImagingControl1.LiveDisplayOutputSize.Height + Height - ClientSize.Height + toolStrip1.Size.Height
End If
End Sub
画面のサイズが230 ピクセル以下にするとツールバーが表示されないため、初めに表示するライブ表示の画面のサイズを設定します。
下記のAPIリファレンスマニュアルにもICImagingControlクラスのプロパティやメソッドなどの説明があります。
ICImagingControl クラス
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル