ちょっと工夫が必要です。手順としては次のようになっています。
- INuiSensor::NuiImageStreamGetNextFrame() で NUI_IMAGE_FRAME を取得する
- それをもとにINuiSensor::NuiImageFrameGetDepthImagePixelFrameTexture() で INuiFrameTexture を取得する。なお、このメソッドの呼び出しは INuiSensor::NuiImageStreamReleaseFrame() の前に行うこと。
- 取得した INuiFrameTexture の INuiFrameTexture::LockRect() で NUI_LOCKED_RECT を取得する。
- 取得した NUI_LOCKED_RECT のpBits メンバが NUI_DEPTH_IMAGE_PIXEL 構造体のデータ列へのポインタになっていますのでキャストする。
- NUI_DEPTH_IMAGE_PIXEL* depthPixel = (NUI_DEPTH_IMAGE_PIXEL*)rect.pBits;
- NUI_DEPTH_IMAGE_PIXEL 構造体は playerIndex と depth を持っているので、それを使って処理する。
- 最後に INuiSensor::NuiImageStreamReleaseFrame() でフレームデータを解放する。
// 距離カメラのフレームデータを取り出すNUI_IMAGE_FRAME depthFrame = { 0 };
kinect->NuiImageStreamGetNextFrame( depthHandle, INFINITE, &depthFrame );
// フレームデータを元に、拡張距離データを取得する
BOOL nearMode = FALSE;
INuiFrameTexture *frameTexture = 0;
kinect->NuiImageFrameGetDepthImagePixelFrameTexture(
depthHandle, &depthFrame, &nearMode, &frameTexture );
// NUI_DEPTH_IMAGE_PIXELを取り出す
NUI_LOCKED_RECT rect = { 0 };
frameTexture->LockRect( 0, &rect, 0, 0 );
//typedef struct _NUI_DEPTH_IMAGE_PIXEL
//{
// USHORT playerIndex;
// USHORT depth;
//} NUI_DEPTH_IMAGE_PIXEL;
NUI_DEPTH_IMAGE_PIXEL* depthPixel = (NUI_DEPTH_IMAGE_PIXEL*)rect.pBits;
// 何かする
kinect->NuiImageStreamReleaseFrame( depthHandle, &depthFrame );
全体のコードはこちらにあります