読者です 読者をやめる 読者になる 読者になる

意味悲鳴

PythonとかUnityとか.技術ブログでしたが,研究ブログにシフトしました.

Kinect SDK v1.8のCopySkeletonDataToについて

今更こんな情報書いて誰が喜ぶんだって感じはするんだけど、だいぶハマってわけが分からなかったので書いておきたい。

SkeletonFrame _lastSkeletonFrame;
Skeleton[] _skeletons;


private void Kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
      using (_lastSkeletonFrame = e.OpenSkeletonFrame())
      {
            if (_lastSkeletonFrame != null)
            {
                _lastSkeletonFrame.CopySkeletonDataTo(skeletons); // ここでエラー
            }
      }
}

持ってる本(SDKのv1.5準拠)だと普通にこう書いてある。というか、私の過去のソース(SDK v1.8)だとこれで動いていた。しかし今日書いてたらエラーはいてきた。

f:id:zyusou:20151105134913p:plain

値をnullにすることはできませんって言うから、てっきりnullを代入するのが問題なのかと思ったら、結果的にはそうでも無かったらしい。で、書き換えたのがこちら。

SkeletonFrame _lastSkeletonFrame;


private void Kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
      using (_lastSkeletonFrame = e.OpenSkeletonFrame())
      {
            if (_lastSkeletonFrame != null)
            {
                var skeletons = new Skeleton[_lastSkeletonFrame.SkeletonArrayLength];
                _lastSkeletonFrame.CopySkeletonDataTo(skeletons);
            }
      }
}

これ単純に配列の長さを指定していなかったからなのかな。なんか単純にC#分かってないのが原因だと思うんだけども……。でも昔のコードも動いていたし。 参考文献はこちら。 Trouble reading skeleton for kinect