在活动ppt演示中显示Kinect骨架的最佳方式

本文关键字:最佳 方式 Kinect 显示 ppt 活动 | 更新日期: 2023-09-27 18:05:57

我在一个活动的ppt演示中显示kinect的骨架。我的问题是,是否有更好的方法来做到这一点,因为它非常慢,我认为可能有一个更好的解决方案:-)

List<Shape> shape = new List<Shape>();
foreach (SkeletonData data in skeletonFrame.Skeletons)
{
  if (SkeletonTrackingState.Tracked == data.TrackingState)
  {
     //get the actual slide
     Slide slide = Globals.ThisAddIn.Application.ActivePresentation.SlideShowWindow.View.Slide;
     //delete old shapes (lines)
     shape.ForEach(s => s.Delete());
     shape.Clear();
     //get new points
     Point head = getDisplayPosition(data.Joints[JointID.Head]);
     Point shoulder = getDisplayPosition(data.Joints[JointID.ShoulderCenter]);
     Point shoulderleft = getDisplayPosition(data.Joints[JointID.ShoulderLeft]);
     Point shoulderright = getDisplayPosition(data.Joints[JointID.ShoulderRight]);
     Point elbowright = getDisplayPosition(data.Joints[JointID.ElbowRight]);
     Point elbowleft = getDisplayPosition(data.Joints[JointID.ElbowLeft]);
     Point wristright = getDisplayPosition(data.Joints[JointID.WristRight]);
     Point wristleft = getDisplayPosition(data.Joints[JointID.WristLeft]);
     Point handright = getDisplayPosition(data.Joints[JointID.HandRight]);
     Point handleft = getDisplayPosition(data.Joints[JointID.HandLeft]);
     //add new shapes (lines)
     shape.Add(slide.Shapes.AddShape(MsoAutoShapeType.msoShapeCloud,(float)head.X, (float)head.Y, 10, 10));
     shape.Add(slide.Shapes.AddLine((float)head.X, (float)head.Y, (float)shoulder.X, (float)shoulder.Y));
     shape.Add(slide.Shapes.AddLine((float)shoulder.X, (float)shoulder.Y, (float)shoulderright.X, (float)shoulderright.Y));
     shape.Add(slide.Shapes.AddLine((float)shoulderright.X, (float)shoulderright.Y, (float)elbowright.X, (float)elbowright.Y));
     shape.Add(slide.Shapes.AddLine((float)elbowright.X, (float)elbowright.Y, (float)wristright.X, (float)wristright.Y));
     shape.Add(slide.Shapes.AddLine((float)wristright.X, (float)wristright.Y, (float)handright.X, (float)handright.Y));
     shape.Add(slide.Shapes.AddLine((float)shoulder.X, (float)shoulder.Y, (float)shoulderleft.X, (float)shoulderleft.Y));
     shape.Add(slide.Shapes.AddLine((float)shoulderleft.X, (float)shoulderleft.Y, (float)elbowleft.X, (float)elbowleft.Y));
     shape.Add(slide.Shapes.AddLine((float)elbowleft.X, (float)elbowleft.Y, (float)wristleft.X, (float)wristleft.Y));
     shape.Add(slide.Shapes.AddLine((float)wristleft.X, (float)wristleft.Y, (float)handleft.X, (float)handleft.Y));
  }
}

在活动ppt演示中显示Kinect骨架的最佳方式

一个高性能的解决方案是在演示文稿前面(总是在前面)放置一个窗口(窗体),并将数据流式传输/绘制到该窗口。