スクロールとズーム
概要
IC Imaging Controlにおけるスクロールとズーム機能の使用について説明します。
サンプルプログラム
Software | IC Imaging Control 3.5, Visual Studio™ 2019 |
---|---|
サンプル(C#) | scroll_and_zoom_cs_3.5.zip |
サンプル(VB.NET) | scroll_and_zoom_vb_3.5.zip |
実行結果
Visual Studioのプログラム上ではすでにボタンの設置や関数は定義済ですので、IC Imaging Contorl3.5をインストールされていれば、実行ボタンだけですぐにデバッグで動作確認することができます。
画面にあるそれぞれのボタンなどのコントローラの機能は下記の通りです。
[Start]ボタン | ライブストリーミングを開始します。 |
---|---|
[Stop]ボタン | ライブストリーミングを停止します。 |
[Device]ボタン | デバイスダイアログを表示します。 |
[Setting]ボタン | プロパティダイアログを表示します。 |
[Default Window Size]チェックボックス | 取得した画像のデフォルトのサイズに設定・解除します。 |
[Scrollbars]チェックボックス | スクロールバーを表示します。 |
初期設定
private void Form1_Load( object sender, EventArgs e )
{
cmdStart.Enabled = false;
cmdStop.Enabled = false;
cmdImageSettings.Enabled = false;
chkDisplayDefault.Enabled = false;
chkScrollbarsEnable.Enabled = false;
sldZoom.Enabled = false;
lblZoom.Enabled = false;
//Ctrlキーとマウスホイール操作でズーム、ズームアウトのイベントハンドラ
this.icImagingControl1.MouseWheel+= new System.Windows.Forms.MouseEventHandler(this.icImagingControl1_MouseWheel);
}
※プログラムなし
フォームロードしたときに各ボタン、スライダー等を無効化し、Ctrlキーとマウスホイール操作でズーム、ズームアウトのイベントハンドラの処理が使えるように宣言しています。
[Device]ボタンクリックした時の処理
private void cmdDevice_Click(object sender, EventArgs e)
{
if (icImagingControl1.DeviceValid)
{
if (icImagingControl1.LiveVideoRunning)
{
icImagingControl1.LiveStop();
}
}
//デバイスダイアログを表示
if (!icImagingControl1.LoadShowSaveDeviceState("lastSelectedDeviceState.xml"))
{
MessageBox.Show("No device was selected.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Close();
return;
}
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 propertyを使ってズーム機能を有効化/無効化
sldZoom.Enabled = !icImagingControl1.LiveDisplayDefault;
sldZoom.Value = (int)(icImagingControl1.LiveDisplayZoomFactor * 10);
lblZoomPercent.Text = (sldZoom.Value * 10).ToString() + "%";
}
}
Private Sub cmdDevice_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDevice.Click
If IcImagingControl1.DeviceValid Then
If IcImagingControl1.LiveVideoRunning Then
IcImagingControl1.LiveStop()
End If
End If
IcImagingControl1.ShowDeviceSettingsDialog()
If IcImagingControl1.DeviceValid Then
cmdStart.Enabled = True
cmdStop.Enabled = True
cmdImageSettings.Enabled = True
chkDisplayDefault.Enabled = True
chkScrollbarsEnable.Enabled = True
sldZoom.Enabled = True
lblZoom.Enabled = True
IcImagingControl1.LiveDisplayDefault = False
chkDisplayDefault.Checked = False
IcImagingControl1.LiveDisplaySize = IcImagingControl1.LiveDisplayOutputSize
chkScrollbarsEnable.Checked = IcImagingControl1.ScrollbarsEnabled
' LiveDisplayDefault propertyを使ってズーム機能を有効化/無効化
sldZoom.Enabled = Not IcImagingControl1.LiveDisplayDefault
sldZoom.Value = IcImagingControl1.LiveDisplayZoomFactor * 10
lblZoomPercent.Text = Str(sldZoom.Value * 10) + "%"
End If
End Sub
デバイスダイアログでデバイスを選択後、各ボタンやスライダーなどのコントローラを有効化/無効化します。
その後現在のLiveDisplayZoomFactorプロパティでズーム比を取得し、sldZoomスライダーやlblZoomPercentテキストに反映する。
[Start]ボタンをクリックした時の処理
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;
// 画像の周辺を赤い線で囲い左上にScroll and Zoom Sampleの文字を追加します。
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.DrawText( Color.FromArgb( 255, 0, 0 ), 5, 5, "Scroll and Zoom Sample" );
}
}
Private Sub cmdStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStart.Click
With IcImagingControl1
If .DeviceValid Then
.LiveStart()
Dim ovb As Object = IcImagingControl1.OverlayBitmapAtPath(TIS.Imaging.PathPositions.Device)
'画像の周辺を赤い線で囲い左上にScroll and Zoom Sampleの文字を追加します。
ovb.Enable = True
ovb.DrawLine(Color.FromArgb(255, 0, 0), 0, 0, .LiveDisplayOutputSize.Width - 1, 0)
ovb.DrawLine(Color.FromArgb(255, 0, 0), .LiveDisplayOutputSize.Width - 1, 0, .LiveDisplayOutputSize.Width - 1, .LiveDisplayOutputSize.Height - 1)
ovb.DrawLine(Color.FromArgb(255, 0, 0), .LiveDisplayOutputSize.Width - 1, .LiveDisplayOutputSize.Height - 1, 0, .LiveDisplayOutputSize.Height - 1)
ovb.DrawLine(Color.FromArgb(255, 0, 0), 0, 0, 0, .LiveDisplayOutputSize.Height)
ovb.DrawText(Color.FromArgb(255, 0, 0), 5, 5, "Scroll and Zoom Sample")
End If
End With
End Sub
LiveStartメソッドでライブストリーミングを開始し、OverlayBitmapオブジェクトを使ってライブ画像上に図やテキストを描画します。画像の周辺を囲むようにDrawLineメソッドで赤い線を描き、画像の左上に"Scroll and Zoom Sample"をオーバーレイ表示します。
[Stop]ボタンをクリックした時の処理
private void cmdStop_Click(object sender, EventArgs e)
{
icImagingControl1.LiveStop();
}
Private Sub cmdStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStop.Click
IcImagingControl1.LiveStop()
End Sub
ライブストリーミングを停止する処理です。ICImagingControl.LiveStopメソッドだけで処理を完結できます。
[Setting]ボタンをクリックした時の処理
private void cmdImageSettings_Click(object sender, EventArgs e)
{
icImagingControl1.ShowPropertyDialog();
}
Private Sub cmdImageSettings_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdImageSettings.Click
IcImagingControl1.ShowPropertyDialog()
End Sub
ShowPropertyDialogメソッドを使って、現在接続中のデバイスの全プロパティを調整するためのダイアログを表示します。
[Default Window Size]チェックボックスをクリックした時の処理
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;
}
Private Sub chkDisplayDefault_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkDisplayDefault.CheckedChanged
IcImagingControl1.LiveDisplayDefault = chkDisplayDefault.Checked
sldZoom.Value = IcImagingControl1.LiveDisplayZoomFactor * 10
lblZoomPercent.Text = Str(sldZoom.Value * 10) + "%"
sldZoom.Enabled = Not IcImagingControl1.LiveDisplayDefault
End Sub
取得した画像のデフォルトのサイズに設定・解除をする機能です。
LiveDisplayZoomFactorでIC Imaging Controlで表示しているズーム比を取得し、sldZoomスライダーとlblZoomPercentテキストに反映させます。
[Scrollbars]チェックボックスをクリックした時の処理
private void chkScrollbarsEnable_CheckedChanged(object sender, EventArgs e)
{
icImagingControl1.ScrollbarsEnabled = chkScrollbarsEnable.Checked;
}
Private Sub chkScrollbarsEnable_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkScrollbarsEnable.CheckedChanged
IcImagingControl1.ScrollbarsEnabled = chkScrollbarsEnable.Checked
End Sub
IC Imaging Controlのウィンドウがライブ画像ウィンドウよりも小さい場合、ScrollbarsEnabled プロパティをTrueにするだけでスクロールバーが表示されます。
マウスホイールで操作した時の処理
//Ctrlキーとマウスホイール操作した時の処理
private void icImagingControl1_MouseWheel(object sender, MouseEventArgs e)
{
//Ctrl キーが押された状態であるか確認
if ((Control.ModifierKeys & Keys.Control) == Keys.Control)
{
if(icImagingControl1.LiveDisplayDefault == false) {
int value = (e.Delta * SystemInformation.MouseWheelScrollLines / 120) + sldZoom.Value;
if (sldZoom.Maximum >= value && sldZoom.Minimum <= value)
{
sldZoom.Value = value;
icImagingControl1.LiveDisplayZoomFactor = (float)sldZoom.Value / 10.0f;
lblZoomPercent.Text = (sldZoom.Value * 10).ToString() + "%";
}
}
}
}
Ctrlキーとマウスホイールを使ったときに処理するイベントハンドラとなります。
icImagingControl1のコントローラにフォーカスがあった状態でCtrlキーを押しながらマウスホイールを動かかしたときに処理が変わります。
LiveDisplayZoomFactorプロパティをつかってフレームのズーム比を設定します。
下記のAPIリファレンスマニュアルにもその他関数などの説明があります。
プログラマーズガイド:
スクロールとズーム
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル