IC Imaging Control (.NET C#/Visual Basic)

  • サンプルプログラムトップページ
  • デバイスのオープンとハンドリング
    • C# VB.NET カメラの映像を既存のアプリケーションに組み込む方法
    • C# VB.NET デバイスを開く
    • C# VB.NET デバイスの開閉
    • C# VB.NET ダイアログボックスを使用してデバイスを開く
    • C# VB.NET 複数のデバイスを開く
    • C# VB.NET デバイスのシリアル番号を読み取る
    • C# VB.NET ICImagingControlの標準プロパティダイアログの使用
    • C# VB.NET デバイスプロパティ設定の保存と復元
  • ライブ表示
    • C# VB.NET ライブ表示のリサイズ
    • C# VB.NET フルスクリーン表示
    • C# VB.NET 十字マークのオーバーレイ
    • C# VB.NET WFPでvideoWindowを使ったビデオ表示
  • フレームフィルタ
    • C# VB.NET 低輝度、高輝度ピクセルの強調 その1
    • C# VB.NET 低輝度、高輝度ピクセルの強調 その2
  • ライブ表示とマルチプロセス
    • C# VB.NET ライブ表示のみ
    • C# VB.NET 静止画保存
    • C# VB.NET 任意のタイミングで画像処理と静止画保存を同時に処理
    • C# VB.NET 録画しながら任意のタイミングで静止画保存
    • C# VB.NET 全フレームリアルタイム画像処理しながら
             NG判定を静止画保存
    • C# VB.NET 全フレームリアルタイム画像処理しながら
             NG判定を静止画保存、同時に録画
  • イメージの取得
    • C# VB.NET イメージデータの取得
    • C# VB.NET 静止画ファイル保存(BMP)
    • C# VB.NET 静止画ファイル保存(JPEG)
    • C# VB.NET 静止画ファイルの連番保存
    • C# VB.NET カメラ画像保存&FTPで任意のサーバーに転送する
    • C# VB.NET リングバッファを使用したイメージシーケンスの取得と再生
    • C# VB.NET 静止画とAVI動画保存
    • C# VB.NET メモリーレコーディング
             (高速カメラで撮影した現象をRAMメモリー領域に保存)
    • C# VB.NET ソフトウェアトリガーで画像を表示・保存
    • C# VB.NET 録画時間を指定したAVIファイル保存
    • C# VB.NET 外部トリガーで録画の開始
    • C# VB.NET 取得したイメージの輝度値をCSV形式で出力する
             (16bit対応)
  • 画像処理
    • C# VB.NET イメージデータへのアクセス
    • C# VB.NET コントラストの強調 - Part 1
    • C# VB.NET コントラストの強調 - Part 2
    • C# VB.NET コントラストの強調 - Part 3
    • C# VB.NET レーザーポインタの位置を特定する
    • C# VB.NET OpenCVの画像処理
             (アナログタコメーターのデジタル化)
    • C# VB.NET AIモデルを使ったリアルタイム処理
  • Version 3.5サンプル
    • C# VB.NET 関心領域の画像更新
      Advanced Image Processing
    • C# VB.NET 2値化
      Binarization
    • C# VB.NET 明るさの調整
      BrightnessProperty
    • C# VB.NET 動画保存(MediaStreamSink)
      Capturing a Video File
    • C# VB.NET 動画保存(AviStartCapture)
      Capturing an AVI File
    • C# VB.NET 共通ファイル
      Common
    • C# VB.NET オーバーレイの作成
      Creating an Overlay
    • C# VB.NET デモアプリ
      demoapp
    • C# VB.NET VCDプロパティ:GPIOプロパティ編
      DigitalIO
    • C# VB.NET コールバック関数を使ってバッファを表示させる
      Display Buffer
    • C# VB.NET フィルターの適用
      Filter Inspector
    • C# VB.NET 静止画をキャプチャし保存する
      Grabbing an Image
    • C# VB.NET イメージバッファの輝度値を読み込み、輝度反転処理を施す
      Image Processing
    • C# VB.NET VCDプロパティ:全プロパティ一覧を表示する編
      List VCDProperties
    • C# VB.NET デバイス設定ダイアログの作成
      Making Device Settings
    • C# VB.NET イメージバッファにアクセスする
      Pixelformat
    • C# VB.NET コーデックのプロパティを保存する
      Saving Codec Properties
    • C# VB.NET スクロールとズーム
      croll And Zoom
    • C# VB.NET VCDプロパティ:露光とゲイン編
      StandardProperties
    • C# VB.NET VCDプロパティ:ストロボアウト編
      Strobe
    • C# VB.NET VCDプロパティ:
             プロパティダイアログ画面のカスタマイズ編
      VCD Property Page
    • C# VB.NET VCDプロパティ:明るさとホワイトバランス編
      VCD Simple Property
    • C# VB.NET VCDプロパティ:オートフォーカス編
    • C# VB.NET デバイスの再接続方法とフレーム落ちの確認
  • リンク集

    ICImagingControl WEB APIリファレンスマニュアル/サンプルプログラム

    :日本語対応済み :日本語化準備中
    開発言語 APIリファレンスマニュアル サンプルプログラム
    C 4.0
    ()
    - - 4.0
    ()
    - -
    C++ 4.0
    ()
    3.5
    ()
    3.4
    ()
    4.0
    ()
    3.5 3.4
    ()
    C#/VB.NET 4.0
    ()
    3.5
    ()
    3.4
    ()
    4.0
    ()
    3.5
    ()
    3.4
    ()
    Python 4.0
    ()
    3.5 3.4
    ()
    4.0
    ()
    3.5 3.4
    ()

デモアプリ

概要

静止画保存、動画保存、デバイスセッティング、プロパティのボタンを設置し、ライブ表示から動画/静止画保存までできるアプリケーションです。下記の機能をツールバーやアイコンで制御できるようにしています。

  • (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で動画ファイルの保存の指定をします。
動画保存については下記を参照ください。

動画保存
IC Imaging Control Ver3.5(C#/VB.NET) サンプルプログラム

(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リファレンスマニュアル

▲ このページの先頭に戻る

Copyright © ARGO Corporation. All Rights Reserved.