2012-02-15 17 views
5

我熟悉編寫DLL文件,可以在LabVIEW中調用,但我很好奇,什麼正確的方式IMAQ圖像傳遞到DLL可能。以下是我發現的一種方法 - 我也使用類似的機制將IMAQ Image實例從我的DLL發佈到事件結構。的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

我能看到的一個問題是轉換節點正在給U32。如果你在64位可能會有問題... – CharlesB 2012-02-16 16:02:45

+0

是的,我注意到 - 這是因爲我將函數調用的參數定義爲一個「指針大小的整數」函數。由於我在32位環境下運行,這並不直接影響我 - 它很好奇,儘管32位輸出正好如此,因爲我運行的是NI Vision 2011,它自稱有64位支持。看上面的集羣輸出,這似乎並不完全是真的...... – hatboyzero 2012-02-16 16:41:46

+1

好吧,我很確定,在64位環境中,它提供了一個64位指針 – CharlesB 2012-02-16 16:47:47

回答

4

我使用不同的方法,將所有的圖像信息(指針,大小等),在集羣中使用以下代碼:

enter image description here

羣集然後被傳遞到DLL功能,使得像素操作(當然不會改變大小),然後調用IMAQ的unmap像素指針。經過討論


編輯:

你的解決方案依賴於具有NI視覺,在這種情況下,它比我的好。但是,如果沒有NI Vision礦山,則只能使用IMAQ的像素數據。

+0

這似乎有點忙,尤其是考慮到你可以通過調用'imaqGetImageInfo(_pImage,&imageInfo)'時,通過引用返回'imageInfo'結構中的所有信息,其中'_pImage'中存儲的地址等同於示例中傳遞的整數上面的問題。 – hatboyzero 2012-02-16 14:57:25

+0

不知道這個!集羣解包之前的noe名稱是什麼?反正你的解決方案似乎比我好,所以你應該去用它,如果它的工作:-) – CharlesB 2012-02-16 15:15:00

+2

這兩個轉換節點位於'$ {} LABVIEW_INSTALL_DIR/vi.lib /視覺/ DatatypeConversion.llb'。很可惜,默認情況下它們不包含在IMAQ調色板中,誠實地說... – hatboyzero 2012-02-16 15:41:42