2012-02-15 22 views
5

Ho familiarità con la scrittura di DLL che possono essere chiamate da LabVIEW, ma sono curioso di sapere quale sia il modo corretto di passare le immagini IMAQ a una DLL. Ecco un modo in cui ho trovato di farlo - Io uso anche un meccanismo simile per postare istanze di IMAQ Image dalla mia DLL a una struttura di eventi.Immagini LabVIEW, C++ DLL e IMAQ

Example Diagram

Nota che i nodi che convertono le istanze di immagine da/per cluster si trovano a ${LABVIEW_INSTALL_DIR}/vi.lib/vision/DatatypeConversion.llb, e prendono il nome IMAQ Image Datatype to Image Cluster.vi e IMAQ Image Cluster to Image Datatype.vi, rispettivamente. Il cluster creato è costituito dal nome dell'immagine e da un valore intero che rappresenta l'indirizzo del puntatore a un tipo Image* in C/C++.

È questo il modo migliore per farlo, o c'è un modo migliore?

+1

Un problema che posso vedere è che il nodo di conversione sta dando U32. Se sei su 64 bit ci possono essere problemi ... – CharlesB

+0

Sì, ho notato che - sta succedendo perché sto definendo il parametro per la chiamata di funzione nella DLL come un "numero intero di puntatore". Dal momento che sto operando in un ambiente a 32 bit, questo non mi riguarda direttamente: è curioso, anche se a quanto pare un output a 32 bit, visto che sto eseguendo NI Vision 2011, che si propone di avere supporto a 64 bit. Guardando l'output dal cluster sopra, questo non sembra essere del tutto vero ... – hatboyzero

+1

OK, sono abbastanza sicuro che in un ambiente a 64 bit fornisce un puntatore a 64 bit – CharlesB

risposta

4

Io uso un approccio diverso, mettendo tutte le informazioni immagine (puntatore, dimensioni, ecc) in un cluster utilizzando il seguente codice:

enter image description here

Il cluster è poi passato alla funzione DLL, rendendo operazioni su pixel (non modificare le dimensioni, ovviamente) e successivamente chiamare il puntatore pixel Unmap di IMAQ.


EDIT dopo la discussione:

La soluzione si basa su avere NI Vision, e in questo caso è meglio del mio. Tuttavia, quando non possedere NI Vision miniera è l'unico modo per lavorare con i dati dei pixel di IMAQ.

+0

Sembra un po 'impegnativo, soprattutto considerando che è possibile ottenere l'accesso a tutte queste informazioni dalla struttura 'imageInfo' restituita per riferimento in una chiamata a' imaqGetImageInfo (_pImage, & imageInfo) ', dove l'indirizzo memorizzato in' _pImage' è equivalente al numero intero passato nell'esempio nel domanda di cui sopra. – hatboyzero

+0

non lo sapevo! qual è il nome del noe prima della separazione del cluster? comunque la tua soluzione sembra migliore della mia, quindi dovresti seguirla se fa il lavoro :-) – CharlesB

+2

Entrambi i nodi di conversione si trovano in '$ {LABVIEW_INSTALL_DIR}/vi.lib/vision/DatatypeConversion.llb'. È un peccato che non siano inclusi nella palette IMAQ per impostazione predefinita, onestamente ... – hatboyzero