.NET Macrofilter インターフェース ジェネレータ

イントロダクション

マクロフィルタ インターフェースの生成により、Aurora Vision Studio の環境から得られるビジュアルプログラミングの利便性を失うことなく、複雑なアプリケーションを設計できます。

人々が.NET Macrofilter インターフェースを選択する一般的な理由は次のとおりです:

  • 非常に複雑または高度にインタラクティブなHMIを持つアプリケーションの作成。
  • .NET ライブラリを使用してより簡単にアクセスできる外部データベースやデバイスに接続するアプリケーションの作成。
  • AVCODE(グラフィカルプログラム)のソースコードを再コンパイルすることなく変更できる柔軟なシステムの作成。

マクロフィルタは、互いに独立して実行できるミニプログラムと見なすことができます。 Aurora Vision Studio では、これらのマクロフィルタを C# または C++/CLI などのプログラミング言語で使用し、通常のクラスメソッドとして実行できます。 これらのメソッドはマクロフィルタへのインターフェースにすぎないため、AVCODE に対する変更を加えた後でもアセンブリを再生成する必要はありません。

要件

.NET マクロフィルタ インターフェース アセンブリをビルドおよび使用するためには、ユーザーのマシンに次のアプリケーションがインストールされている必要があります:

ビルド実行
Aurora Vision Professional 5.3 Aurora Vision Professional 5.3 または
Aurora Vision Runtime 5.3
Microsoft Visual Studio 2015
(またはそれ以上)
生成されたアセンブリと同じビット数(32/64ビット)および Microsoft Visual Studio でビルドされたアセンブリと同じバージョンのMicrosoft Visual C++ 再頒布可能パッケージ

.NET Macrofilter Interface Assembly Generator

マクロフィルタは、C# または Visual Basic などの管理対象言語で使用するためにインターフェース化できます。このようなインターフェースは、Dynamic Link Library(dll)に生成され、それを Visual C# プロジェクトで参照できます。 現在の Aurora Vision Studio プロジェクト用に dll ライブラリを生成するには、ファイル » .NET Macrofilter Interface 生成... から開く .NET Macrofilter Interface Generator フォームで必要なオプションをすべて入力してください。

出力ページ

名前空間
メイン ライブラリ クラス コンテナの名前を定義します。
マクロフィルタ インターフェース クラス名
すべてのマクロフィルタがメソッドとして利用可能になるクラスの名前を定義します(マクロフィルタと同じシグネチャを持つ)。
サンプル Microsoft Visual Studio ソリューションを生成
作成されるマクロフィルタ .NET インターフェース アセンブリを使用する空の Microsoft Visual Studio C# WinForms プロジェクトを生成します。
リンク Aurora Vision プロジェクト ファイル
現在の Aurora Vision プロジェクト ファイルを C# プロジェクトにリンクとして含めます。これにより、Aurora Vision プロジェクト ファイル (*.avproj、*.avcode、*.avlib) はアプリケーションの出力ディレクトリから簡単にアクセスできるようになります。たとえば、次のコード行を使用して(プロジェクトが Inspection.avproj であると仮定):
macrofilters = InspectionMacrofilters.Create(@"auroravision\Inspection.avproj");
生成される dll ライブラリのパス
生成されるアセンブリの場所です。

Interfaceページ

チェックボックス リスト
現在の Aurora Vision プロジェクトで定義されている、.NET インターフェースが生成される可能性のあるすべてのマクロフィルタおよびユーザータイプのリスト。

Compilerページ

環境 アセンブリのビルドに使用する Microsoft Visual Studio ビルド ツールの選択。 ドロップダウン リストには、システムで検出されたすべての互換性のあるツールが表示されます。これには Microsoft Visual Studio および Microsoft Visual Studio ビルド ツールの環境が含まれます。検出されたいずれも適していない場合、カスタム環境を使用できます。その場合、MSBuild.exe の場所と対象の Microsoft Visual Studio バージョンのプロパティを手動で定義する必要があります。
MSBuildの場所 選択した環境に応じた実際の MSBuild.exe のパスを表示します。Custom 環境が選択されている場合、編集可能です。
Microsoft Visual Studio バージョン 生成されるサンプル C# プロジェクトの形式(sln および csproj ファイル)を定義します。
Windows SDK バージョン マクロフィルタ .NET インターフェースを生成する際に適切な SDK バージョンを選択できます。リストにはシステムで検出されたすべての SDK バージョンが表示されます。

高度なページ

アセンブリに署名 指定された秘密鍵で生成されたマクロフィルタ.NETアセンブリに署名し、それをStrong-Namedアセンブリにします。 キーは、Strong Name ToolまたはMicrosoft Visual Studio IDE(C# プロジェクトのプロパティページ)で生成できます。

.NETマクロフィルタインターフェースアセンブリの使用

初期化

生成されたライブラリがVisual C#プロジェクトで参照されたら、.NETマクロフィルタインターフェースアセンブリジェネレータフォームで選択したマクロフィルタは、 出力ページのMacrofilterInterfaceClassテキストボックスで定義されたクラスのインスタンスメソッドとして利用可能です。ただし、これらのメソッドを正常に実行するには、 いくつかのAurora Visionライブラリを初期化する必要があります。すなわち、Executor.dllと利用可能なフィルタライブラリです。 これは、MacrofilterInterfaceClass.Createという名前の静的メソッドで行われます。追加の操作は必要ありません。最高のパフォーマンスを得るためには、 このような初期化はアプリケーションの寿命内で一度だけ行われ、MacrofilterInterfaceClassクラスのインスタンスがアプリケーション内に存在しないようにする必要があります。

MacrofilterInterfaceClass.Create静的メソッドは、dllライブラリが生成された*.avcode、*.avproj、または*.avexeパスを受け取ります。 Createメソッドは例外をスローする可能性があるため、try-catchステートメントでMacrofilterInterfaceClassのインスタンス化をラップすることが推奨されています。例外は、必要なライブラリが不足しているか破損している場合などに発生する可能性があります。

終了処理

MacrofilterInterfaceClassクラスはIDisposableインターフェースを実装しており、Dispose()メソッドでライブラリの解放やその他のクリーンアップが行われます。アプリケーション終了時にクリーンアップするのが良い慣習です。

ビットネス

生成されたアセンブリのビット数は、使用されているAurora Vision Studioのビット数と同じです。したがって、ライブラリの形式の不一致を避けるために、ユーザーアプリケーションはターゲットプラットフォームを調整する必要があります。たとえば、Aurora Vision Studioが64ビットであれば、ユーザーアプリケーションもターゲットプラットフォームをx64に切り替える必要があります。

診断モード

生成されたMacrofilter .NET InterfaceクラスのDiagnosticModeプロパティを使用して、マクロフィルタの実行モードを変更できます。 これにより、診断モードのチェックと有効化/無効化が可能になります。

ダイアログ

Aurora Vision Studioと同じように、幾何学的プリミティブを編集することが可能です。 必要なのは、Avl.NET.Designers.dllアセンブリから適切なクラスを使用するだけです。ダイアログクラスはAvlNet.Designersネームスペースで定義されています。詳細については、 AVL.NET Dialogs記事を参照してください。

完全なAVL.NET

Aurora Vision Libraryがインストールされている場合、マクロフィルタ.NET Interfaceアセンブリを使用するアプリケーションで完全なAVL.NETの機能を活用できます。 Aurora Vision Library .NETのはじめにの手順に従ってください。

はじめに

この例は.NETマクロフィルタインターフェースアセンブリの生成と使用のステップバイステップのデモンストレーションです。この 例を実行するには、少なくともAurora Vision Studio Professional 5.3およびMicrosoft Visual Studio 2015が必要です。Visual C#を使用して マクロフィルタを実行します。

Aurora Visionプロジェクトの作成

アプリケーションで使用するAurora Vision Studioプロジェクトが必要です。デモのためには、できるだけ単純なプロジェクトを使用します。具体的には、Visual C#アプリケーションのGUIで提供されるパラメータでLenaの画像をしきい値処理するプロジェクトです。C#アプリケーションで実行したいマクロフィルタは、ThresholdLena(参照:マクロフィルタの作成)です。 実行するマクロフィルタ全体は、以下の画像のように2つのフィルタから構成されています。

ThresholdLenaマクロフィルタの基本的な使用例。

.NET Macrofilter Interfaceアセンブリの生成

準備が整ったAurora Vision Studioプロジェクトからは、ファイル » .NET Macrofilter Interfaceの生成...で.NET Macrofilter Interfaceアセンブリを生成できます。プロジェクトがまだ保存されていない場合、今すぐ保存するように求められます。

.NET Macrofilter InterfaceダイアログのOutputページで、Generate Visual Studio Solutionオプションを選択して、現在のAurora Vision Studioのインストールに適切に設定されたデフォルトのC#プロジェクトを作成します。C#プロジェクトに必要なファイルを含めるには、Link Aurora Vision Project Filesチェックボックスもチェックすることが推奨されています。

Interfaceページで、ThresholdLenaにチェックを入れて、そのマクロフィルタの.NET Macrofilter Interfaceを生成します。このマクロフィルタは後でC#メソッドとしてアクセスできます。

準備ができたら、Generateをクリックして、ThresholdLenaマクロフィルタをVisual C#アプリケーションで実行できるアセンブリを生成します。

マクロフィルタインターフェースクラスによって提供されるメソッド。

Visual C#アプリケーションで.NET Macrofilter Interfaceアセンブリを使用する

ExampleMacrofilters.dllを生成したら、これをVisual C#アプリケーションの参照に追加して、ライブラリによって公開される唯一の型であるAuroraVision.ExampleMacrofiltersクラスにアクセスできます。 (.NET Macrofilter Interfaceの生成ダイアログでGenerate Visual Studio Solutionオプションをチェックしている場合、すべての参照がすでに設定されており、実行可能な起動アプリケーションも用意されています)。 生成されたExampleMacrofilters.dllには、アプリケーションでAVLタイプのいずれかが使用されている場合に参照する必要があるAvl.NET.TS.dllアセンブリも含まれています。この例では、AvlNet.Imageタイプを使用してThresholdLenaマクロフィルタから画像を取得するため、Avl.NET.TS.dllがここでは必要です。

前述のように、このクラスのインスタンス化はアプリケーションのライフタイム内で一度だけ行うべきです。そのため、Form1のコンストラクタはそのような初期化を行うための理想的な場所です。 ExampleMacrofiltersのインスタンスは、Form1クラス内でプライベートメンバーとして保持されるべきです:

using AvlNet;
using AuroraVision;
    public partial class Form1 : Form
    {

        /// <summary>
        /// Object that provides access to the macrofilters defined in the Aurora Vision Studio project.
        /// </summary>
        private readonly ThresholdLenaMacrofilters macros;

        public Form1()
        {
            InitializeComponent();
            try
            {
                string avsProjectPath = @"auroravision\ThresholdLena.avproj";
                macros = ThresholdLenaMacrofilters.Create(avsProjectPath);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

ExampleMacrofiltersクラスにはパブリックコンストラクタが用意されていません。代わりに、ExampleMacrofiltersクラスのインスタンスは、その静的メソッドCreateを介してのみ取得できます。このメソッドは*.avcode、*.avproj、または*.avexeファイルへのパスを受け入れます。この例では、ThresholdLenaマクロフィルタの定義が含まれている*.avcodeファイルへのパスを取得します。Example.avcodeCreateメソッドに渡すことで、ランタイムは*.avcodeファイルをアプリケーションの出力ディレクトリで検索します。このファイルが見つかることを保証するためには、プロジェクトに含め、その「出力ディレクトリにコピー」プロパティを「常にコピー」または「新しい場合はコピー」に設定する必要があります。

C#プロジェクトは、マクロフィルタをメソッドとして実行する準備が整っています。ThresholdLenaは2つのオプションの浮動小数点値を取るため、閾値の最小値と最大値を表します。そこで、1つのPictureBoxと値の範囲が0〜255となる2つのTrackBarコントロールを追加しましょう:

トラックバーのいずれかの値を変更すると、UpdateImage()メソッドが呼び出され、そこでThresholdLenaマクロフィルタが実行され、計算された画像がPictureBoxコントロールに表示されます:

private void UpdateImage()
{
    try
    {
        //create an empty image buffer to be populated in the ThresholdLena macrofilter
        using (var image = new Image())
        {
            //call macrofilter
            macros.ThresholdLena(minTrackBar.Value, maxTrackBar.Value, image);

            //dispose previous background if necessary
            pictureBox1.Image?.Dispose();

            //get System.Drawing.Bitmap object from resulting AvlNet.Image
            pictureBox1.Image = image.CreateBitmap();
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(
            ex.Message,
            "Macrofilter Interlace Application",
            MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

ExampleMacrofilters.Create(...)メソッドでロードされたすべてのリソースは、ExampleMacrofilters.Dispose() インスタンスメソッドで解放する必要があります。これはForm1.Dispose(bool)オーバーライド内で含まれるフォームの破棄中に呼び出されるべきです:

protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        if (components != null)
            components.Dispose();

        //Release resources held by the Macrofilter .NET Interface object
        if (macros != null)
            macros.Dispose();
    }

    base.Dispose(disposing);
}

ヒント

  • 生成されたマクロフィルタ インターフェイス クラスには、ユーザーがAurora Vision環境から切断できるExit()メソッドも用意されています。
  • 各ステップのマクロフィルタには、内部の状態をリセットする特定のメソッドが含まれています。例えば、ResetLenaThreshold()メソッドは内部のレジスタの値とイテレーションの状態をリセットします。
  • マクロフィルタ インターフェイスを使用してアプリケーションを作成する最良の方法は、暗号化されたavexeファイルを使用することです。これにより、アプリケーションのコードをさらなる変更から保護できます。
  • 診断モードは、AvlNet.SettingsクラスのIsDiagnosticModeEnabled静的プロパティでオンおよびオフに切り替えることができます。
  • Macrofilter .NET インターフェイスを使用するアプリケーションは、ユーザーコードからの直接のAVL関数呼び出しを有効にするためにAVLのAvlNet.dllアセンブリも参照できます。 (参照:Aurora Vision Library .NETの始め方、ユーザーアプリケーションでのAvlNet.dllの参照方法)。