(基于 areaDetector/ADCore 的 NDArray 模块)
NDArray 是 areaDetector 框架中用于存储多维科学数据的核心数据结构。它支持:
// 关键结构体(简化版)
typedef struct NDArray {
void *pData; // 原始数据指针
NDDataType_t dataType; // 数据类型枚举
size_t ndims; // 维度数
size_t dims[ND_ARRAY_MAX_DIMS]; // 各维度尺寸
NDAttributeList *pAttributeList; // 元数据链表
...
} NDArray;
// 创建 640x480 的 UInt16 图像
NDArray *pArray = pNDArrayPool->alloc(2, dims, NDUInt16, 0, NULL);
uint16_t *pData = (uint16_t*)pArray->pData;
for (size_t i=0; i<640*480; i++) {
pData[i] = i % 65535; // 填充数据
}
NDAttrValue attrValue;
attrValue.i32 = exposure_time;
pArray->pAttributeList->add("Exposure", "Camera", NDAttrInt32, &attrValue);
特性 | 说明 |
---|---|
维度支持 | 支持动态维度(光谱仪=1D, 相机=2D, 断层扫描=3D) |
数据类型 | 支持 8~64 位整数/浮点数(完整列表见 NDDataType_t) |
内存池 | NDArrayPool 预分配内存避免碎片 |
属性系统 | 链式存储实验参数(温度、曝光等) |
序列化 | 支持 flatten() 方法转为字节流网络传输 |
reserve()
/release()
管理引用计数pArray->pData
直接访问数据timeStamp
和 uniqueId
dims[].binning
和 dims[].offset
定义NDAttribute
存储复杂数据NDPluginDriver
实现实时处理NDPluginStdArrays
跨进程共享完整文档:https://areadetector.github.io/areaDetector/ADCore/NDArray.html 源码参考:
areaDetector/ADCore/source/NDArray.cpp
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。