我正在实现Kinect的FaceTrackingBasics-WPF C#代码来跟踪某个对象的位置。 尝试使用Buffer.BlockCopy将Vector3DF类型变量收集到某个字节数组中,如下所示:
this.facePoints3D = frame.Get3DShape();
foreach (Vector3DF[] vector in facePoints3D.GetSlices(n))
{
byte[] bytearray = new byte[vector.Length * this.facePoints3D.Count];
Buffer.BlockCopy(vector, 0, bytearray, 0, bytearray.Length);
}
但是我有一个Buffer.BlockCopy ArgumentException“src或dst不是一个基元数组。”每次我运行执行文件。我知道这是因为Vector3DF不是原始的。
现在供参考,vector3DF定义为:
public struct Vector3DF
{
public Vector3DF(float x, float y, float z)
: this()
{
X = x;
Y = y;
Z = z;
}
// ...
//some more code
//...
}
有没有一种很好的方法将这个所谓的Vector3DF转换为bytearray,以便将其传递到内存中? 谢谢!
答案 0 :(得分:1)
这是一种使用互操作技术的方法
//sample data
Vector3DF v3df = new Vector3DF(10, 20, 30);
//get data size
int size = Marshal.SizeOf(v3df);
//allocate memory
IntPtr ptr = Marshal.AllocHGlobal(size);
//copy data to memory
Marshal.StructureToPtr(v3df, ptr, false);
//copy data from memory to byte array
byte[] bytes = new byte[size];
Marshal.Copy(ptr, bytes, 0, bytes.Length);
//release memory
Marshal.FreeHGlobal(ptr);
看看这是否有助于实现您的目标