2012-02-15 30 views
5

私はLabVIEWから呼び出せるDLLの作成に精通していますが、IMAQイメージをDLLに渡す正しい方法については興味があります。ここで私が見つけた1つの方法 - 私は同様のメカニズムを使用して、DLLからEvent StructureへIMAQ Imageインスタンスを投稿します。LabVIEW、C++ DLL、およびIMAQイメージ

Example Diagram

注クラスタから/への画像インスタンスを変換するノードが、それぞれ、${LABVIEW_INSTALL_DIR}/vi.lib/vision/DatatypeConversion.llbに配置され、そしてIMAQ Image Datatype to Image Cluster.viIMAQ Image Cluster to Image Datatype.vi命名されていること。作成されるクラスタは、イメージ名とC/C++のImage*型へのポインタアドレスを表す整数値で構成されます。

これを行うにはこれが最善の方法ですか、それとも良い方法がありますか?

私は、次のコードを使用して、クラスタ内のすべての画像情報(ポインタ、サイズなど)を入れて、異なるアプローチを使用
+1

私が見ることができる1つの問題は、変換ノードがU32を与えていることです。あなたが64ビットであれば、問題があるかもしれません... – CharlesB

+0

ええ、私は気づきました - それはDLLへの関数呼び出しのパラメータを 'Pointer Sized Integer'と定義しているので起こります。私は32ビット環境で動作しているため、直接的な影響はありません。私はNI Vision 2011を実行しているので、32ビットの出力が発生することはありますが、興味があります。 64ビットをサポートしています。上記のクラスタからの出力を見ると、それは完全に真実ではないようです... – hatboyzero

+1

64ビット環境では64ビットのポインタが得られると確信しています – CharlesB

答えて

4

enter image description here

クラスターは、次に行う、DLL関数に渡されます。 (もちろん、サイズを変更することはない)、その後はIMAQのunmapピクセルポインタを呼び出します。議論の後


EDIT:

あなたのソリューションは、NIビジョンを持つに依存しているが、この場合には、それは私のものよりはましです。しかし、NI Visionを搭載していない場合は、IMAQのピクセルデータを操作する唯一の方法です。

+0

これはちょっと忙しいようです。 '_pImage'に格納されているアドレスが、この例で渡された整数と等価である' imaqGetImageInfo(_pImage、&imageInfo) 'の呼び出しで参照によって返される' imageInfo'構造体からのその情報すべてにアクセスします。上記の質問。 – hatboyzero

+0

これを知らなかった!クラスターのアンバンドルの前に、ノエの名前は何ですか?とにかくあなたのソリューションは私のものよりも優れていると思われますので、もしそれが仕事をしていればそれと一緒に行くべきです: – CharlesB

+2

両方の変換ノードは '$ {LABVIEW_INSTALL_DIR}/vi.lib/vision/DatatypeConversion.llb'にあります。デフォルトでIMAQパレットに含まれていないのは残念です... – hatboyzero

関連する問題