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

静止画をキャプチャし保存する

概要

このサンプルはライブストリームより静止画をキャプチャしBMPファイルとして保存する方法です。
アプリケーションがスナップショットを必要とする場合、また定期的/不定期的に画像データへアクセスしたい場合にはFrameSnapSinkのクラスを使った方法が有効ですが、入力した画像に対して都度画像処理が必要な場合にはFrameQueueSinkをお使いください(下記のサンプルを参考してください)。

関心領域の画像更新
IC Imaging Control Ver3.5(C#/VB.NET) サンプルプログラム

サンプルプログラム

Software IC Imaging Control 3.5, Visual Studio™ 2019
サンプル(C#) grabbing_an_image_cs_3.5.zip
サンプル(VB.NET) grabbing_an_image_vb_3.5.zip

実行結果

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

[Start Live]ボタン ライブストリームを開始します。
[Stop Live]ボタン ライブストリームを停止します。
[Save]ボタン 表示している画像を静止画保存します。

初期設定

private void Form1_Load(object sender, EventArgs e)
{
    if( !icImagingControl1.LoadShowSaveDeviceState("lastSelectedDeviceState.xml") )
    {
        MessageBox.Show("No device was selected.", "Grabbing an Image", MessageBoxButtons.OK, MessageBoxIcon.Information);
        this.Close();
    }
    // カメラの設定した解像度に合わせて表示画面を変更
    icImagingControl1.LiveDisplayDefault = false;
    icImagingControl1.LiveDisplaySize = icImagingControl1.Size;

    cmdStartLive.Enabled = true;
    cmdStopLive.Enabled = false;
    cmdSaveBitmap.Enabled = false;
}
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, "Grabbing an Image")

            Me.Close()
        End If
    End If

    ' カメラの設定した解像度に合わせて表示画面を変更
    IcImagingControl1.LiveDisplayDefault = False
    IcImagingControl1.LiveDisplaySize = IcImagingControl1.Size

    cmdStartLive.Enabled = True
    cmdStopLive.Enabled = False
    cmdSaveBitmap.Enabled = False


End Sub

フォームロードするタイミングの処理内容です。
LoadShowSaveDeviceStateメソッドにてデバイスを割り当て、LiveDisplaySizeプロパティを使用することで、カメラの設定した解像度に合わせて表示画面を変更しています。

[Start Live]ボタンをクリックした時の動作

private void cmdStartLive_Click(object sender, EventArgs e)
{
    icImagingControl1.Sink = new TIS.Imaging.FrameSnapSink();

    icImagingControl1.LiveStart();
    cmdStartLive.Enabled = false;
    cmdStopLive.Enabled = true;
    cmdSaveBitmap.Enabled = true;
}
Private Sub cmdStartLive_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStartLive.Click
    IcImagingControl1.Sink = New TIS.Imaging.FrameSnapSink()

    IcImagingControl1.LiveStart()
    cmdStartLive.Enabled = False
    cmdStopLive.Enabled = True
    cmdSaveBitmap.Enabled = True
End Sub

[Start Live]ボタンをクリックした時のイベントハンドラーです。
LiveStartメソッドを開始する前にFrameSnapSinkメソッドでビデオストリームからフレームを取得するためのSinkタイプを作成します。
シンクとは画像取り込みカメラより送られて来るフレームを受け取り、そこからFrameHandlerSink.ImageBuffersコレクションにコピーするオブジェクトを指します。

[Stop Live]ボタンをクリックした時の動作

private void cmdStopLive_Click(object sender, EventArgs e)
{
    icImagingControl1.LiveStop();

    cmdStartLive.Enabled = true;
    cmdStopLive.Enabled = false;
    cmdSaveBitmap.Enabled = false;
}
Private Sub cmdStopLive_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStopLive.Click
    IcImagingControl1.LiveStop()

    cmdStartLive.Enabled = True
    cmdStopLive.Enabled = False
    cmdSaveBitmap.Enabled = False
End Sub

[Stop Live]ボタンをクリックした時のイベントハンドラーです。
LiveStopメソッドだけで停止することができます。

[Save]ボタンをクリックした時の動作

private void cmdSaveBitmap_Click( object sender, EventArgs e )
{

    // FrameSnapSinkを呼び出し
    TIS.Imaging.FrameSnapSink snapSink = icImagingControl1.Sink as TIS.Imaging.FrameSnapSink;
    // 1枚のイメージを取得。Sinkに入る次のフレームを5秒間待つ
    TIS.Imaging.IFrameQueueBuffer frm = snapSink.SnapSingle(TimeSpan.FromSeconds(5));
    // 画像を保存
    SaveFileDialog saveFileDialog1 = new SaveFileDialog();
    saveFileDialog1.Filter = "bmp files (*.bmp)|*.bmp|All files (*.*)|*.*";
    saveFileDialog1.FilterIndex = 1;
    saveFileDialog1.RestoreDirectory = true;

    if( saveFileDialog1.ShowDialog() == DialogResult.OK )
    {
        frm.SaveAsBitmap(saveFileDialog1.FileName);
    }
}
Private Sub cmdSaveBitmap_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSaveBitmap.Click
    If IcImagingControl1.LiveVideoRunning Then

        Try

            Dim imageSink As TIS.Imaging.FrameSnapSink = IcImagingControl1.Sink


            ' 1枚のイメージを取得。Sinkに入る次のフレームを5秒間待つ
            Dim image As TIS.Imaging.IFrameQueueBuffer = imageSink.SnapSingle(TimeSpan.FromSeconds(5))

            ' 画像を保存
            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

[Save]ボタンをクリックした時のイベントハンドラーです。
静止画保存機能が組み込まれたSinkタイプのFrameSnapSinkを使用しています。
IFrameQueueBufferはイメージバッファへのインターフェースでFrameQueueSinkとFrameSnapSinkで、イメージバッファを参照する際に使用します。
SnapSingleメソッドを使うことで、カメラから送られた新しい画像が取得されるのを待ち、取得されたらIFrameQueueBufferにその画像を返しますので、バッファを気にすることなく画像を簡単に取得できます。

下記のAPIリファレンスマニュアルにもその他関数などの説明があります。

プログラマーズガイド:静止画をキャプチャし保存する
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル

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

Copyright © ARGO Corporation. All Rights Reserved.