我正在用Kinect开始一个项目。
我要做的第一件事就是让用户点击一个对象,程序会返回该对象距离kinect的距离。
我的代码:
private void colorImg_MouseDown(object sender, MouseButtonEventArgs e)
{
double distance;
System.Windows.Point position = Mouse.GetPosition(colorImg);
distance = position.X + (position.Y * 640);
int af = (int)distance;
int depth = depthPixels[af].Depth;
System.Windows.Forms.MessageBox.Show("" + depth);
}
但总是返回0
,问题是deptPixels
的深度属性从一开始就始终为0
。通过断点,我在此行检查,并且对于每个像素,深度为0
。但为什么呢?
this.depthPixels = new DepthImagePixel[this.sensor.DepthStream.FramePixelDataLength];
欢迎任何帮助!
答案 0 :(得分:2)
我认为原因可能是您的DepthImagePixel[]
未被填充。
您展示的代码行
this.depthPixels = new DepthImagePixel[this.sensor.DepthStream.FramePixelDataLength];
初始化数组但不向其添加任何数据,因此我希望其中的所有值都为零。
初始化您的类时,您应该添加一个更新此事件的事件:
this.sensor.DepthFrameReady += this.SensorDepthFrameReady;
并将其添加到课程中:
private void SensorDepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
{
using (DepthImageFrame depthFrame = e.OpenDepthImageFrame())
{
if (depthFrame != null)
{
depthFrame.CopyDepthImagePixelDataTo(this.depthPixels);
}
else
{
// depthFrame is null because the request did not arrive in time
}
}
}