Esempio n. 1
0
        /// <summary>
        /// 螺旋摘要关键帧变化
        /// </summary>
        /// <param name="spiralSummarization">螺旋摘要</param>
        /// <param name="keyFrameFrom">旋转的帧</param>
        /// <param name="duration">持续时间</param>
        /// <param name="angle">旋转角度</param>
        /// <returns></returns>
        public static Storyboard KeyFrameInSpiralMove(SpiralSummarization spiralSummarization, KeyFrame keyFrameFrom, double duration, double angle)
        {
            RotateTransform rotateTransform = new RotateTransform();

            keyFrameFrom.Image.RenderTransform = rotateTransform;
            //旋转中心设置
            rotateTransform.CenterX = spiralSummarization.Center.X - keyFrameFrom.Left;
            rotateTransform.CenterY = spiralSummarization.Center.Y - keyFrameFrom.Top;
            DoubleAnimation myDoubleAnimation = new DoubleAnimation();

            myDoubleAnimation.From     = 0;
            myDoubleAnimation.To       = -angle;
            myDoubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(duration));
            if (keyFrameFrom.Image.FindName("rotateTransform") != null)
            {
                keyFrameFrom.Image.UnregisterName("rotateTransform");
            }
            NameScope.SetNameScope(keyFrameFrom.Image, new NameScope());
            keyFrameFrom.Image.RegisterName("rotateTransform", rotateTransform);
            Storyboard.SetTargetName(myDoubleAnimation, "rotateTransform");
            Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(RotateTransform.AngleProperty));

            Storyboard storyboard = new Storyboard();

            storyboard.Children.Add(myDoubleAnimation);
            return(storyboard);
        }
Esempio n. 2
0
 public PictureTrackerManager(SpiralSummarization spiralSummarization, VideoSummarizationControl _videoSummarizationControl)
 {
     _spiralSummarization            = spiralSummarization;
     _inkCanvas                      = spiralSummarization.InkCanvas;
     this._videoSummarizationControl = _videoSummarizationControl;
     this.isFocus                    = spiralSummarization.IsFocus;
 }
 public GernarateKeyFrame(List <KeyFrame> keyFrames, SpiralSummarization spiralSummarization)
 {
     this.keyFrames           = keyFrames;
     this.spiralSummarization = spiralSummarization;
     this.mySpiral            = spiralSummarization.MySpiral;
     this.points         = mySpiral.SpiralStroke.StylusPoints;
     this.intervalLength = (int)(mySpiral.SpiralWidth * 1.1);
 }
Esempio n. 4
0
        /// <summary>
        /// 方向和笔序识别结果匹配和处理
        /// </summary>
        /// <param name="args"></param>
        void gesture_GestureMatchEvent(MouseGestureEventArgs args)
        {
            //记录操作事件与持续时间
            recordOperateEvent(args.Present);
            switch (args.Present)
            {
            case "generateSpiralSummarization":
                //生成新的螺旋摘要
                InkCanvas newSpiralInkCanvas = new InkCanvas();
                newSpiralInkCanvas.Width      = TableGrid.ActualWidth * 0.75;
                newSpiralInkCanvas.Height     = TableGrid.ActualHeight;
                newSpiralInkCanvas.Background = new SolidColorBrush(Colors.Transparent);
                newSpiralInkCanvas.Margin     = new Thickness(0, TableGrid.ActualHeight * 0.25, 0, 0);
                double spiralWidth = 0;
                spiralWidth = 54;
                MySpiral            mySpiral = new MySpiral(spiralWidth, GlobalValues.color, new StylusPoint((double)(int)(newSpiralInkCanvas.Width / 2), (double)(int)(newSpiralInkCanvas.Height / 2)), 3, 10, newSpiralInkCanvas, false);
                SpiralSummarization newSpiralSummarization = new SpiralSummarization(_inkCollector, mySpiral, selectKeyFrames, false);
                //SpiralSummarization newSpiralSummarization = new SpiralSummarization(mySpiral, _inkCollector.TileKeyFrames);
                _inkCanvas.Children.Add(newSpiralInkCanvas);
                _inkCollector.VideoSummarization = newSpiralSummarization;
                break;

            case "spiralSummarization":
                if (startIndex == int.MinValue && endIndex == int.MinValue)
                {
                    //先清除原来的两个螺旋摘要
                    _inkCollector._mainPage.VideoSummarizationControl.keyFrameListScrollViewer.Visibility = Visibility.Visible;
                    ((InkCanvas)_inkCanvas.Children[0]).Children.Clear();
                    ((InkCanvas)_inkCanvas.Children[0]).Strokes.Clear();
                    ((InkCanvas)_inkCanvas.Children[1]).Children.Clear();
                    ((InkCanvas)_inkCanvas.Children[1]).Strokes.Clear();
                    _inkCanvas.Children.RemoveAt(0);
                    _inkCanvas.Children.RemoveAt(0);
                    ((InkCanvas)_inkCanvas.Children[0]).Margin = new Thickness(0);
                    _inkCollector._mainPage.VideoSummarizationControl.resetTableGrid();
                    _inkCollector._mainPage.VideoSummarizationControl.keyFrameList._inkCanvas.Children.Clear();
                    _inkCollector._mainPage.VideoSummarizationControl.keyFrameList2._inkCanvas.Children.Clear();
                    _inkCollector._mainPage.VideoSummarizationControl.keyFrameListScrollViewer.Visibility  = Visibility.Collapsed;
                    _inkCollector._mainPage.VideoSummarizationControl.keyFrameListScrollViewer2.Visibility = Visibility.Collapsed;
                    _inkCollector._mainPage.VideoSummarizationControl.GridBtn.Visibility           = Visibility.Visible;
                    _inkCollector._mainPage.VideoSummarizationControl._timeBar.Visibility          = Visibility.Visible;
                    _inkCollector._mainPage.VideoSummarizationControl.VideoProgressText.Visibility = Visibility.Visible;
                    _inkCollector._mainPage.VideoSummarizationControl.BtnMerge.Visibility          = Visibility.Collapsed;
                    _inkCollector.Mode = InkMode.VideoSummarization;
                }
                break;

            default:
                //Console.WriteLine("default");

                break;
            }
        }
        /// <summary>
        /// 移动批量关键帧动画类
        /// </summary>
        /// <param name="spiralSummarization"></param>
        /// <param name="operationId"></param>
        /// <param name="insertIndex"></param>
        /// <param name="fromKeyPointIndexes"></param>
        /// <param name="toKeyPointIndexes"></param>
        /// <param name="keyFrames"></param>
        public MoveKeyFrame(SpiralSummarization spiralSummarization, int operationId, int insertIndex, List <int> fromKeyPointIndexes, List <int> toKeyPointIndexes, List <KeyFrame> keyFrames)//, int index, KeyFrame keyFrame, int startIndex, int endIndex, double duration,bool isInsert)
        {
            if (spiralSummarization != null)
            {
                spiralSummarization.InkCollector.IsShowUnbrokenKeyFrame = false;
            }
            this.operationId         = operationId;
            this.fromKeyPointIndexes = fromKeyPointIndexes;
            this.toKeyPointIndexes   = toKeyPointIndexes;
            this.keyFrames           = keyFrames;
            this.spiralSummarization = spiralSummarization;
            this.insertIndex         = insertIndex;
            showCount             = keyFrames.Count;
            this.showSpiralStroke = spiralSummarization.ShowSpiralStroke;
            this.points           = spiralSummarization.Points;
            for (int i = 1; i < showCount; i++)
            {
                int movePointCount = Math.Abs(fromKeyPointIndexes[i] - toKeyPointIndexes[i]);
                if (movePointCount > maxMovePointCount)
                {
                    maxMovePointCount      = movePointCount;
                    maxMovePointCountIndex = i;
                }
                else if (movePointCount < minMovePointCount && movePointCount > 0)
                {
                    minMovePointCount = movePointCount;
                }
            }

            for (int i = 1; i < showCount; i++)
            {
                int movePointCount        = Math.Abs(fromKeyPointIndexes[i] - toKeyPointIndexes[i]);
                int movePointCountPerTime = (int)Math.Floor((double)movePointCount / minMovePointCount);
                int restPointCount        = movePointCount % minMovePointCount;
                restPointCountList.Add(restPointCount);
                int moveTime = (int)Math.Ceiling((double)movePointCount / movePointCountPerTime);
                if (moveTime > maxMoveTime)
                {
                    maxMoveTime = moveTime;
                }
                movePointCountPerTimes.Add(movePointCountPerTime);
            }
        }
        public override void _presenter_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            Stroke lastStroke = _inkCanvas.Strokes.Last();

            if (!(_startPoint.X == 0 && _startPoint.Y == 0))
            {
                //先清空原来选中的关键帧序列
                //clearPreMessage();
                _currPoint = e.GetPosition(_inkCanvas);
                if (_currPoint.Y < TableGrid.ActualHeight / 2)
                {
                    if (_currPoint.X < TableGrid.ActualWidth / 2)
                    {
                        _currPoint.X -= ((InkCanvas)_inkCanvas.Children[0]).Margin.Left;
                        _currPoint.Y -= ((InkCanvas)_inkCanvas.Children[0]).Margin.Top;
                        endIndex      = _inkCollector._mainPage.VideoSummarizationControl.SpiralSummarizationLeft.getSelectedKeyFrameIndex(_currPoint);
                        if (startIndex != int.MinValue && endIndex != int.MinValue)
                        {
                            endKeyFrame            = _inkCollector._mainPage.VideoSummarizationControl.SpiralSummarizationLeft.KeyFrames[endIndex];
                            endSpiralSummarization = _inkCollector._mainPage.VideoSummarizationControl.SpiralSummarizationLeft;
                        }
                        _currPoint.X += ((InkCanvas)_inkCanvas.Children[0]).Margin.Left;
                        _currPoint.Y += ((InkCanvas)_inkCanvas.Children[0]).Margin.Top;
                    }
                    //右边的螺旋摘要
                    else
                    {
                        Point endPointRight = e.GetPosition((InkCanvas)_inkCanvas.Children[1]);
                        endIndex = _inkCollector._mainPage.VideoSummarizationControl.SpiralSummarizationRight.getSelectedKeyFrameIndex(endPointRight);
                        if (startIndex != int.MinValue && endIndex != int.MinValue)
                        {
                            endKeyFrame            = _inkCollector._mainPage.VideoSummarizationControl.SpiralSummarizationRight.KeyFrames[endIndex];
                            endSpiralSummarization = _inkCollector._mainPage.VideoSummarizationControl.SpiralSummarizationRight;
                        }
                    }
                }
                else
                {
                    Point endPointBottom = e.GetPosition((InkCanvas)_inkCanvas.Children[2]);
                    endIndex = _inkCollector._mainPage.VideoSummarizationControl.SpiralSummarizationBottom.getSelectedKeyFrameIndex(endPointBottom);
                    if (startIndex != int.MinValue && endIndex != int.MinValue)
                    {
                        endKeyFrame            = _inkCollector._mainPage.VideoSummarizationControl.SpiralSummarizationBottom.KeyFrames[endIndex];
                        endSpiralSummarization = _inkCollector._mainPage.VideoSummarizationControl.SpiralSummarizationBottom;
                    }
                }
                if (startKeyFrame != null && endKeyFrame != null && startKeyFrame != endKeyFrame)
                {
                    startKeyFrame.HyperLink = endKeyFrame;
                    _inkCollector.HyperLinkKeyFrames.Add(startKeyFrame);
                    startKeyFrame.HyperLinkSpiralSummarization = endSpiralSummarization;
                    _inkCanvas.Strokes.Remove(_inkCanvas.Strokes.Last());
                    InkTool.getInstance().DrawLine(_startPoint.X, _startPoint.Y, _currPoint.X, _currPoint.Y, _inkCanvas, Colors.Red);
                    InkTool.getInstance().drawPoint(_startPoint.X, _startPoint.Y, 8, Colors.Blue, _inkCanvas);
                }
                else
                {
                    mouseGesture.StopCapture();
                    _inkCanvas.Strokes.Remove(lastStroke);
                }
                _startPoint.X = 0;
                _startPoint.Y = 0;
            }
        }
Esempio n. 7
0
        public override void _presenter_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            if (videoSummarization != null && _startPoint != null && _inkCanvas.Strokes.Count > 0)
            {
                Stroke lastStroke = _inkCanvas.Strokes.Last();
                //先清空原来选中的关键帧序列
                clearPreMessage();
                _currPoint    = e.GetPosition(_inkCanvas);
                _currPoint.X -= inkCanvasSpiralSummarizationMargin.Left;
                _currPoint.Y -= inkCanvasSpiralSummarizationMargin.Top;
                endIndex      = videoSummarization.getSelectedKeyFrameIndex(_currPoint);
                //记录操作类型与持续时间
                recordOperateTrace("UP````````````````````````````````````````````````````Up");
                upTime = System.DateTime.Now;

                if (lastStroke.StylusPoints.Count == 1)
                {
                    if (startIndex != int.MinValue && startIndex == endIndex && _inkCollector.IsShowUnbrokenKeyFrame)
                    {
                        if (_inkCollector.DefaultSummarizationNum == 0)
                        {
                            mouseGesture.Points.Clear();
                        }
                        if (GlobalValues.locationQuestions.Count > 0)
                        {
                            if (GlobalValues.CurrLocationId + 1 < GlobalValues.locationQuestions.Count)
                            {
                                if (GlobalValues.locationAnswers[GlobalValues.CurrLocationId].IndexOf(videoSummarization.KeyFrames.IndexOf(videoSummarization.ShowKeyFrames[startIndex]) + 1) != -1)
                                {
                                    GlobalValues.CurrLocationId++;
                                    GlobalValues.LocationQuestion.setQuestion(GlobalValues.locationQuestions[GlobalValues.CurrLocationId]);
                                    VideoSummarizationControl.RecordCurrOperationAndTime("第" + (GlobalValues.CurrLocationId - 1).ToString() +
                                                                                         "次定位正确");
                                    GlobalValues.LocationQuestion.TBQuestion.Background = new SolidColorBrush(GlobalValues.LocationQuestionBackGrouds[GlobalValues.CurrLocationId]);
                                }
                            }
                            else
                            {
                                VideoSummarizationControl.RecordCurrOperationAndTime("最后一次定位正确");
                                switch (GlobalValues.summarizationTypeNo)
                                {
                                case 0:
                                    VideoSummarizationControl.Record("Spiral");
                                    break;

                                case 1:
                                    VideoSummarizationControl.Record("Tile");
                                    break;

                                case 2:
                                    VideoSummarizationControl.Record("Tapestry");
                                    break;
                                }
                                MessageBox.Show("恭喜你完成此项任务!");
                                VideoSummarizationControl.sWriter.Close();
                                VideoSummarizationControl.myStream.Close();
                                Environment.Exit(1);
                            }
                        }
                        //定位视频
                        if (0 <= startIndex && startIndex < videoSummarization.ShowKeyFrames.Count && VideoSummarizationControl != null)
                        {
                            //定位视频,position的单位是秒
                            videoSource = videoSummarization.ShowKeyFrames[startIndex].VideoName;
                            VideoSummarizationTool.locateMediaPlayer(VideoSummarizationControl.mediaPlayer, videoSummarization.ShowKeyFrames[startIndex]);
                            //显示超链接
                            if (hyperLink != null)
                            {
                                VideoSummarizationControl.TableGrid.Children.Remove(hyperLink.Image);
                            }
                            hyperLink = videoSummarization.ShowKeyFrames[startIndex].HyperLink;
                            if (hyperLink != null)
                            {
                                VideoSummarizationControl.hyperLinkPlayer.Visibility = Visibility.Visible;
                                VideoSummarizationTool.locateMediaPlayer(VideoSummarizationControl.hyperLinkPlayer, hyperLink);
                                hyperLinkSpiralSummarization = videoSummarization.ShowKeyFrames[startIndex].HyperLinkSpiralSummarization;
                                VideoSummarizationControl.hyperLinkPlayer.MouseLeftButtonUp += new MouseButtonEventHandler(hyperLinkPlayer_MouseLeftButtonUp);
                            }
                            //记录操作事件与持续时间
                            recordOperateEvent("locate::::::::::::::::::::::::::::::::::::::Locate");
                        }
                    }
                }
                else
                {
                    if (_inkCollector.DefaultSummarizationNum == 0)
                    {
                        mouseGesture.StopCapture();
                    }
                }
                _startPoint.X = 0;
                _startPoint.Y = 0;
                _inkCanvas.Strokes.Remove(lastStroke);
            }
        }
Esempio n. 8
0
        public void VideoPlayTimer_Tick(object sender, EventArgs e)
        {
            int videoTimeNow = (int)VideoSummarizationControl.mediaPlayer.Position.TotalMilliseconds;

            //修改时间轴和播放时间
            VideoSummarizationControl._timeBar.Value = videoTimeNow;

            //修改显示播放进度的值的textbox
            List <string> timeCurr = new List <string>();

            timeCurr = ConvertClass.getInstance().MsToHMS(videoTimeNow);
            VideoSummarizationControl.VideoProgressText.Text = timeCurr[0] + ":" + timeCurr[1] + ":" + timeCurr[2] + "/" + timeTotalString;

            //显示超链接关键帧
            foreach (KeyFrame keyFrame in _inkCollector.HyperLinkKeyFrames)
            {
                if (keyFrame.VideoName == videoSource && (int)(keyFrame.Time / 1000) == (int)(videoTimeNow / 1000))
                {
                    if (hyperLink != null)
                    {
                        VideoSummarizationControl.TableGrid.Children.Remove(hyperLink.Image);
                    }
                    hyperLink = keyFrame.HyperLink;
                    VideoSummarizationControl.hyperLinkPlayer.Visibility = Visibility.Visible;
                    VideoSummarizationTool.locateMediaPlayer(VideoSummarizationControl.hyperLinkPlayer, hyperLink);
                    hyperLinkPlayTimer          = new System.Windows.Forms.Timer();
                    hyperLinkPlayTimer.Interval = 8000;
                    hyperLinkPlayTimer.Tick    += new System.EventHandler(hyperLinkPlayTimer_Tick);
                    hyperLinkPlayTimer.Start();
                    hyperLinkSpiralSummarization = keyFrame.HyperLinkSpiralSummarization;
                    VideoSummarizationControl.hyperLinkPlayer.MouseLeftButtonUp += new MouseButtonEventHandler(hyperLinkPlayer_MouseLeftButtonUp);
                    break;
                }
            }

            bool isHasAnnotation = false;
            bool isHasKeyFrame   = false;

            foreach (KeyFrame keyFrame in videoSummarization.KeyFrames)
            {
                if ((int)(keyFrame.Time / 1000) == (int)(videoTimeNow / 1000))
                {
                    if (_inkCollector.DefaultSummarizationNum == 0 && _inkCollector.IsShowRedPoint)
                    {
                        //在螺旋摘要中修改螺旋线表明播放到当前帧了
                        int currIndex = videoSummarization.KeyFrames.IndexOf(keyFrame);
                        if (currPlayKeyFrameStroke != null)
                        {
                            _inkCollector.VideoSummarization.InkCanvas.Strokes.Remove(currPlayKeyFrameStroke);
                        }
                        currPlayKeyFrameStroke = _inkCollector.VideoSummarization.AddPoint2Track(currIndex, Colors.Red, 8);
                    }
                    //显示草图注释
                    isHasKeyFrame = true;
                    Dictionary <Stroke, KeyFramesAnnotation> s = keyFrame.Annotations;
                    if (s.Count > 0)
                    {
                        KeyValuePair <Stroke, KeyFramesAnnotation> currPair;
                        if (_keyFrameAnnotation != null && keyFramesAnnotation != null)
                        {
                            _keyFrameAnnotation.Visibility = Visibility.Collapsed;
                            _inkCollector._mainPage.LayoutRoot.Children.Remove(_keyFrameAnnotation);
                            _keyFrameAnnotation = null;
                            foreach (int index in keyFramesAnnotation.relatedKeyFrameIndexes)
                            {
                                currPair = (from KeyValuePair <Stroke, KeyFramesAnnotation> anno in _inkCollector.VideoSummarization.ShowKeyFrames[index].Annotations
                                            where anno.Value == keyFramesAnnotation
                                            select anno).First();
                                Stroke linkline = (Stroke)(currPair.Key);
                                _inkCollector._mainPage._inkCanvas.Strokes.Remove(linkline);
                            }
                        }
                        _keyFrameAnnotation = new KeyFrameAnnotation();
                        currPair            = (from KeyValuePair <Stroke, KeyFramesAnnotation> anno in keyFrame.Annotations
                                               //where anno.Value == _keyFramesAnnotation
                                               select anno).First();
                        keyFramesAnnotation = (KeyFramesAnnotation)(currPair.Value);
                        int firstIndex = 0;
                        int count      = 0;
                        foreach (int index in keyFramesAnnotation.relatedKeyFrameIndexes)
                        {
                            if (count == 0)
                            {
                                firstIndex = index;
                            }
                            count++;
                            currPair = (from KeyValuePair <Stroke, KeyFramesAnnotation> anno in videoSummarization.ShowKeyFrames[index].Annotations
                                        where anno.Value == keyFramesAnnotation
                                        select anno).First();
                            Stroke stroke = (Stroke)(currPair.Key);
                            if (_inkCanvas.Strokes.IndexOf(stroke) == -1)
                            {
                                _inkCanvas.Strokes.Add(stroke);
                            }
                        }
                        _keyFrameAnnotation.InkCanvasAnnotation.Strokes.Add(keyFramesAnnotation.Strokes);
                        //显示关键帧注释
                        _keyFrameAnnotation.Width             = keyFramesAnnotation.Width;
                        _keyFrameAnnotation.Height            = keyFramesAnnotation.Height;
                        _keyFrameAnnotation.VerticalAlignment = VerticalAlignment.Top;
                        if (videoSummarization.ShowKeyFrameCenterPoints[firstIndex].X < videoSummarization.Center.X)
                        {
                            _keyFrameAnnotation.HorizontalAlignment = HorizontalAlignment.Left;
                        }
                        else
                        {
                            _keyFrameAnnotation.HorizontalAlignment = HorizontalAlignment.Right;
                        }
                        _keyFrameAnnotation.Visibility = Visibility.Visible;
                        _inkCollector._mainPage.LayoutRoot.Children.Add(_keyFrameAnnotation);

                        //VideoSummarizationControl.BtnSpiralScreenBack.Visibility = Visibility.Collapsed;
                        //VideoSummarizationControl.BtnSpiralScreen.Visibility = Visibility.Collapsed;
                        isHasAnnotation = true;
                    }
                    break;
                }
            }
            if (isHasKeyFrame && !isHasAnnotation && _inkCollector.Mode != InkMode.AddKeyFrameAnnotationDouble)
            {
                KeyValuePair <Stroke, KeyFramesAnnotation> currPair;
                if (_keyFrameAnnotation != null && keyFramesAnnotation != null)
                {
                    _keyFrameAnnotation.Visibility = Visibility.Collapsed;
                    foreach (int index in keyFramesAnnotation.relatedKeyFrameIndexes)
                    {
                        currPair = (from KeyValuePair <Stroke, KeyFramesAnnotation> anno in _inkCollector.VideoSummarization.ShowKeyFrames[index].Annotations
                                    where anno.Value == keyFramesAnnotation
                                    select anno).First();
                        Stroke linkline = (Stroke)(currPair.Key);
                        _inkCollector._mainPage._inkCanvas.Strokes.Remove(linkline);
                    }
                }
            }
        }