2012-02-15 10 views
5

Estoy familiarizado con la escritura de archivos DLL que se pueden llamar desde LabVIEW, pero tengo curiosidad sobre cuál podría ser la forma correcta de pasar IMAQ Images a una DLL. He aquí una forma de hacerlo: también uso un mecanismo similar para publicar instancias de IMAQ Image desde mi DLL a una estructura de evento.LabVIEW, C++ DLL, e IMAQ Images

Example Diagram

Nota que los nodos que convierten las instancias de la imagen a/de los grupos se encuentran en ${LABVIEW_INSTALL_DIR}/vi.lib/vision/DatatypeConversion.llb, y se denominan IMAQ Image Datatype to Image Cluster.vi y IMAQ Image Cluster to Image Datatype.vi, respectivamente. El clúster que se crea consta del nombre de la imagen y un valor entero que representa la dirección del puntero a un tipo Image* en C/C++.

¿Es esta la mejor manera de hacerlo, o hay una manera mejor?

+1

Un problema que puedo ver es que el nodo de conversión está dando U32. Si está en 64 bits puede haber problemas ... – CharlesB

+0

Sí, me di cuenta de que eso está sucediendo porque estoy definiendo el parámetro para que la llamada a la función en la DLL sea un 'Entero de tamaño de puntero '. Dado que estoy operando en un entorno de 32 bits, esto no me afecta directamente; sin embargo, es curioso que una salida de 32 bits sea el caso, ya que estoy ejecutando NI Vision 2011, que se pretende tiene soporte de 64 bits. Mirando el resultado del clúster anterior, eso no parece ser completamente cierto ... – hatboyzero

+1

OK, estoy bastante seguro de que en un entorno de 64 bits da un puntero de 64 bits – CharlesB

Respuesta

4

Puedo usar un enfoque diferente, poniendo toda la información de la imagen (puntero, tamaños, etc.) en un clúster utilizando el siguiente código:

enter image description here

El clúster está a continuación, pasa a la función DLL, haciendo operaciones en píxeles (sin cambiar el tamaño, por supuesto) y luego llamar al puntero de mapa no asignado de IMAQ.


EDITAR después de la discusión:

Su solución se basa en tener NI Vision, y en este caso es mejor que la mía. Sin embargo, cuando no se tiene NI Vision en la mina, la única forma de trabajar con los datos de píxeles de IMAQ.

+0

Eso parece un poco ocupado, especialmente si se tiene en cuenta que se puede obtener acceso a toda esa información de la estructura 'imageInfo' que se devuelve por referencia en una llamada a' imaqGetImageInfo (_pImage, & imageInfo) ', donde la dirección almacenada en' _pImage' es equivalente al entero pasado en el ejemplo en el pregunta arriba. – hatboyzero

+0

¡no sabía esto! ¿Cuál es el nombre del noe antes de desagregar el clúster? de todos modos, su solución parece mejor que la mía, por lo que debe hacerlo si hace el trabajo :-) – CharlesB

+2

Ambos nodos de conversión se encuentran en '$ {LABVIEW_INSTALL_DIR}/vi.lib/vision/DatatypeConversion.llb'. Es una lástima que no estén incluidos en la paleta de IMAQ de forma predeterminada, honestamente ... – hatboyzero