如何将 Kinect 框架对象复制到另一个 Kinect 框架对象



我正在使用 Kinect 工具箱,所以我手里有一份ReplaySkeletonFrames列表。我正在迭代此列表,获取第一个跟踪的框架并修改一些属性。

众所周知,当我们更改对象时,我们也更改了原始对象。

我需要复制一个骨架。

注意:我不能使用 CopySkeletonDataTo(),因为我的框架是ReplaySkeletonFrame,而不是"普通"Kinect 的ReplayFrame

我尝试制作自己的方法,逐个属性复制,但某些属性无法复制。 看...

 public static Skeleton Clone(this Skeleton actualSkeleton)
    {
        if (actualSkeleton != null)
        {
            Skeleton newOne = new Skeleton();
 // doesn't work - The property or indexer 'Microsoft.Kinect.SkeletonJoints'
 // cannot be used in this context because the set accessor is inaccessible
            newOne.Joints = actualSkeleton.Joints;
 // doesn't work - The property or indexer 'Microsoft.Kinect.SkeletonJoints' 
 // cannot be used in this context because the set accessor is inaccessible
            JointCollection jc = new JointCollection();
            jc = actualSkeleton.Joints;
            newOne.Joints = jc;
            //...
        }
        return newOne;
    }

如何解决?

通过更多的搜索,我最终得到了以下解决方案: 将骨架序列化到内存,反序列化为新对象

这是代码

 public static Skeleton Clone(this Skeleton skOrigin)
    {
        // isso serializa o skeleton para a memoria e recupera novamente, fazendo uma cópia do objeto
        MemoryStream ms = new MemoryStream();
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(ms, skOrigin);
        ms.Position = 0;
        object obj = bf.Deserialize(ms);
        ms.Close();
        return obj as Skeleton;
    }

相关内容

  • 没有找到相关文章

最新更新