十字マークのオーバーレイ
概要
イメージデータをオーバーレイ表示する方法を示しています。
サンプルプログラム
Software | IC Imaging Control 3.5, Visual Studio™ 2019 |
---|---|
サンプル(C#) | movable_crosshairs_cs_3.5.zip |
サンプルツールの外観
private TIS.Imaging.ICImagingControl icImagingControl1;
private TIS.Imaging.OverlayBitmap _ob;
グローバル変数としてicImagingControl1とOverlayBitmapクラスの_obを宣言します。OverlayBitmapオブジェクトはライブ画像上に図やテキストを描画するためのオーバーレイデータ、メソッド、プロパティを含んでいます。
bool bDragging = false;
bool ShiftPressed = false;
private void Form1_Load(object sender, System.EventArgs e)
{
icImagingControl1.ShowDeviceSettingsDialog();
if( !icImagingControl1.DeviceValid )
{
Close();
return;
}
_ob = icImagingControl1.OverlayBitmapAtPath[TIS.Imaging.PathPositions.Device];
_ob.Enable = true;
_ob.ColorMode = TIS.Imaging.OverlayColorModes.Color;
icImagingControl1.LiveStart();
}
ライブ表示上にオーバーレイで十字マークを描き、その座標も表示します。
まず、.ShowDeviceSettingsDialogでデバイス選択ダイアログを呼び出し、使用するデバイスを選択します。Form_Load()の最後には、.LiveStartを使ってライブ表示を開始しています。準備として、2つのステップを追加しています。
まず、オーバーレイモードを有効にし(.OverlayBitmap.Enable)、ドラッグの状態を示す変数をFalseにします。
この変数はマウスボタンが押されている事を示すものとして使用します。
private void DrawCrosshairs(int x, int y)
{
_ob.DrawLine(Color.Red, x, y - 10, x, y + 10);
_ob.DrawLine(Color.Red, x - 10, y, x + 10, y);
_ob.DrawText(Color.Blue, x + 3, y + 2, x.ToString() + "," + y.ToString());
}
十字マークは2本の赤いラインで表現します。また、座標をテキストとして十字マークの右側に表示します。.OverlayBitmap.DrawLineにてラインを描き、.OverlayBitmap.DrawTextでテキストを表示します。
private void icImagingControl1_MouseMove(object sender, MouseEventArgs e)
{
if( bDragging )
{
if (!ShiftPressed)
{
_ob.Fill(_ob.DropOutColor );
}
DrawCrosshairs( e.X, e.Y );
}
}
十字マークの位置を決定するのにマウスの移動とボタンの状態の2つの要因があります。以下3つのイベントハンドラーが必要な処理を行います。ユーザーがイメージ上をクリックした時、プログラムは古い十字マークを削除します。これには透明色.DropOutColorを使います。その後、マウスポジションに新しい十字マークと座標を描きます。
private void icImagingControl1_MouseMove(object sender, MouseEventArgs e)
{
if( bDragging )
{
if (!ShiftPressed)
{
_ob.Fill(_ob.DropOutColor );
}
DrawCrosshairs( e.X, e.Y );
}
}
ユーザーがマウスボタンをクリックしたままマウスを動かすと、プログラムは透明色.DropOutColorで古い十字マークを塗りつぶします。その後、新しい十字マークと座標を描きます。
private void icImagingControl1_MouseUp(object sender, MouseEventArgs e)
{
bDragging = false;
}
マウスボタンを解放すると、ドラッグ状態を示す変数をFalseに設定します。
private void icImagingControl1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.Shift)
{
ShiftPressed = true;
}
}
private void icImagingControl1_KeyUp(object sender, KeyEventArgs e)
{
ShiftPressed = false;
}
boolメンバーである変数ShiftPressedはICImagingControlのkey eventハンドラーの中でセットします。