C++ で記述された Kinect の例を変更して、元のコードではスケルトン データのみを取得していたのに対し、新しいコードではスケルトン データとカラー データの両方を取得するようにしました。色データを処理するために実装した ProcessColor メソッドをコードで呼び出すことができないことに気付きました。問題を精査すると、次の部分(init関数に属する)の指定された行が失敗することがわかりました。デバッグ プロセス中に、その行に到達すると、プログラムは ProcessColor メソッドにバウンスし、その後エラーが発生します。
if(NULL!=kinectSensor)
{
// line that fails is the following
hr = kinectSensor->NuiInitialize(NUI_INITIALIZE_FLAG_USES_COLOR);
if (SUCCEEDED(hr))
{
// Create an event that will be signaled when color data is available
m_hNextColorFrameEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
// Open a color image stream to receive color frames
hr = kinectSensor->NuiImageStreamOpen(
NUI_IMAGE_TYPE_COLOR,
NUI_IMAGE_RESOLUTION_640x480,
0,
2,
m_hNextColorFrameEvent,
&m_pColorStreamHandle);
}
}
以下に、ジャンプする行を示しました。
HRESULT hr;
NUI_IMAGE_FRAME imageFrame;
HANDLE m_hNextColorFrameEvent(INVALID_HANDLE_VALUE), m_pColorStreamHandle(INVALID_HANDLE_VALUE);
// Line that it jumps
hr = kinectSensor->NuiImageStreamGetNextFrame(m_pColorStreamHandle, 0, &imageFrame);
エラーメッセージは次のとおりです。
KinectSample.exe の 0x5ca5b4a6 で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x00000047。
もしお役に立てれば、公式の Kinect サンプル (ColorBasics-D2D) から上記の部分を追加したことを示したいと思います。プロセス中に非常に注意を払いましたが、クラッシュまたは何かがある可能性があります。
どうすれば解決できますか?何かご意見は?