<分区>
我正在使用包含以下内容的 Kinect v2 CameraSpacePoint结构:
public struct CameraSpacePoint : IEquatable<CameraSpacePoint>
{
public float X;
public float Y;
public float Z;
}
CameraSpacePoint
还包含一些方法 Equals
、GetHashCode
等,上面没有显示这些方法以保持帖子简洁明了。
好吧,我在类构造函数中定义cameraSpacePoints
如下:
IntPtr cameraSpacePoints = Marshal.AllocHGlobal(512 * 424 * 4 * 3);
下面是对上述内存分配的解释:
- 512:宽度
- 424:高度
- 4:单个'float'需要的字节数
- 3:总共三个变量,即“X”、“Y”和“Z”
后来,我使用 CoordinateMapper 将值复制到 cameraSpacePoints如下:
coordinateMapper.MapDepthFrameToCameraSpaceUsingIntPtr(depthFrameData,
512 * 424 * 2,
cameraSpacePoints,
512 * 424 * 4 * 3);
看起来很完美。现在我想从 cameraSpacePoints 获取值。所以我在 unsafe
block 中使用了以下代码:
float* cameraSpacePoint = (float*)cameraSpacePoints;
for (var index = 0; index < 512 * 424; index++)
{
float X = cameraSpacePoint[index];
float Y = cameraSpacePoint[index + 1];
float Z = cameraSpacePoint[index + 2];
}
我在想象它时意识到它似乎不起作用。在我看来,使用 IntPtr
从 cameraSapacePoints 访问元素时会出现一些困惑。这里缺少什么?有什么建议吗?