void KinectManager::Update(void) { if (!m_pColorFrameReader) { return; } IColorFrame* pColorFrame = NULL; HRESULT hr = m_pColorFrameReader->AcquireLatestFrame(&pColorFrame); if (SUCCEEDED(hr)) { INT64 nTime = 0; IFrameDescription* pFrameDescription = NULL; int nWidth = 0; int nHeight = 0; ColorImageFormat imageFormat = ColorImageFormat_None; hr = pColorFrame->get_RelativeTime(&nTime); if (SUCCEEDED(hr)) { hr = pColorFrame->get_FrameDescription(&pFrameDescription); } if (SUCCEEDED(hr)) { hr = pFrameDescription->get_Width(&nWidth); } if (SUCCEEDED(hr)) { hr = pFrameDescription->get_Height(&nHeight); } if (SUCCEEDED(hr)) { hr = pFrameDescription->get_BytesPerPixel(&color_frame_bytes_per_pixel); } if (SUCCEEDED(hr)) { hr = pFrameDescription->get_LengthInPixels(&color_frame_length_in_pixels); } if (SUCCEEDED(hr)) { hr = pColorFrame->get_RawColorImageFormat(&imageFormat); } if (SUCCEEDED(hr)) { if (imageFormat == ColorImageFormat_Rgba) { UINT nBufferSize = KINECT_STREAM_COLOR_WIDTH * KINECT_STREAM_COLOR_HEIGHT * color_frame_bytes_per_pixel; hr = pColorFrame->AccessRawUnderlyingBuffer(&nBufferSize, reinterpret_cast<BYTE**>(&m_pColorRGBX)); } else if (m_pColorRGBX) { IFrameDescription* pRGBFrameDescription = NULL; pColorFrame->CreateFrameDescription(ColorImageFormat_Rgba, &pRGBFrameDescription); unsigned int clpp = 0; pRGBFrameDescription->get_BytesPerPixel(&clpp); unsigned int clip = 0; pRGBFrameDescription->get_LengthInPixels(&clip); color_frame_bytes_per_pixel = clpp; color_frame_length_in_pixels = clip; UINT nBufferSize = clip * clpp; hr = pColorFrame->CopyConvertedFrameDataToArray(nBufferSize, (reinterpret_cast<BYTE*>(&m_pColorRGBX)), ColorImageFormat_Rgba); } else { hr = E_FAIL; } } SafeRelease(pFrameDescription); } SafeRelease(pColorFrame); }