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)だとこれで動いていた。しかし今日書いてたらエラーはいてきた。
値を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