Accord.Controls.Vision.FaceController.source_NewFrame C# (CSharp) Метод

source_NewFrame() приватный Метод

private source_NewFrame ( object sender, NewFrameEventArgs eventArgs ) : void
sender object
eventArgs AForge.Video.NewFrameEventArgs
Результат void
        private void source_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {

            if (!IsRunning || (!IsTracking && !IsDetecting))
                return;


            lock (syncObject)
            {
                Bitmap frame = eventArgs.Frame;

                int width = frame.Width;
                int height = frame.Height;

                BitmapData data = frame.LockBits(new Rectangle(0, 0, width, height),
                    ImageLockMode.ReadWrite, frame.PixelFormat);

                UnmanagedImage head = new UnmanagedImage(data);


                if (IsDetecting)
                {
                    IsDetecting = false;

                    // Process the nose detector in the head image
                    Rectangle[] regions = detector.ProcessFrame(head);

                    if (regions.Length >= 1)
                    {
                        // Re-initialize tracker
                        tracker.Reset();
                        tracker.SearchWindow = regions[0];
                        tracker.ProcessFrame(head);

                        // Update initial position
                        computeCurrentPosition(width, height);

                        OnFaceEnter(new FaceEventArgs(currentX, currentY));
                    }
                    else
                    {
                        IsDetecting = true;
                    }
                }

                else if (IsTracking)
                {
                    // Track the object
                    tracker.ProcessFrame(head);

                    // Get the object position
                    TrackingObject obj = tracker.TrackingObject;

                    // Update current position
                    computeCurrentPosition(width, height);

                    if (obj.IsEmpty)
                    {
                        OnFaceLeave(EventArgs.Empty);
                    }

                    else
                    {
                        OnFaceMove(new FaceEventArgs(currentX, currentY));
                    }
                }

                frame.UnlockBits(data);
            }
        }