138 lines
6.1 KiB
C#
138 lines
6.1 KiB
C#
using Microsoft.Kinect;
|
|
using System.Drawing;
|
|
|
|
namespace KinectWorkshop
|
|
{
|
|
/*public class DepthFrameConverter
|
|
{
|
|
const int RED_IDX = 2;
|
|
const int GREEN_IDX = 1;
|
|
const int BLUE_IDX = 0;
|
|
byte[] depthFrame32 = new byte[320 * 240 * 4];
|
|
|
|
// Converts a 16-bit grayscale depth frame which includes player indexes into a 32-bit frame
|
|
// that displays different players in different colors
|
|
public byte[] ConvertDepthFrameWithUser(DepthImagePixel[] depthFrame, int width, int height)
|
|
{
|
|
Color c = Color.Empty;
|
|
byte[] ret = new byte[width * height * 4];
|
|
for (int x = 1; x < width; x++)
|
|
{
|
|
for (int y = 0; y < height; y++)
|
|
{
|
|
int i = ((y * width) + x) * 4;
|
|
short depth = (depthFrame[x + y * width]).Depth;
|
|
c = Color.Empty;
|
|
if(depth > 0 && depth <= 4000)
|
|
{
|
|
int depthdist = (int)((depth / 4090f) * 255f);
|
|
c = System.Drawing.Color.FromArgb((int)(depthdist / 2f), depthdist, (int)(depthdist * 0.7f));
|
|
}
|
|
ret[i] = c.B;
|
|
ret[i] = c.G;
|
|
ret[i] = c.R;
|
|
ret[i] = 255;
|
|
}
|
|
|
|
}
|
|
|
|
/* for (int i16 = 0, i32 = 0; i16 < depthFrame16.Length && i32 < depthFrame32.Length; i16 += 2, i32 += 4)
|
|
{
|
|
int player = depthFrame16[i16] & 0x07;
|
|
//if ((y - 1) * 320 + x * 4 == i16)
|
|
//{
|
|
// player = 8;
|
|
//}
|
|
int realDepth = (depthFrame16[i16 + 1] << 5) | (depthFrame16[i16] >> 3);
|
|
// transform 13-bit depth information into an 8-bit intensity appropriate
|
|
// for display (we disregard information in most significant bit)
|
|
byte intensity = (byte)(255 - (255 * realDepth / 0x0fff));
|
|
|
|
depthFrame32[i32 + RED_IDX] = 0;
|
|
depthFrame32[i32 + GREEN_IDX] = 0;
|
|
depthFrame32[i32 + BLUE_IDX] = 0;
|
|
|
|
// choose different display colors based on player
|
|
switch (player)
|
|
{
|
|
case 0:
|
|
depthFrame32[i32 + RED_IDX] = (byte)(intensity / 2);
|
|
depthFrame32[i32 + GREEN_IDX] = (byte)(intensity / 2);
|
|
depthFrame32[i32 + BLUE_IDX] = (byte)(intensity / 2);
|
|
break;
|
|
case 1:
|
|
depthFrame32[i32 + RED_IDX] = intensity;
|
|
break;
|
|
case 2:
|
|
depthFrame32[i32 + GREEN_IDX] = intensity;
|
|
break;
|
|
case 3:
|
|
depthFrame32[i32 + RED_IDX] = (byte)(intensity / 4);
|
|
depthFrame32[i32 + GREEN_IDX] = (byte)(intensity);
|
|
depthFrame32[i32 + BLUE_IDX] = (byte)(intensity);
|
|
break;
|
|
case 4:
|
|
depthFrame32[i32 + RED_IDX] = (byte)(intensity);
|
|
depthFrame32[i32 + GREEN_IDX] = (byte)(intensity);
|
|
depthFrame32[i32 + BLUE_IDX] = (byte)(intensity / 4);
|
|
break;
|
|
case 5:
|
|
depthFrame32[i32 + RED_IDX] = (byte)(intensity);
|
|
depthFrame32[i32 + GREEN_IDX] = (byte)(intensity / 4);
|
|
depthFrame32[i32 + BLUE_IDX] = (byte)(intensity);
|
|
break;
|
|
case 6:
|
|
depthFrame32[i32 + RED_IDX] = (byte)(intensity / 2);
|
|
depthFrame32[i32 + GREEN_IDX] = (byte)(intensity / 2);
|
|
depthFrame32[i32 + BLUE_IDX] = (byte)(intensity);
|
|
break;
|
|
case 7:
|
|
depthFrame32[i32 + RED_IDX] = (byte)(255 - intensity);
|
|
depthFrame32[i32 + GREEN_IDX] = (byte)(255 - intensity);
|
|
depthFrame32[i32 + BLUE_IDX] = (byte)(255 - intensity);
|
|
break;
|
|
case 8:
|
|
depthFrame32[i32 + RED_IDX] = 255;
|
|
depthFrame32[i32 + GREEN_IDX] = 0;
|
|
depthFrame32[i32 + BLUE_IDX] = 0;
|
|
break;
|
|
}
|
|
}
|
|
return depthFrame32;*
|
|
return ret;
|
|
}
|
|
|
|
internal byte[] ConvertDepthFrame(byte[] depthFrame16)
|
|
{
|
|
for (int i16 = 0, i32 = 0; i16 < depthFrame16.Length && i32 < depthFrame32.Length; i16 += 2, i32 += 4)
|
|
{
|
|
int realDepth = (depthFrame16[i16+1] << 8)|(depthFrame16[i16]);
|
|
//byte r = (byte)(realDepth >> 8);
|
|
//byte b = (byte)realDepth;
|
|
byte intensity = (byte)(255 - (255 * realDepth / 0x0fff));
|
|
depthFrame32[i32 + RED_IDX] = (byte)((intensity * -1) + 255);// (byte)(intensity / 2);
|
|
depthFrame32[i32 + GREEN_IDX] = (byte)((intensity * -1) + 255);// (byte)(intensity / 2);
|
|
depthFrame32[i32 + BLUE_IDX] = (byte)((intensity * -1) + 255);// (byte)(intensity / 2);
|
|
|
|
}
|
|
return depthFrame32;
|
|
}
|
|
|
|
internal byte[] ConvertDepthFrameHiddenPlayer(byte[] depthFrame16)
|
|
{
|
|
for (int i16 = 0, i32 = 0; i16 < depthFrame16.Length && i32 < depthFrame32.Length; i16 += 2, i32 += 4)
|
|
{
|
|
int realDepth = (depthFrame16[i16 + 1] << 5) | (depthFrame16[i16] >> 3);
|
|
//byte r = (byte)(realDepth >> 8);
|
|
//byte b = (byte)realDepth;
|
|
byte intensity = (byte)(255 - (255 * realDepth / 0x0fff));
|
|
depthFrame32[i32 + RED_IDX] = (byte)((intensity * -1) + 255);// (byte)(intensity / 2);
|
|
depthFrame32[i32 + GREEN_IDX] = (byte)((intensity * -1) + 255);// (byte)(intensity / 2);
|
|
depthFrame32[i32 + BLUE_IDX] = (byte)((intensity * -1) + 255);// (byte)(intensity / 2);
|
|
|
|
}
|
|
return depthFrame32;
|
|
}
|
|
}*/
|
|
}
|