1

私はKinectToolboxを使用しているので、リストをReplaySkeletonFrames手にしています。私はこのリストを繰り返し、最初に追跡されたスケルトンを取得し、いくつかのプロパティを変更しています。

ご存知のように、オブジェクトを変更すると、元のオブジェクトも変更されます。

スケルトンのコピーを作成する必要があります。

注:CopySkeletonDataTo()私のフレームは「通常の」KinectではReplaySkeletonFrameなく、であるため、使用できません。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;

    }

それを解決する方法は?

4

1 に答える 1

1

より多くの検索で、私は次の解決策に行き着きました:スケルトンをメモリにシリアル化し、新しいオブジェクトに逆シリアル化します

これがコードです

 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;
    }
于 2012-11-26T18:04:46.997 に答える