/// <summary> /// Called every time the webcam sends us a new frame. /// Most of the UI elements are updated here. /// </summary> /// <param name="sender"></param> /// <param name="eventArgs"></param> private void video_NewFrame(object sender, NewFrameEventArgs eventArgs) { // get new frame if (picBoxMain.Image != null) { picBoxMain.Image.Dispose(); } _frameLock.WaitOne(); _currentFrame = (Bitmap)eventArgs.Frame.Clone(); picBoxMain.Image = _currentFrame; _frameLock.Release(); _newFrame.Set(); // process the frame using (Graphics gf = picBoxMain.CreateGraphics()) { if (_ParticleFilterRunning && pf != null) { _frameLock.WaitOne(); pf.markupImage(gf, currentCenter); float Confidence = pf.getConfidence(); int[] center = pf.findCenter(); setTbox(Confidence.ToString(), tBoxConfidence); setTbox(center[0].ToString() + "," + center[1].ToString(), tboxCenterCoordinates); if (pf._Centered) { _Centered.Set(); SetStatus("Target Locked", lblStatus); } else { SetStatus("Looking for target", lblStatus); _Centered.Reset(); } if (!_RocketTracking.IsAlive) { _RocketTracking.Start(); } _frameLock.Release(); } } }