/// <summary> /// Interpolates a single frame, starting at index /// </summary> /// <param name="index">The index pointing to the first frame</param> public double InterpolateManual(int index, double maxError) { Frame firstFrame = frameList.FramesList.ElementAt(index); Frame secondFrame = frameList.FramesList.ElementAt(index + 1); Image <Bgr, Byte> firstImage = GetImageAt(index); Image <Bgr, Byte> secondImage = GetImageAt(index + 1); IPathContainer tempContainer = new PathContainer(); double error = interpolator.InterpolatePaths(firstFrame.Curves, tempContainer, firstImage, secondImage); if (error < maxError) { if (secondFrame.Curves.TotalPointCount > 0) { if (NextFrameContainsCurves != null) { InterpolationArgs args = new InterpolationArgs(); NextFrameContainsCurves(this, args); if (args.Handled == true) { secondFrame.Curves = tempContainer; } else { return(double.MaxValue); } } else { return(double.MaxValue); } } else { secondFrame.Curves = tempContainer; } } return(error); }
void interpolationControl_NextFrameContainsCurves(object sender, InterpolationArgs e) { if (!interpolateMessageShown) { MessageBoxResult result = MessageBox.Show("The next image already contains drawn paths. Do you want to continue?", "Warning", MessageBoxButton.OKCancel); if (result == MessageBoxResult.OK) { interpolateMessageShown = true; e.Handled = true; } else { e.Handled = false; } } else { e.Handled = true; } }