2012-02-15 39 views
5

Tôi quen thuộc với việc viết các tệp DLL có thể được gọi từ LabVIEW, nhưng tôi tò mò muốn biết cách nào đúng để chuyển IMAQ Images sang một DLL có thể là. Dưới đây là một cách tôi đã tìm thấy để làm điều đó - Tôi cũng sử dụng một cơ chế tương tự để đăng các trường hợp IMAQ Image từ DLL của tôi đến một Cấu trúc sự kiện.LabVIEW, C++ DLL và IMAQ Images

Example Diagram

Lưu ý rằng các nút chuyển đổi các trường hợp hình ảnh đến/từ cụm được đặt tại ${LABVIEW_INSTALL_DIR}/vi.lib/vision/DatatypeConversion.llb, và được đặt tên IMAQ Image Datatype to Image Cluster.viIMAQ Image Cluster to Image Datatype.vi, tương ứng. Cụm được tạo bao gồm tên hình ảnh và giá trị số nguyên đại diện cho địa chỉ con trỏ tới loại Image* trong C/C++.

Đây có phải là cách tốt nhất để làm điều này hay không, có cách nào tốt hơn không?

+1

Một vấn đề tôi có thể thấy là nút chuyển đổi đang cung cấp U32. Nếu bạn đang trên 64 bit có thể có vấn đề ... – CharlesB

+0

Vâng, tôi nhận thấy rằng - đó là xảy ra bởi vì tôi đang xác định tham số cho các cuộc gọi chức năng vào DLL là một 'Con trỏ Sized Integer'. Vì tôi đang hoạt động trong môi trường 32-bit, điều này không ảnh hưởng trực tiếp đến tôi - nó rất tò mò, mặc dù một đầu ra 32 bit xảy ra là trường hợp, khi tôi đang chạy NI Vision 2011, có hỗ trợ 64 bit. Nhìn vào đầu ra từ cụm trên, điều đó dường như không hoàn toàn đúng ... – hatboyzero

+1

OK, tôi khá chắc chắn rằng trong môi trường 64 bit nó mang lại một con trỏ 64bit – CharlesB

Trả lời

4

tôi sử dụng một cách tiếp cận khác nhau, đưa tất cả các thông tin hình ảnh (con trỏ, kích thước, vv) trong một cluster sử dụng đoạn mã sau:

enter image description here

Cụm sau đó được truyền cho hàm DLL, làm cho hoạt động trên pixel (không thay đổi kích thước, tất nhiên) và sau đó gọi con trỏ pixel unmap của IMAQ.


EDIT sau khi thảo luận:

giải pháp của bạn phụ thuộc vào việc có NI Vision, và trong trường hợp này nó là tốt hơn so với tôi. Tuy nhiên khi không có NI Vision mine là cách duy nhất để làm việc với dữ liệu pixel của IMAQ.

+0

Điều đó có vẻ hơi bận, đặc biệt là xem xét bạn có thể truy cập vào tất cả thông tin đó từ cấu trúc 'imageInfo' được trả về bằng tham chiếu trong lời gọi đến' imaqGetImageInfo (_pImage, & imageInfo) ', nơi địa chỉ được lưu trữ trong' _pImage' tương đương với số nguyên được truyền trong ví dụ trong câu hỏi trên. – hatboyzero

+0

không biết điều này! tên của noe trước khi nhóm của unbundle là gì? anyway giải pháp của bạn có vẻ tốt hơn so với tôi, vì vậy bạn nên đi với nó nếu nó thực hiện công việc :-) – CharlesB

+2

Cả hai nút chuyển đổi đều nằm trong '$ {LABVIEW_INSTALL_DIR}/vi.lib/vision/DatatypeConversion.llb'. Thật đáng tiếc là chúng không được bao gồm trong bảng IMAQ theo mặc định, thật lòng ... – hatboyzero