.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つのフィルタから構成されています。
.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.avcodeをCreate
メソッドに渡すことで、ランタイムは*.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の参照方法)。