スクロールとズーム

IC Imaging Control におけるスクロールとズーム機能の使用について説明します。
今回のサンプルプログラムのC#用のソースコードはMy Documents/IC Imaging Control 3.5内の以下のディレクトリに格納されています。


samples\C# *\Scroll And Zoom

プロジェクトの新規作成


新しいプロジェクトを作成し、IC imaging Controlをフォームに追加してください。プログラムを実行する前に、 はじめに: Visual Studio .NETプログラマーズガイド>Visual Studioでスタートにあるように映像デバイスの選択、入力方式、ビデオフォーマットを選択してください。
もしくはデバイスを選択せずにプログラムを実行してください。その際はIC Imaging Controlによってデバイス選択のダイアログが出現します。選択をせずにダイアログを閉じた場合、プログラムはエラーメッセージを表示し、終了します。

フォームにボタンを2つ追加し、CaptionプロパティをStart, Stopとします。そしてそれぞれにcmdStartcmdStopと名前を付けます。
ICImagingControl.LiveStartクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveStart Method メソッドの呼び出しを追加してください。さらに、画像の周囲の4辺を視覚化するように長方形を赤い線で描いてください。

[C#]
private void cmdStart_Click( object sender, EventArgs e )
{
    if( icImagingControl1.DeviceValid )
    {
        icImagingControl1.LiveStart();
        var ovb = icImagingControl1.OverlayBitmapAtPath[TIS.Imaging.PathPositions.Device];
        int width = icImagingControl1.VideoFormatCurrent.Width;
        int height = icImagingControl1.VideoFormatCurrent.Height;
        // 画像全体の周囲に長方形を描き、周囲が見えるようにします。
        ovb.Enable = true;
        ovb.DrawLine( Color.FromArgb( 255, 0, 0 ), 0, 0, width - 1, 0 );
        ovb.DrawLine( Color.FromArgb( 255, 0, 0 ), width -1, 0, width - 1, height -1 );
        ovb.DrawLine( Color.FromArgb( 255, 0, 0 ), width -1, height -1, 0, height -1 );
        ovb.DrawLine( Color.FromArgb( 255, 0, 0 ), 0, 0, 0, height );
        ovb.DrawLine( Color.FromArgb( 255, 0, 0 ), 5, 5, "Scroll and Zoom Sample" );
    }
}

ICImagingControl.LiveStopクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveStop Method への処理を追加します。

[C#]
private void cmdStop_Click( object sender, EventArgs e )
{
     icImagingControl1.LiveStop();
}

今度はチェックボックスを二つ追加し、CaptionプロパティをDefault window sizeScrollbars、名前をchkDisplayDefaulchkScrollbarsEnableとします。 これらは LiveDisplayDefaultクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveDisplayDefault PropertyScrollBarsEnabledクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.ScrollBarsEnabled Propertyプロパティの設定に使用します。
またフォームにスライダーコントロールを追加しsldZoomと名前を付けます。これはLiveDisplayZoomFactorクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveDisplayZoomFactor Propertyプロパティの設定に使用します。プロパティウィンドウのスライダーでは範囲を1から30に設定します。 そのスライダーの値はLiveDisplayZoomFactorクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveDisplayZoomFactor Propertyプロパティに渡される前に10で除算されます。これでズーム可能範囲が10%から300%となります。
フォームにボタンを2つ追加し、CaptionプロパティをDeviceSettings、名前をcmdDevicecmdImageSettingsとします。 ボタンハンドラ関数を追加します。

[C#]
private void cmdImageSettings_Click( object sender, EventArgs e )
{
     icImagingControl1.ShowPropertyDialog();
}

チェックボックスとスライダーコントロールのセットアップのためにcmdDevice_Clickプロシージャの機能を強化します。

[C#]
private void cmdDevice_Click( object sender, EventArgs e )
{
     if( icImagingControl1.DeviceValid )
     {
         if( icImagingControl1.LiveVideoRunning )
         {
             icImagingControl1.LiveStop();
         }
     }
     icImagingControl1.ShowDeviceSettingsDialog();
     if( icImagingControl1.DeviceValid )
     {
         cmdStart.Enabled = true;
         cmdStop.Enabled = true;
         cmdImageSettings.Enabled = true;
         chkDisplayDefault.Enabled = true;
         chkScrollbarsEnable.Enabled = true;
         sldZoom.Enabled = true;
         lblZoom.Enabled = true;
         chkDisplayDefault.Checked = false;
         icImagingControl1.LiveDisplayDefault = false;
         icImagingControl1.LiveDisplaySize = icImagingControl1.VideoFormatCurrent.Size;
         chkScrollbarsEnable.Checked = icImagingControl1.ScrollbarsEnabled;
         // LiveDisplayDefault プロパティの状態によって、ズーム用のスライダーを有効化または無効化する
         sldZoom.Enabled = !icImagingControl1.LiveDisplayDefault;
         sldZoom.Value = (int)(icImagingControl1.LiveDisplayZoomFactor * 10);
         lblZoomPercent.Text = (sldZoom.Value * 10).ToString() + "%";
     }
}

チェックボックス chkDisplayDefaultLiveDisplayDefaultクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveDisplayDefault Propertyプロパティの切換えに使います。クリック時の関数を追加しましょう。この関数では現在のchkDisplayDefaultチェックボックスの値を取得して、LiveDisplayDefaultクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveDisplayDefault Propertyが設定されます。LiveDisplayDefaultクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveDisplayDefault Propertyプロパティの設定がLiveDisplayZoomFactorクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveDisplayZoomFactor Propertyプロパティの値を変更します。したがって、sldZoom スライダーコントロールの値はLiveDisplayZoomFactorクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveDisplayZoomFactor Propertyプロパティ値にアップデートされます。また、LiveDisplayDefaultクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveDisplayDefault PropertyプロパティがTrueを返す場合には、スライダーコントロールを無効にします。もし LiveDisplayDefaultクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveDisplayDefault PropertyプロパティがFalseす場合は、ズームの設定が可能となるためスライダーコントロールを有効にします。

[C#]
private void chkDisplayDefault_CheckedChanged( object sender, EventArgs e )
{
     icImagingControl1.LiveDisplayDefault = chkDisplayDefault.Checked;
     sldZoom.Value = (int)(icImagingControl1.LiveDisplayZoomFactor * 10.0f);
     lblZoomPercent.Text = (sldZoom.Value * 10).ToString() + "%";
     sldZoom.Enabled = !chkDisplayDefault.Checked;
}

チェックボックスchkScrollBarsEnableは スクロールバーの有効化、無効化の切換えに使われます。この関数では現在のchkScrollbarsEnableチェックボックスの値が取得して、ScrollBarsEnabledクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.ScrollBarsEnabled Propertyに設定されます。これによってウィンドウ内のスクロールバーの表示、非表示を切り換えることができます。スクロールバーの無効化はライブ画面ウィンドウのポジションを0/0にリセットします。

[C#]
private void chkScrollbarsEnable_CheckedChanged( object sender, EventArgs e )
{
     icImagingControl1.ScrollbarsEnabled = chkScrollbarsEnable.Checked;
}

スライダーsldZoomはライブ画像におけるズーム の設定に使用されます。sldZoom_Scroll関数をフォームのソースコードに追加し、スライダーコントロールの変化に対応するようにします。スライダーの値の範囲は1から30となっているので、値はLiveDisplayZoomFactorクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveDisplayZoomFactor Propertyに渡される前に10で割る必要があります。

[C#]
private void sldZoom_Scroll( object sender, EventArgs e )
{
     if (icImagingControl1.LiveDisplayDefault == false)
     {
         icImagingControl1.LiveDisplayZoomFactor = (float)sldZoom.Value / 10.0f;
         lblZoomPercent.Text = (sldZoom.Value * 10).ToString() + "%";
     }
     else
     {
         MessageBox.Show( "The zoom factor can only be set" + "\n" + "if LiveDisplayDefault returns False!");
     }
}

プログラムを実行しましょう。ボタンをクリックしてライブ画像のスタート、ストップができます。LiveDisplayDefaultクラスライブラリリファレンス>クラス>ICImagingControl>ICImagingControl.LiveDisplayDefault Propertyプロパティを有効化、無効化してそれに対するIC Imaging Controlの反応を見ることも可能です。またスクロールバーの表示、非表示やライブ画像をズームすることもできます。

スクロールバーの値に変化があると、Windows FormsによるScrollableControl.Scrollイベントがコールされます。
フォームに新しいラベルを追加しlblScrollPositionと名前を付けます。この新しいラベルは現在のスクロール位置を表示するのに使われます。さらにScrollableControl.Scrollイベント関数をフォームのソースコードに追加してください。

[C#]
private void icImagingControl1_Scroll( object sender, ScrollEventArgs e )
{
     Point p = icImagingControl1.AutoScrollPosition;
     lblScrollPosition.Text = string.Format( "{0}/{1}", p.X, p.Y );
}

これでスクロールバーを使ってライブ画像を動かすたびに現在のスクロール位置がラベルに表示されるようになります。