パタン登録オーバレイクラス

Namespace: FVIL.GDI
Assembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)

Syntax

C#
[SerializableAttribute]
public sealed class CFviDrawPatternRegist : CFviOverlay
Visual Basic
<SerializableAttribute>
Public NotInheritable Class CFviDrawPatternRegist
	Inherits CFviOverlay

Remarks

パタン画像を生成する際に指定する登録位置の矩形(RegistRect)と基準点(CenterMark)を マウス操作で編集する為のオーバレイです。 実際の パタン生成処理 は、上位側から別途行う必要があります。



初期値と範囲:
プロパティ初期値範囲備考
Activefalsefalse/true マウス操作活性化属性です。 登録位置の矩形と基準点の編集を行う際は true です。 表示のみ行う際は false です。
Enablefalsefalse/true 可視属性です。 登録位置の矩形と基準点の表示または編集を行う際に、上位側のアプリケーションで true に設定してください。
Scalingtruetrue のみ 伸縮属性です。 登録位置の矩形と基準点を表す図形を画像座標で描画しています。 false にする事は想定していません。
ScalingModeFVIL.GDI.ScalingMode.CenterCenter のみ サブピクセル計算に影響します。 変更するとアクセス違反を起こす可能性がありますので変更しないでください。
RegistRect10,10 - 100,100 0≦X<画像幅
0≦Y<画像高さ
St<Ed
登録位置の矩形を表す図形です。
CenterMark10,10 0≦X<画像幅
0≦Y<画像高さ
基準点を表す図形です。
CenterMarkPositionManual Manual: 手動
Center: 登録位置の矩形の中心
TopLeft: 登録位置の矩形の左上
基準点の位置の決定方法を示す値です。

このオーバレイで描画される図形は、 下記のように Figures 配列に格納されていますが、 将来的に配列の内容は変更される可能性があります。 この初期化内容に依存したプログラムを作らないようにしてください。 また、この配列をクリアされることを想定していません。

配列の初期化内容:
プロパティ初期値範囲備考
Figures[0]CFviGdiRectangle※インスタンスの差し替えは想定していません。登録位置の矩形を表す図形です。
Figures[1]CFviGdiPoint※インスタンスの差し替えは想定していません。基準点を表す図形です。

Examples

スクリーンショット:



フォームに貼り付けた CFviImageView を介してパタン登録を行う例を示します。
上図左側の PropertyGrid コントロールには、 CFviImageViewDisplay プロパティから取得した CFviDisplay クラスのインスタンスを表示していますが この処理は任意です。



パタン登録オーバレイ表示切替:
下記サンプルコードの toolRegist_Click 関数内で、このオーバレイの表示切り替えを行っています。 上図の緑の矩形が登録位置の矩形(RegistRect)を表し、 赤い十字の中心が基準点(CenterMark)を示します。 Active プロパティを true に設定すると、 これらをマウス操作で移動やサイズ変更を行えます。



パタン生成:
下記サンプルコードの toolMakePattern_Click 関数内で、 登録位置の矩形(RegistRect) と 基準点(CenterMark) を取得して元画像からパタン画像を生成しています。




ソースコード:
C# Copy imageCopy
// $Revision: 1.2 $

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace User.SampleCode.GDI
{
    public partial class PatternRegistForm : Form
    {
        /// <summary>
        /// コンストラクタ.
        /// </summary>
        public PatternRegistForm()
        {
            InitializeComponent();
        }

        /// <summary>
        /// フォームロード時の初期化処理.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnLoad(object sender, EventArgs e)
        {
            // (任意) ImageView.Display プロパティの表示/編集用.
            propertyGrid1.SelectedObject = ImageView.Display;

            // 表示対象画像の読み込み.
            FVIL.Data.CFviImage image = new FVIL.Data.CFviImage(
                Path.Combine(Program.DataDir, "fvc06_UC8_L.png")
                );

            // 表示対象画像の設定.
            ImageView.Image = image;
        }

        /// <summary>
        /// パタン登録オーバレイ表示切替.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolRegist_Click(object sender, EventArgs e)
        {
            ImageView.Display.OverlayPatternRegist.Active = true;
            ImageView.Refresh();
        }

        /// <summary>
        /// パタン生成.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolMakePattern_Click(object sender, EventArgs e)
        {
            // 元画像.
            FVIL.Data.CFviImage image = ImageView.Image;

            // 登録位置の矩形.
            FVIL.Data.CFviRectangle rect =
                ImageView.Display.OverlayPatternRegist.RegistRect.ToCFviRectangle();

            // 基準点.
            FVIL.Data.CFviPoint mark =
                ImageView.Display.OverlayPatternRegist.CenterMark.ToCFviPoint();

            // パタン生成.
            FVIL.Data.CFviPattern pattern = new FVIL.Data.CFviPattern(image, rect, mark);
            pattern.Save(Path.Combine(Program.ResultDir, "PatternRegist.pat"));
        }

        /// <summary>
        /// (任意) 画像ビューの表示更新時の処理.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ImageView_Paint(object sender, PaintEventArgs e)
        {
            // プロパティグリッドを更新します.
            propertyGrid1.Refresh();
        }

        /// <summary>
        /// (任意) プロパティグリッドの値変更時の処理.
        /// </summary>
        /// <param name="s"></param>
        /// <param name="e"></param>
        private void propertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
        {
            // 画像ビューを表示更新します.
            ImageView.Refresh();
        }
    }
}


Visual Basic Copy imageCopy
' $Revision: 1.1 $

Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports System.IO

Namespace SampleCode.GDI
    Public Partial Class PatternRegistForm
        Inherits Form
        ''' <summary>
        ''' コンストラクタ.
        ''' </summary>
        Public Sub New()
            InitializeComponent()
        End Sub

        ''' <summary>
        ''' フォームロード時の初期化処理.
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Overloads Sub OnLoad(sender As Object, e As EventArgs)
            ' (任意) ImageView.Display プロパティの表示/編集用.
            propertyGrid1.SelectedObject = ImageView.Display

            ' 表示対象画像の読み込み.
            Dim image As New FVIL.Data.CFviImage(Path.Combine(Program.DataDir, "fvc06_UC8_L.png"))

            ' 表示対象画像の設定.
            ImageView.Image = image
        End Sub

        ''' <summary>
        ''' パタン登録オーバレイ表示切替.
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub toolRegist_Click(sender As Object, e As EventArgs)
            ImageView.Display.OverlayPatternRegist.Active = True
            ImageView.Refresh()
        End Sub

        ''' <summary>
        ''' パタン生成.
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub toolMakePattern_Click(sender As Object, e As EventArgs)
            ' 元画像.
            Dim image As FVIL.Data.CFviImage = ImageView.Image

            ' 登録位置の矩形.
            Dim rect As FVIL.Data.CFviRectangle = ImageView.Display.OverlayPatternRegist.RegistRect.ToCFviRectangle()

            ' 基準点.
            Dim mark As FVIL.Data.CFviPoint = ImageView.Display.OverlayPatternRegist.CenterMark.ToCFviPoint()

            ' パタン生成.
            Dim pattern As New FVIL.Data.CFviPattern(image, rect, mark)
            pattern.Save(Path.Combine(Program.ResultDir, "PatternRegist.pat"))
        End Sub

        ''' <summary>
        ''' (任意) 画像ビューの表示更新時の処理.
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub ImageView_Paint(sender As Object, e As PaintEventArgs)
            ' プロパティグリッドを更新します.
            propertyGrid1.Refresh()
        End Sub

        ''' <summary>
        ''' (任意) プロパティグリッドの値変更時の処理.
        ''' </summary>
        ''' <param name="s"></param>
        ''' <param name="e"></param>
        Private Sub propertyGrid1_PropertyValueChanged(s As Object, e As PropertyValueChangedEventArgs)
            ' 画像ビューを表示更新します.
            ImageView.Refresh()
        End Sub
    End Class
End Namespace

Inheritance Hierarchy

System..::..Object
FVIL..::..CFviObject
FVIL.GDI..::..CFviOverlay
FVIL.GDI..::..CFviDrawPatternRegist

See Also