将Vector3DF转换为字节数组的正确方法是什么?

时间:2014-12-31 06:05:50

标签: c# arrays wpf foreach bytearray

我正在实现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,以便将其传递到内存中? 谢谢!

1 个答案:

答案 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);

看看这是否有助于实现您的目标