void UpdateUserMap()
{
// copy over the maps
Marshal.Copy(KinectWrapper.GetUsersLabelMap(), usersLabelMap, 0, usersMapSize);
Marshal.Copy(KinectWrapper.GetUsersDepthMap(), usersDepthMap, 0, usersMapSize);
// Flip the texture as we convert label map to color array
int flipIndex, i;
int numOfPoints = 0;
Array.Clear(usersHistogramMap, 0, usersHistogramMap.Length);
// Calculate cumulative histogram for depth
for (i = 0; i < usersMapSize; i++)
{
// Only calculate for depth that contains users
if (usersLabelMap[i] != 0)
{
usersHistogramMap[usersDepthMap[i]]++;
numOfPoints++;
}
}
if (numOfPoints > 0)
{
for (i = 1; i < usersHistogramMap.Length; i++)
{
usersHistogramMap[i] += usersHistogramMap[i-1];
}
for (i = 0; i < usersHistogramMap.Length; i++)
{
usersHistogramMap[i] = 1.0f - (usersHistogramMap[i] / numOfPoints);
}
}
// Create the actual users texture based on label map and depth histogram
for (i = 0; i < usersMapSize; i++)
{
flipIndex = usersMapSize - i - 1;
if (usersLabelMap[i] == 0)
{
usersMapColors[flipIndex] = Color.clear;
}
else
{
// Create a blending color based on the depth histogram
Color c = new Color(usersHistogramMap[usersDepthMap[i]], usersHistogramMap[usersDepthMap[i]], usersHistogramMap[usersDepthMap[i]], 0.9f);
switch (usersLabelMap[i] % 4)
{
case 0:
usersMapColors[flipIndex] = Color.red * c;
break;
case 1:
usersMapColors[flipIndex] = Color.green * c;
break;
case 2:
usersMapColors[flipIndex] = Color.blue * c;
break;
case 3:
usersMapColors[flipIndex] = Color.magenta * c;
break;
}
}
}
// Draw it!
usersLblTex.SetPixels(usersMapColors);
usersLblTex.Apply();
}