画像の表示倍率に合わせて図形も伸縮するオーバレイの生成方法を示します。
【プレビュー】
- 1. オーバレイへのハンドル
Form1 に CFviOverlay のハンドルを保管するメンバーフィールドを追加します。 後述のオーバレイの生成で CFviDisplay に追加したオーバレイを保管するために使用します。 ここでは、m_overlay1 というインスタンス名で作成しています。
- Form1.cs
:
private FVIL.Data.CFviImage m_image = new FVIL.Data.CFviImage();
private FVIL.GDI.CFviOverlay m_overlay1 = null;
- 2. オーバレイの生成
下記のように CFviOverlay のハンドルを Overlays に追加し、Scaling プロパティで伸縮属性を true に設定します。 ここでは、overlay1ToolStripMenuItem_Click イベントハンドラ内に処理を記述しています。 メニュー項目の作成やイベントハンドラの作成方法については省略します。
- Form1.cs
private void overlay1ToolStripMenuItem_Click(object sender, EventArgs e)
{
if( true == cFviImageView1.Display.FindOverlay(m_overlay1) )
{
System.Windows.Forms.MessageBox.Show("既に生成されています.");
return;
}
m_overlay1 = new FVIL.GDI.CFviOverlay();
cFviImageView1.Display.Overlays.Add( m_overlay1 );
m_overlay1.Enable = true;
m_overlay1.Scaling = true;
m_overlay1.ScalingMode = FVIL.GDI.ScalingMode.Center;
cFviImageView1.Refresh();
}
- 3-1. 図形の描画 (矩形)
前述で作成したオーバレイに図形を描画します。 ここでは傾きのある青い矩形の枠を描画しています。
FVIL.GDI.CFviGdiRectangle rect = new FVIL.GDI.CFviGdiRectangle();
m_overlay1.Figures.Add( rect );
rect.CopyFrom( new FVIL.Data.CFviRectangle(0,0,134,136) );
rect.Position = new FVIL.Data.CFviPoint(123,23);
rect.Angle = new FVIL.Data.CFviAngle( -31.0 );
rect.Pen.Color = System.Drawing.Color.FromArgb(0x00,0x00,0xFF);
- 3-2. 図形の描画 (画像)
次に画像を描画します。 ここでは、前述の矩形枠の半透明塗り潰しとして利用しています。
FVIL.GDI.CFviGdiImage gimg = new FVIL.GDI.CFviGdiImage();
m_overlay1.Figures.Add( gimg );
gimg.SetSize(1,1,32);
gimg.Position = new FVIL.Data.CFviPoint(123,23);
gimg.Angle = new FVIL.Data.CFviAngle(-31.0);
gimg.SetPixelRGB(0,0, System.Drawing.Color.FromArgb(0x00,0x00,0xFF));
gimg.Alpha = 0x7F;
gimg.StretchHorzSize = 134;
gimg.StretchVertSize = 136;