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
    ()

VCDプロパティ:ストロボアウト編

概要

VCDプロパティ機能のストロボアウトの実装方法について説明します。VCDプロパティの設定方法については下記をご覧ください。

VCDプロパティの設定方法
IC Imaging Control_Ver3.4(C#/VB.NET) サンプルプログラム

サンプルプログラム

Software IC Imaging Control 3.5, Visual Studio™ 2019
サンプル(C#) Strobe_cs_3.5.zip
サンプル(VB.NET) Strobe_vb_3.5.zip ※strobeモードを有効化のみの実装です。

実行結果

Visual Studioのプログラム上ではすでにボタンの設置や関数は定義済ですので、IC Imaging Contorl3.5をインストールされていれば、実行ボタンだけですぐにデバッグで動作確認することができます。
画面にあるそれぞれのボタンなどのコントローラの機能は下記の通りです。

[strobe]チェックボックス strobeモードを有効化・無効化します。
[Polarity]チェックボックス 極性(Polarity)を変更します。
[Mode]リストボックス constant,fixed duration,exposureモードのいずれかに設定します。
[storobeDuration]スライダー Modeリストボックスにて「fixed duration」に設定した時に反映するストロボアウトの時間(μs)
[storobeDelay]スライダー ストロボアウトを遅延させる時間(μs)

VCDプロパティの宣言

private TIS.Imaging.VCDSwitchProperty _strobeEnable;
private TIS.Imaging.VCDMapStringsProperty _strobeMode;
private TIS.Imaging.VCDSwitchProperty _strobePolarity;
private TIS.Imaging.VCDRangeProperty _strobeDuration;
private TIS.Imaging.VCDRangeProperty _strobeDelay;
Private strobeEnable As TIS.Imaging.VCDSwitchProperty
Private strobeMode As TIS.Imaging.VCDSwitchProperty
Private strobePolarity As TIS.Imaging.VCDSwitchProperty
Private strobeDuration As TIS.Imaging.VCDSwitchProperty
Private strobeDelay As TIS.Imaging.VCDSwitchProperty

プロパティを操作する為には適切な項目、要素、インターフェースを呼び出す必要があり、VCDGUIDsと呼ばれるプロパティを特定するための識別子を使います。VCDGUIDsの中にはElement、Interface、Property Itemが含まれています。
スライダーやチェックボックスで操作しやすくするためにSwitch、Range、MapStringsのインターフェイスをグローバルオブジェクトとして宣言します。
その他のインターフェースの一覧は下記にありますので、他のインターフェースを使用する場合にはご確認ください。

constants.Standard Interface Identifier (標準インターフェース識別子)
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル

初期設定

private void Form1_Load( object sender, EventArgs e )
{

    if( !icImagingControl1.LoadShowSaveDeviceState("lastSelectedDeviceState.xml") )
    {
        MessageBox.Show("No device was selected.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
        this.Close();
        return;
    }

    //カメラから出力された映像をIC Imaging Contorolのコントロール表示サイズにする
    icImagingControl1.LiveDisplayDefault = false;
    icImagingControl1.LiveDisplaySize = icImagingControl1.Size;

    // strobeEnableの初期化
    _strobeEnable = icImagingControl1.VCDPropertyItems.Find<VCDSwitchProperty>(VCDGUIDs.VCDID_Strobe, VCDGUIDs.VCDElement_Value );
    if ( _strobeEnable == null )
    {
        chkStrobe.Enabled = false;
        liststrobeMode.Enabled = false;
        chkstrobePolarity.Enabled = false;
        sldstrobeDuration.Enabled = false;
        sldstrobeDelay.Enabled = false;
    }
    else
    {
        chkStrobe.Enabled = true;

    }
    _strobeMode = icImagingControl1.VCDPropertyItems.Find<VCDMapStringsProperty>(VCDGUIDs.VCDID_Strobe, VCDGUIDs.VCDElement_StrobeMode);


    //Modeリストボックスの初期化
    if (_strobeMode == null)
    {
        liststrobeMode.Enabled = false;
    }
    else
    {
        int index = 0;
        foreach (string Item in _strobeMode.Strings)
        {
            liststrobeMode.Items.Add(Item);

            if (_strobeMode.String == Item.ToString()) liststrobeMode.SelectedIndex= index;
            index++;
        }
    }

    //Polarityの設定の初期化
    _strobePolarity = icImagingControl1.VCDPropertyItems.Find<VCDSwitchProperty>(VCDGUIDs.VCDID_Strobe, VCDGUIDs.VCDElement_StrobePolarity);
    if (_strobePolarity == null)
    {
        chkstrobePolarity.Enabled = false;
    }
    else
    {
        chkstrobePolarity.Enabled = true;

        if (_strobePolarity.Switch == true)
        {
            chkstrobePolarity.CheckState = CheckState.Checked;
        }
        else
        {
            chkstrobePolarity.CheckState = CheckState.Unchecked;
        }
    }

    //Durationの設定の初期化
    _strobeDuration = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>(VCDGUIDs.VCDID_Strobe, VCDGUIDs.VCDElement_StrobeDuration);
    if (_strobeDuration == null)
    {
        sldstrobeDuration.Enabled = false;
    }
    else
    {
        sldstrobeDuration.Enabled = true;

        sldstrobeDuration.Minimum = _strobeDuration.RangeMin;
        sldstrobeDuration.Maximum = _strobeDuration.RangeMax;
        if (_strobeDuration.RangeMin> _strobeDuration.Value) 
        { 
            sldstrobeDuration.Value = _strobeDuration.RangeMin;
        }
        else if (_strobeDuration.RangeMax < _strobeDuration.Value)
        { 
            sldstrobeDuration.Value = _strobeDuration.RangeMax;
        }
        else 
        {
            sldstrobeDuration.Value = _strobeDuration.Value;
        }
        textDuration.Text = sldstrobeDuration.Value.ToString();

    }

    //Delayの設定の初期化
    _strobeDelay = icImagingControl1.VCDPropertyItems.Find<VCDRangeProperty>(VCDGUIDs.VCDID_Strobe, VCDGUIDs.VCDElement_StrobeDelay);
    if (_strobeDelay == null)
    {
        sldstrobeDelay.Enabled = false;
    }
    else
    {
        sldstrobeDelay.Enabled = true;
        //
        sldstrobeDelay.Minimum = _strobeDelay.RangeMin;
        sldstrobeDelay.Maximum = _strobeDelay.RangeMax;
        if (_strobeDelay.RangeMin > _strobeDelay.Value)
        {
            sldstrobeDelay.Value = _strobeDelay.RangeMin;
        }
        else if (_strobeDelay.RangeMax < _strobeDelay.Value)
        {
            sldstrobeDelay.Value = _strobeDelay.RangeMax;
        }
        else
        {
            sldstrobeDelay.Value = _strobeDelay.Value;
        }
        textDelay.Text = sldstrobeDelay.Value.ToString();
    }


    //ストロボアウトのコントロールの有効化
    if (_strobeEnable.Switch == true)
    {
        chkStrobe.CheckState = CheckState.Checked;
        if (_strobeMode != null) liststrobeMode.Enabled = true;
        if (_strobePolarity != null) chkstrobePolarity.Enabled = true;
        if (_strobeDuration != null) sldstrobeDuration.Enabled = true;
        if (_strobeDelay != null) sldstrobeDelay.Enabled = true;
    }
    else
    {
        chkStrobe.CheckState = CheckState.Unchecked;
        liststrobeMode.Enabled = false;
        chkstrobePolarity.Enabled = false;
        sldstrobeDuration.Enabled = false;
        sldstrobeDelay.Enabled = false;
    }

    // ライブストリーミング開始
    icImagingControl1.LiveStart();
}
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    If Not IcImagingControl1.DeviceValid Then
        IcImagingControl1.ShowDeviceSettingsDialog()

        If Not IcImagingControl1.DeviceValid Then
            MsgBox("No device was selected.", MsgBoxStyle.Information, "Strobe")

            Me.Close()
            Exit Sub
        End If
    End If

    'カメラから出力された映像をIC Imaging Contorolのコントロール表示サイズにする
    IcImagingControl1.LiveDisplayDefault = False
    IcImagingControl1.LiveDisplaySize = IcImagingControl1.Size

    '  strobeEnableの初期化
    strobeEnable = IcImagingControl1.VCDPropertyItems.FindInterface(VCDGUIDs.VCDID_Strobe, VCDGUIDs.VCDElement_Value, VCDGUIDs.VCDInterface_Switch)

    If Not strobeEnable Is Nothing Then
        chkStrobe.Enabled = True
        chkStrobe.CheckState = strobeEnable.Switch
    Else
        chkStrobe.Enabled = False
        System.Windows.Forms.MessageBox.Show("Strobe property is not available.", Me.Text, System.Windows.Forms.MessageBoxButtons.OK, MessageBoxIcon.Information)
    End If

    ' ライブストリーミング開始
    IcImagingControl1.LiveStart()
End Sub

デバイスを選択後、VCDPropertyItems.Findメソッドを使って下記のitem識別子とelement識別子を引数に割り当てることによりVCDPropertyInterfaceを取得できます。

コントローラ グローバルオブジェクト item識別子 element識別子 インターフェース
[strobe]
チェックボックス
_strobeEnable VCDID_Strobe VCDElement_Value VCDSwitchProperty
[Polarity]
チェックボックス
_strobeEnable VCDID_Strobe VCDElement_StrobePolarity VCDSwitchProperty
[Mode]
リストボックス
_strobeMode VCDID_Strobe VCDElement_StrobeMode VCDMapStringsProperty
[storobeDuration]
スライダー
_strobeDuration VCDID_Strobe VCDElement_StrobeDuration VCDRangeProperty
[storobeDelay]
スライダー
_strobeDelay VCDID_Strobe VCDElement_StrobeDelay VCDRangeProperty

item識別子は下記をご覧ください。

constants.Standard Property Item Identifier
(標準プロパティアイテム識別子)

IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル

element識別子は下記をご覧ください

constants.Standard Element Identifier (標準エレメント識別子)
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル

[storobe]チェックボックスの処理

private void chkStrobe_CheckedChanged( object sender, EventArgs e )
{
    if( chkStrobe.CheckState == CheckState.Checked )
    {
        _strobeEnable.Switch = true;

        if (_strobeMode != null) liststrobeMode.Enabled = true;
        if (_strobePolarity != null) chkstrobePolarity.Enabled = true;
        if (_strobeDuration != null) sldstrobeDuration.Enabled = true;
        if (_strobeDelay != null) sldstrobeDelay.Enabled = true;
    }
    else
    {
        _strobeEnable.Switch = false;
        liststrobeMode.Enabled = false;
        chkstrobePolarity.Enabled = false;
        sldstrobeDuration.Enabled = false;
        sldstrobeDelay.Enabled = false;

    }
}
Private Sub chkStrobe_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkStrobe.CheckedChanged
    strobeEnable.Switch = chkStrobe.Checked
End Sub

[storobe]チェックボックスでチェックボックスが有効化されます。ユーザーがストロボチェックボックスをクリックすると、ストロボアウトが有効または無効になります。

[Polarity]チェックボックスの処理

private void strobePolarity_CheckedChanged(object sender, EventArgs e)
{
    if (chkStrobe.CheckState == CheckState.Checked)
    {
        _strobePolarity.Switch = true;
    }
    else
    {
        _strobePolarity.Switch = false;
    }
}

ユーザーがストロボチェックボックスをクリックすると、ストロボアウトの極性を変更します。

[Mode]リストボックスの処理

private void liststrobeMode_SelectedIndexChanged(object sender, EventArgs e)
{
    Object selectedItem = liststrobeMode.SelectedItem;
    _strobeMode.String = selectedItem.ToString();
}

Modeリストで選択したモードに設定します。
それぞれのモードは下記の通りです。

constant 出力期間:一定 (露光時間関係なし)
Enableの場合は常にストロボアウト出力するという設定となっています。
fixed duratio 出力期間:Durationで設定した期間だけストロボアウト出力します。
露光開始したタイミングで一定時間ストロボアウするときに使用します。
exposure 出力期間:露光している期間だけストロボアウト出力します。

[storobeDuration]スライダーの処理

 private void sldstrobeDuration_Scroll(object sender, EventArgs e)
{
    _strobeDuration.Value = (sldstrobeDuration.Value);
    textDuration.Text = sldstrobeDuration.Value.ToString();
}

[Mode]リストボックスでStrobe Mode(fixed duration)を選択したストロボアウトのDuration時間を設定します。
Strobe Durationはあくまで出力できる期間の指定となっており、Strobe Modeがfixed durationの時にのみ使用することができます。
Constantやexposureモードでは使用することができません。
Durationで設定した時間の間ストロボアウトし続けます。
例えば、設定時間が100の場合は、100µs(0.1ms)の時間ストロボアウトすることになります。

[storobeDelay]スライダーの処理

private void sldstrobeDelay_Scroll(object sender, EventArgs e)
{
    _strobeDelay.Value = (sldstrobeDelay.Value);
    textDelay.Text = sldstrobeDelay.Value.ToString();
}

ストロボアウトする遅延時間の設定です。設定時間が100の場合は、100µs(0.1ms)の時間後にストロボアウトすることになります。

VCDプロパティの使用方法は下記のAPIリファレンスマニュアルにもその他関数などの説明があります。

VCDプロパティ:露光とゲイン編
IC Imaging Control Ver3.5(C#/VB.NET) サンプルプログラム

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

Copyright © ARGO Corporation. All Rights Reserved.