void UpdatePlayerDepthImage(short[] depthFrame, Byte[, ,] playerMask, Byte[, ,] skinMask,
Rectangle roi)
{
// Clear depth image.
CvInvoke.cvZero(DepthImage.Ptr);
var data = DepthImage.Data;
var scale = (float)255 / HandInputParams.MaxDepth;
var roiWidth = width;
var roiHeight = height;
if (!roi.IsEmpty) {
roiWidth = roi.Width;
roiHeight = roi.Height;
}
for (int r = roi.Top; r < roi.Top + roiHeight; r++)
for (int c = roi.Left; c < roi.Left + roiWidth; c++) {
var index = r * width + c;
short pixel = depthFrame[index];
var depth = DepthUtil.RawToDepth(pixel);
if (IsFilteredPixel(playerMask, skinMask, c, r, depth))
data[r, c, 0] = (byte)(Math.Max(0, HandInputParams.MaxDepth - depth) * scale);
}
}