LEADTOOLS ナレッジベース

[Document Imagingファミリー][RasterImageViewer] 自動アノテーションで消しゴム機能はありますか?

LEADTOOLSではペイントツールにあるような消しゴムの機能はありません。
実現する方法としては、自動アノテーションのフリーハンドオブジェクトを白色で描画後、画像上にアノテーションを描画(反映)させる方法があります。
------------------------------------------------------------

  1. アノテーションオブジェクトの描画では、1つの描画ごとに選択ポインタに切り替えられます。描画ごとに選択ポインタに切り替わらないように、AnnAutomationManager.CurrentObjectIdChangedイベント、AnnAutomationManager.CurrentObjectIDプロパティ、RasterImageViewer.MouseMoveイベントを使用して、フリーハンドオブジェクトを描画できるようにします。
  2. 選択ポインタに切り替えたタイミングで、Realizeメソッドによりアノテーションオブジェクトを画像上に描画します。
    ※Realizeメソッドを実行すると取り消しはできませんので、あらかじめご注意ください。
  3. その後、Deleteメソッドにより描画したアノテーションオブジェクトを削除します。

 ------------------------------------------------------------

以下のサンプルコードは、標準のアノテーションツールバーを非表示にし、toolStripのトグルボタンを使用して、上記方法を実現するサンプルです。


サンプルコード(VB.NET)

' プログラムの最初にImportsを追加します。
Imports Leadtools
Imports Leadtools.Annotations
Imports Leadtools.Codecs

Public Class Form1

    Private annAutomationManager As AnnAutomationManager
    Private currentTool As Integer
    Private annobjClicked As Boolean

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
   
        ' RasterCodecsオブジェクトを初期化します。
        Dim codecs As RasterCodecs = New RasterCodecs

        ' メイン画像をビューワにロードします。
        RasterImageViewer1.Image = codecs.Load("image1.jpg")

        If Not IsNothing(RasterImageViewer1.Image) Then

            ' AutomationManagerを作成して設定します。
            annAutomationManager = New AnnAutomationManager

            ' デフォルト(すべて)の自動オブジェクトを作成します。
            annAutomationManager.CreateDefaultObjects()

            ' ツールバーを作成してフォームに追加します。
            annAutomationManager.CreateToolBar()
            Controls.Add(annAutomationManager.ToolBar)

            ' Automationを設定します(これにより、コンテナも作成されます)。
            Dim automation As AnnAutomation = New AnnAutomation(annAutomationManager, RasterImageViewer1)

            ' このAutomationをアクティブなAutomationに設定します。
            automation.Active = True
           
            ' 標準のツールバーを非表示にします。
            annAutomationManager.ToolBar.Visible = False
           
            ' アノテーションオブジェクトのデフォルトプロパティを設定します。
            ' 直線自動オブジェクトのペンの色と幅を設定します。

            Dim annFree As AnnPolylineObject
            annFree = annAutomationManager.Objects(System.Math.Abs(AnnAutomationManager.FreehandObjectId)).Object
            annFree.Pen = New AnnPen(Color.White, New AnnLength(10, AnnUnit.Pixel))
           
            ' イベントを追加します。
            AddHandler annAutomationManager.CurrentObjectIdChanged, AddressOf annAutomationManager_CurrentObjectIdChanged
            AddHandler RasterImageViewer1.MouseMove, AddressOf RasterImageViewer1_MouseMove

            ' toolStripのボタンをトグルボタンに設定
            ToolStripButton1.CheckOnClick = True

        End If
    End Sub

    Private Sub annAutomationManager_CurrentObjectIdChanged(ByVal sender As Object, ByVal e As System.EventArgs)

        If annobjClicked = True Then
            currentTool = annAutomationManager.CurrentObjectId
            annobjClicked = False
        End If

    End Sub

    Private Sub RasterImageViewer1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles RasterImageViewer1.MouseMove

        If annAutomationManager.CurrentObjectId <> currentTool Then
            annAutomationManager.CurrentObjectId = currentTool
        End If

    End Sub

    Private Sub ToolStripButton1_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles ToolStripButton1.CheckedChanged

        If ToolStripButton1.Checked = True Then

                annobjClicked = True
                ' フリーハンド
                annAutomationManager.CurrentObjectId = AnnAutomationManager.FreehandObjectId

        ElseIf ToolStripButton1.Checked = False Then

                annobjClicked = True
                ' 選択ポインタ
                annAutomationManager.CurrentObjectId = AnnAutomationManager.SelectObjectId

                ' アノテーションを画像上に描画
                annAutomationManager.Automations(0).Realize()

                ' 全てのアノテーションオブジェクトを削除
                annAutomationManager.Automations(0).SelectAll()
                annAutomationManager.Automations(0).Delete()

        End If

    End Sub
End Class

サンプルコード(C#)

// プログラムの最初にusingを追加します。
using Leadtools;
using Leadtools.Annotations;
using Leadtools.Codecs;
・・・
    public partial class Form1 : Form
    {
        ・・・
        private AnnAutomationManager annAutomationManager;
        private int currentTool;
        private bool annobjClicked;

        private void Form1_Load(object sender, EventArgs e)
        {
            // RasterCodecsオブジェクトを初期化します。
            RasterCodecs codecs = new RasterCodecs();

            // メイン画像をビューワにロードします。
            rasterImageViewer1.Image = codecs.Load(@"image1.jpg");

            if (rasterImageViewer1.Image != null)
            {
                // AutomationManagerを作成して設定します。
                annAutomationManager = new AnnAutomationManager();

                // デフォルト(すべて)の自動オブジェクトを作成します。
                annAutomationManager.CreateDefaultObjects();

                // ツールバーを作成してフォームに追加します。
                annAutomationManager.CreateToolBar();
                Controls.Add(annAutomationManager.ToolBar);

                // Automationを設定します(これにより、コンテナも作成されます)。
                AnnAutomation automation = new AnnAutomation(annAutomationManager, rasterImageViewer1);

                // このAutomationをアクティブなAutomationに設定します。
                automation.Active = true;

                // 標準のツールバーを非表示にします。
                annAutomationManager.ToolBar.Visible = false;

                // アノテーションオブジェクトのデフォルトプロパティを設定します。
                // 直線自動オブジェクトのペンの色と幅を設定します。
                AnnPolylineObject annFree;
                annFree = (AnnPolylineObject)annAutomationManager.Objects[System.Math.Abs(AnnAutomationManager.FreehandObjectId)].Object;
                annFree.Pen = new AnnPen(Color.White, new AnnLength(10, AnnUnit.Pixel));

                // イベントを追加します。
                annAutomationManager.CurrentObjectIdChanged += new EventHandler(annAutomationManager_CurrentObjectIdChanged);
                rasterImageViewer1.MouseMove += new MouseEventHandler(rasterImageViewer1_MouseMove);

                // toolStripのボタンをトグルボタンに設定
                toolStripButton1.CheckOnClick = true;

            }
        }

        private void annAutomationManager_CurrentObjectIdChanged(object sender, EventArgs e)
        {
            if (annobjClicked == true)
            {
                currentTool = annAutomationManager.CurrentObjectId;
                annobjClicked = false;
            }
        }

        private void rasterImageViewer1_MouseMove(object sender, MouseEventArgs e)
        {
             if(annAutomationManager.CurrentObjectId != currentTool)
             {
                 annAutomationManager.CurrentObjectId = currentTool;
             }
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            if(toolStripButton1.Checked == true)
            {
                        annobjClicked = true;
                        // フリーハンド
                        annAutomationManager.CurrentObjectId = AnnAutomationManager.FreehandObjectId;
            }
            else if(toolStripButton1.Checked == false)
            {
                        annobjClicked = true;
                        // 選択ポインタ
                        annAutomationManager.CurrentObjectId = AnnAutomationManager.SelectObjectId;

                        // アノテーションを画像上に描画
                        annAutomationManager.Automations[0].Realize();

                        // 全てのアノテーションオブジェクトを削除
                        annAutomationManager.Automations[0].SelectAll();
                        annAutomationManager.Automations[0].Delete();

            }
        }
    }

 

関連情報

0 コメント

記事コメントは受け付けていません。