Kinect C#重载

问题描述 投票:0回答:1

我刚刚开始学习kinect,并且尝试了在线以下示例之一,但返回了此错误:

'msfr_MultiSourceFrameArrived不匹配委托'TypedEventHandler'的重载

我指出了错误代码在代码中的位置,该位置在sensor.Open中的MainPage上方

我的代码看起来如何:

            KinectSensor sensor;
    InfraredFrameReader irReader;
    ushort[] irData;
    byte[] irDataConverted;
    WriteableBitmap irBitmap;

    Body[] bodies;
    MultiSourceFrameReader msfr;

    void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        sensor = KinectSensor.GetDefault();
        irReader = sensor.InfraredFrameSource.OpenReader();
        FrameDescription fd = sensor.InfraredFrameSource.FrameDescription;
        irData = new ushort[fd.LengthInPixels];
        irDataConverted = new byte[fd.LengthInPixels * 4];
        irBitmap = new WriteableBitmap(fd.Width, fd.Height);
        image.Source = irBitmap;

        bodies = new Body[6];
        msfr = sensor.OpenMultiSourceFrameReader(FrameSourceTypes.Body| FrameSourceTypes.Infrared);
        msfr.MultiSourceFrameArrived += msfr_MultiSourceFrameArrived; <-- the error

        sensor.Open();
    }

    void msfr_MultiSourceFrameArrived(MultiSourceFrameReader sender, MultiSourceFrame args)
    {
        using (MultiSourceFrame msf = args.BodyFrameReference.AcquireFrame())
        {
            if (msf != null)
            {
                using (BodyFrame bodyFrame = msf.BodyFrameReference.AcquireFrame())
                {
                    using (InfraredFrame irFrame = msf.InfraredFrameReference.AcquireFrame())
                    {
                        if (bodyFrame != null && irFrame != null)
                        {
                            irFrame.CopyFrameDataToArray(irData);

                            for (int i = 0; i < irData.Length; i++)
                            {
                                byte intensity = (byte)(irData[i] >> 8);
                                irDataConverted[i * 4] = intensity;
                                irDataConverted[i * 4 + 1] = intensity;
                                irDataConverted[i * 4 + 2] = intensity;
                                irDataConverted[i * 4 + 3] = 255;
                            }
                            irDataConverted.CopyTo(irBitmap.PixelBuffer);
                            irBitmap.Invalidate();

                            bodyFrame.GetAndRefreshBodyData(bodies);
                            bodyCanvas.Children.Clear();
                            foreach (Body body in bodies)
                            {
                                if (body.IsTracked)
                                {
                                    Joint headJoint = body.Joints[JointType.Head];
                                    if (headJoint.TrackingState == TrackingState.Tracked)
                                    {
                                        DepthSpacePoint dsp = sensor.CoordinateMapper.MapCameraPointsToDepthSpace(headJoint.Position);
                                        Ellipse headCircle = new Ellipse() { Width = 50, Height = 50, Fill = new SolidColorBrush(Color.FromArgb(255, 255, 0, 0)) };
                                        bodyCanvas.Children.Add(headCircle);
                                        Canvas.SetLeft(headCircle, dsp.X-25);
                                        Canvas.SetTop(headCircle, dsp.Y-25);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
c# kinect
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.