From 04:00 PM CDT – 08:00 PM CDT (09:00 PM UTC – 01:00 AM UTC) Tuesday, April 16, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.



NI-IMAQ的内存分配。



主要软件: Driver Software>>NI-IMAQ
主要软件版本: 2.2
主要软件修正版本: N/A
次要软件: N/A

问题:
NI-IMAQ如何确定在图像采集中分配的内存大小?在内存列表中分配的图像缓存区在实际物理内存中连续吗?


解答:

IMAQ Create VI创建一个指向一块没有初始化,大小为0IMAQ缓冲区的指针。真正的内存分配是IMAQ Configure Buffer VI完成的,在底层编程中我们会在图像采集之前,板卡初始化化之后(IMAQ Init VI)来做这个工作。IMAQ Configure Buffer VI根据板卡的配置以及相机的格式来重新分配内存,但是如果使用高层VI(IMAQ Snap, IMAQ Grab Setup, 或者IMAQ Sequence)IMAQ Configure Buffer VI会在这些函数中间接调用。同样IMAQ ReadFile VI也会在内部完成缓冲区的配置。


LabVIEW的图像应用数据类型包含了一个指向LabVIEW内部使用的一种数据结构的指针,它没有直接指向图像缓冲区。IMAQ GetImagePixelPtr VI可以获取指向图像缓冲区的指针。            
在内存中图像是以从左上到右下的方向存放的,具体来讲:第00列的像素对应于图像左上角的像素。IMAQ GetImagePixelPtr VI的在线帮助详细阐述了图像数据在内存中的具体组织方式,使用该VI就可以获取图像数据的详细信息了(比如你需要将图像传给一个dll)

 

缓冲区的分配实际上由操作系统完成的,虽然一个缓冲区理论上是连续的一块内存,但是相关的缓冲区(如缓冲区列表的多个缓冲区)在内存中如何分配是未知的。但是缓冲区列表的缓冲区位置关系不会对访问这些内存数据造成影响,因为静态RAM访问任何地址的内存数据花费的时间时固定的。

相关链接: KB 3E7HPRWX: What Is the Byte Layout of IMAQ Buffer for RGB and HSL Images?
Developer Zone Tutorial: Memory Management with IMAQ
Developer Zone Tutorial: Improving Memory Allocation with NI-IMAQ and the NI PCIe-1429

附件:





报告日期: 10/15/1999
最近更新: 09/20/2011
文档编号: 1QE846YJ