ImageSourceRef UserTracker::getUserMask( XnUserID userId /* = 0 */, bool fillWithUserId /* = false */ ) { mObj->mUserBuffers.derefActiveBuffer(); // finished with current active buffer uint8_t *destPixels = mObj->mUserBuffers.getNewBuffer(); // request a new buffer xn::SceneMetaData sceneMD; XnStatus rc = mObj->mUserGenerator.GetUserPixels( userId, sceneMD); checkRc( rc, "UserGenerator GetUserPixels" ); if ( rc == XN_STATUS_OK ) { const uint16_t *userPixels = reinterpret_cast< const uint16_t * >( sceneMD.Data() ); if ( fillWithUserId ) { if ( userId == 0 ) { // mask for all users for ( size_t i = 0 ; i < mObj->mDepthWidth * mObj->mDepthHeight; i++ ) { destPixels[i] = userPixels[i] & 255; } } else { // mask for specified user id for ( size_t i = 0 ; i < mObj->mDepthWidth * mObj->mDepthHeight; i++ ) { if ( userPixels[i] == userId ) destPixels[i] = userPixels[i] & 255; else destPixels[i] = 0; } } } else { if ( userId == 0 ) { // mask for all users for ( size_t i = 0 ; i < mObj->mDepthWidth * mObj->mDepthHeight; i++ ) { if ( userPixels[i] != 0 ) destPixels[i] = 255; else destPixels[i] = 0; } } else { // mask for specified user id for ( size_t i = 0 ; i < mObj->mDepthWidth * mObj->mDepthHeight; i++ ) { if ( userPixels[i] == userId ) destPixels[i] = 255; else destPixels[i] = 0; } } } } // set this new buffer to be the current active buffer mObj->mUserBuffers.setActiveBuffer( destPixels ); uint8_t *activeMask = mObj->mUserBuffers.refActiveBuffer(); return ImageSourceRef( new ImageSourceOpenNIUserMask( activeMask, mObj->mDepthWidth, mObj->mDepthHeight, mObj ) ); }
ImageSourceRef ImageSourceFileTinyExr::create( DataSourceRef dataSourceRef, ImageSource::Options options ) { return ImageSourceRef( new ImageSourceFileTinyExr( dataSourceRef, options ) ); }
ImageSourceRef ImageSourceFileRadiance::create( DataSourceRef dataSourceRef, ImageSource::Options options ) { return ImageSourceRef( new ImageSourceFileRadiance( dataSourceRef, options ) ); }