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

カメラ画像保存&FTPで任意のサーバーに転送する

概要

イメージデータストリームから1枚のフレームを取得してFTPサーバーにアップロードする方法を示しています。

サンプルプログラム

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

サンプルツールの外観

private void Form1_Load(object sender, System.EventArgs e)
{
    icImagingControl1.ShowDeviceSettingsDialog();
    if( icImagingControl1.DeviceValid )
    {
        icImagingControl1.Sink = new TIS.Imaging.FrameSnapSink();
        icImagingControl1.LiveStart();
    }
    else
    {
        Close();
    }
}

Windows Formが立ち上がった時にデバイス選択のダイアログ(.ShowDeviceSettingsDialog)をコールして、使用するデバイスを選択します。正しいデバイスが選択されれば、.LiveStartによりライブ表示を開始します。その際にビデオストリームから任意のタイミングでフレームを取得するためのSinkタイプFrameSnapSinkクラスを定義しています。

private void btnsendFtp_Click(object sender, System.EventArgs e)
{
    TIS.Imaging.FrameSnapSink snapSink = icImagingControl1.Sink as TIS.Imaging.FrameSnapSink;
    TIS.Imaging.IFrameQueueBuffer frm = snapSink.SnapSingle(TimeSpan.FromSeconds(5));


    string fileName = "Image " + imageNumber + ".bmp";

    TIS.Imaging.FrameExtensions.SaveAsBitmap(frm, fileName);
			sendFtp(fileName);
    imageNumber += 1;
}

このコードは、Windowsフォームアプリケーションの「ftpでサーバーに転送する」ボタンがクリックされたときに、カメラから画像を取得してそれをファイルに保存し、そのファイルをFTPサーバーに送信する処理を行っています。
まず、icImagingControl1からFrameSnapSinkを取得し、SnapSingleメソッドを使って、5秒間待ってからカメラから1枚の画像(フレーム)を取得しています。
その後、"Image [imageNumber].bmp" という形式のファイル名を生成し、取得した画像をビットマップ形式で保存しています。imageNumberは保存する画像の番号で、処理ごとにインクリメント(+1を加算)されます。 最後に保存したファイルを、FTPを利用してサーバーに送信するための後述のsendFtpメソッドを呼び出しています。

private void sendFtp(string filename)
{
    try
    {
        //アップロードするファイル
        string upFile = filename;
        //アップロード先のURI
        Uri u = new Uri("ftp://localhost/" + filename);

        //FtpWebRequestの作成
        System.Net.FtpWebRequest ftpReq = (System.Net.FtpWebRequest)
            System.Net.WebRequest.Create(u);
        //ログインユーザー名とパスワードを設定
        ftpReq.Credentials = new System.Net.NetworkCredential("username", "password");
        //MethodにWebRequestMethods.Ftp.UploadFile("STOR")を設定
        ftpReq.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
        //要求の完了後に接続を閉じる
        ftpReq.KeepAlive = false;
        //ASCIIモードで転送する
        ftpReq.UseBinary = false;
        //PASVモードを無効にする
        ftpReq.UsePassive = false;

        //ファイルをアップロードするためのStreamを取得
        System.IO.Stream reqStrm = ftpReq.GetRequestStream();
        //アップロードするファイルを開く
        System.IO.FileStream fs = new System.IO.FileStream(
            upFile, System.IO.FileMode.Open, System.IO.FileAccess.Read);
        //アップロードStreamに書き込む
        byte[] buffer = new byte[1024];
        while (true)
        {
            int readSize = fs.Read(buffer, 0, buffer.Length);
            if (readSize == 0)
                break;
            reqStrm.Write(buffer, 0, readSize);
        }
        fs.Close();
        reqStrm.Close();

        //FtpWebResponseを取得
        System.Net.FtpWebResponse ftpRes =
            (System.Net.FtpWebResponse)ftpReq.GetResponse();
        //FTPサーバーから送信されたステータスを表示
        Console.WriteLine("{0}: {1}", ftpRes.StatusCode, ftpRes.StatusDescription);
        //閉じる
        ftpRes.Close();
    }
    catch(Exception ex) {
        Console.WriteLine(ex);
    }
}

このメソッドは、指定されたファイルをFTPサーバーにアップロードしています。
まず、「Uri u = new Uri("ftp://localhost/" + filename)」でFTPサーバーのURIを指定し、「System.Net.WebRequest.Create(u)」でFtpWebRequestクラスを使用してFTPのリクエストを作成します。作成したリクエストftpReqを使ってFTPサーバーへの接続に必要な情報(URI、認証情報、転送モードなど)を設定し、GetRequestStreamメソッドを使用してアップロード用のストリームを取得します。その後、ファイルをバイト単位で読み込み、FTPサーバーに書き込みます。最後にGetResponseメソッドを使用してFTPサーバーからの応答を取得し、取得したステータスコードと状況をコンソール画面に表示します。

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

Copyright © ARGO Corporation. All Rights Reserved.