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

コーデックのプロパティを保存する

概要

コーデックの利用とそのプロパティの保存、ロードについて説明します。
コーデックとはビデオストリームを圧縮/解凍するもので、コンプレッサーまたはAVIコンプレッサーと呼ばれることもあります。
いくつかのコーデックのプロパティはIC Imaging Controlで呼び出し、設定することができます。例えばビデオストリームの品質を保存する前に設定することができます。

サンプルプログラム

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

実行結果

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

[コーデック]リストボックス 使用できるコーデック一覧を表示します。
[Load Data]ボタン ファイル「test.bin」を読み込み、コーデックリストボックスで選択したコーデックと一致しているのか確認します。
[Save Data]ボタン コーデックからバイナリデータを取得し、バイナリで開いたファイル「test.bin」に保存します。
[Show Property]ボタン AviCompressorのプロパティページを表示します。

初期設定

private TIS.Imaging.AviCompressor _selectedCodec;

グローバルオブジェクトとしてAviCompressorが必要となりますので下記のように宣言します。
AviCompressorのプロパティはprivate変数として定義した場合消えてしまうため、グローバルオブジェジェクトである必要があります。

private void Form1_Load(object sender, EventArgs e)
{
    // cboVideoCodecリストボックスに追加する
    foreach (TIS.Imaging.AviCompressor codec in TIS.Imaging.AviCompressor.AviCompressors)
    {
        cboVideoCodec.Items.Add(codec);
    }
    // 
    cboVideoCodec.SelectedIndex = 0;

    _selectedCodec = (TIS.Imaging.AviCompressor)cboVideoCodec.SelectedItem;

    // ボタンの有効/無効化
    cmdShowPropertyPage.Enabled = _selectedCodec.PropertyPageAvailable;
    cmdLoadData.Enabled = _selectedCodec.PropertyPageAvailable;
    cmdSaveData.Enabled = _selectedCodec.PropertyPageAvailable;
}

このコードはAviCompressor.AviCompressorsプロパティを使って利用可能なコーデックのリストを作成します。グローバル変数CodecがForeach .. In ..ステートメントでアイテムとして使われています。 最初の利用可能コーデックはグローバルオブジェクトAviCompressor Codecに割り当てられます。3つのボタンはAviCompressorオブジェクト内でプロパティPropertyPageAvailableに従って有効化、無効化されます。これによってコーデックがサポートしていない動作を回避することができます。コンボボックスcboVideoCodecをフォームに追加し、SelectedValueChangedイベントプロシージャをこのコンボボックスに割り当てます。PropertyPageAvailableがTrueのコーデックでデータの呼び出し、割り当てが行えるため、プログラム実行前にこのプロパティをチェックしておく必要があります。

[Save Data]ボタンクリック時の処理

private void cmdSaveData_Click(object sender, EventArgs e)
{
    try
    {
        //コーデックプロパティがtest.binに保存されます
        System.IO.FileStream filestream = new System.IO.FileStream("test.bin", System.IO.FileMode.Create, System.IO.FileAccess.Write);
        System.IO.BinaryWriter binWriter = new System.IO.BinaryWriter(filestream);
        binWriter.Write(_selectedCodec.Name);
        binWriter.Write(_selectedCodec.CompressorDataSize);
        binWriter.Write(_selectedCodec.CompressorData);

        binWriter.Close();
        filestream.Close();
    }
    catch (Exception Ex)
    {
        MessageBox.Show(Ex.Message);
    }
}

前述のように、コーデックプロパティはバイナリデータストリームとして供給されます。バイナリデータストリームとは単にバイトが並んでいるものです。ファイルの初期要素としてデータストリームのバイトカウントを保存することが強く推奨されます。データがファイルにロードされる際にこの初期要素を使うことで動的配列はバイトカウントに応じてサイズを変更し、データを格納できるようにします。

コーデックからバイナリデータを取得し、バイナリで開いたファイル「test.bin」に保存します。 保存されたファイルが使用されているコーデックと 一致することを確認するために、コーデックの名前がファイル「test.bin」に保存されます。
AviCompressor.PropertyPageAvailableがTrueである場合のみcmdSaveDataボタンが有効です。また、次のコードで置き換えることも可能です。

[Load Data]ボタンクリック時の処理

private void cmdLoadData_Click(object sender, EventArgs e)
{
    try
    {
        System.IO.FileStream filestream = new System.IO.FileStream("test.bin", System.IO.FileMode.Open, System.IO.FileAccess.Read);
        System.IO.BinaryReader binReader = new System.IO.BinaryReader(filestream);

        // コーデック構成ファイルからコーデックの名前を取得します
        string codecName = binReader.ReadString();

        //ファイル内のコーデック名を現在のコーデックの名前と比較します。
        if (_selectedCodec.Name == codecName)
        {
            // バイナリデータの長さを読み取ります。
            int codecDataLen = binReader.ReadInt32();
            // 構成データをコーデックに割り当てます。
            _selectedCodec.CompressorData = binReader.ReadBytes(codecDataLen);
        }
        else
        {
            //不一致の時にはエラーメッセージを表示
            MessageBox.Show("The saved data does not match to the used codec.\n" +
                    "saved: " + codecName + "\n" +
                    "used: " + _selectedCodec.Name);
        }
        binReader.Close();
        filestream.Close();
    }
    catch (Exception Ex)
    {
        MessageBox.Show(Ex.Message);
    }
}

ファイル「test.bin」からバイナリデータをロードし、コーデックとして割り当てます。
ファイルが使用されているコーデックと一致するかどうかを確認するために、コーデックの名前がファイルに保存されました。
これで、最初にファイルからロードされ、Codec.Nameと比較チェックし一致した場合、バイナリデータをコーデックに割り当てることができます。

[Load Data]ボタンクリック時の処理

private void cmdShowPropertyPage_Click(object sender, EventArgs e)
{
    _selectedCodec.ShowPropertyPage();
}

AviCompressorのプロパティページを表示します。プロパティページが利用可能でない場合はエラーを返します。

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

プログラマーズガイド:コーデックのプロパティを保存する
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル

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

Copyright © ARGO Corporation. All Rights Reserved.