当玩家(特别是玩家)近/远时,做一个小组项目试图让事情发生,所以我们写了这个函数。 (我们不允许使用骨架功能)
private void FindDepth(DepthImageFrame depthFrame)
{
short[] rawDepthData = new short[depthFrame.PixelDataLength];
depthFrame.CopyPixelDataTo(rawDepthData);
Byte[] pixels = new byte[depthFrame.Height * depthFrame.Width * 4];
for (int depthIndex = 0; depthIndex < rawDepthData.Length; depthIndex++)
{
int player = rawDepthData[depthIndex] & DepthImageFrame.PlayerIndexBitmask;
int depth = rawDepthData[depthIndex] >> DepthImageFrame.PlayerIndexBitmaskWidth;
if (player > 0)
{
playerDepth = rawDepthData[depthIndex];
}
}
}
为什么这不能通过抓住一个像素来正确地抓住玩家的深度?
答案 0 :(得分:3)
深度像素表示为16位。低3位提供玩家索引,其余13位提供深度,例如{深度位} {玩家索引位}
{0100 1011 1001 0} {010}
因此,为了找到玩家索引,我们通过DepthImageFrame.PlayerIndexBitmask来显示如下所示
(0100 1011 1001 0010)AND(0000 0000 0000 0111)= 0000 0000 0000 0010 = 2即第二名球员
并且为了找到距离,我们右移3位,返回13位,如下所示 0000 1001 0111 0010 = 2418,即2418mm
答案 1 :(得分:0)
重要的是要记住,玩家编号值只会添加到深度图像中 骨架跟踪已打开。如果关闭骨架跟踪,则每个深度的玩家编号 value设置为0.