Beispiel #1
0
        /// <summary>
        /// 指定时间来截取视频中的图片
        /// </summary>
        /// <param name="FileName"></param>
        /// <param name="ImgFormat"></param>
        /// <param name="lTime"></param>
        public Image GetImage(double lTime)
        {
            Image img      = null;
            int   MaxCount = lTime <= 0 ? DESConsts.BitCount : (int)lTime * DESConsts.BitCount;

            try
            {
                Panel pnl = new Panel();
                pVideo     = new DESVideoCallBack();
                pnl.Width  = this.hWin.Width;
                pnl.Height = this.hWin.Height;
                des.RenderToFrame(pnl, pVideo, null, DynamicTextDS, DsRect.FromRectangle(hWin.ClientRectangle), 0, ds.PlayLength);
                des.StartRendering();
                des.put_CurrentPosition(lTime);
                while (pVideo.m_FrameCount < MaxCount)
                {
                    Thread.Sleep(100);
                }
                des.Pause();
                img = des.GetImage();
                des.Cancel();
            }
            catch
            {
                des.Cancel();
                des = null;
            }
            return(img);
        }
Beispiel #2
0
 /// <summary>
 /// 构造和初始播放视频的数据
 /// </summary>
 /// <param name="ds"></param>
 /// <param name="myWin"></param>
 public Play(VideoLayerCollection myDS, DESVideoCallBack pVideoCallback, Control myWin)
 {
     hWin   = myWin;
     ds     = myDS;
     pVideo = pVideoCallback;
     ds.Sort(new SortComparer <Layer>("Level", false));
     des           = new DESCombine(DESConsts.FPS, DESConsts.BitCount, hWin.Width, hWin.Height, ds);
     DynamicTextDS = ds.FindAll(DynamicTextLayer);
 }
Beispiel #3
0
 /// <summary>
 /// 释放资源
 /// </summary>
 protected override void Dispose(bool disposing)
 {
     if (des != null)
     {
         des.Dispose();
         des = null;
     }
     if (PlayEvent != null)
     {
         PlayEvent = null;
     }
     if (PlayListCompleted != null)
     {
         PlayListCompleted = null;
     }
     if (PlayCompleted != null)
     {
         PlayCompleted = null;
     }
     if (m_PlayBar != null)
     {
         m_PlayBar = null;
     }
     if (m_MediaTime != null)
     {
         m_MediaTime = null;
     }
     if (pVideo != null)
     {
         pVideo = null;
     }
     if (hWin != null)
     {
         hWin = null;
     }
 }
Beispiel #4
0
        /// <summary>
        ///  Start PlayList
        /// </summary>
        private void StartPlay()
        {
            EventArgs ca      = new EventArgs();
            int       RunTime = 0;

            curNum    = 0;
            PlayState = PlayState.Next;
            while (curNum >= 0 && curNum < dsArr.Length)
            {
                if (PlayState == PlayState.Stop)
                {
                    if (des != null)
                    {
                        des.Cancel();
                    }
                    break;
                }

                if (PlayState == PlayState.Next)
                {
                    dsArr[curNum].Sort(new SortComparer <Layer>("Level", false));
                    des            = new DESCombine(DESConsts.FPS, DESConsts.BitCount, hWin.Width, hWin.Height, dsArr[curNum]);
                    DynamicTextDS  = dsArr[curNum].FindAll(DynamicTextLayer);
                    des.Completed += new EventHandler(Completed);
                    pVideo         = new DESVideoCallBack(RunTime, m_PlayBar, m_MediaTime);
                    des.RenderToFrame(hWin, pVideo, null, DynamicTextDS, DsRect.FromRectangle(hWin.ClientRectangle), 0, dsArr[curNum].PlayLength);
                    des.StartRendering();
                    PlayState  = PlayState.Run;
                    PlayLength = DESHelper.FormatTime(dsArr[curNum].PlayLength);
                }
                else
                {
                    if (PlayState == PlayState.Run)
                    {
                        curLength += 1000000;
                    }
                    if (curLength >= PlayLength)
                    {
                        RunTime += (int)dsArr[curNum].PlayLength;
                        curNum++;
                        curLength = 0;
                        PlayState = PlayState.Next;
                        if (curNum == dsArr.Length)
                        {
                            PlayState = PlayState.Stop;
                        }
                        if (des != null)
                        {
                            des.Stop();
                        }
                    }
                    Thread.Sleep(100);
                }
            }

            if (des != null)
            {
                des.Cancel();
            }
            hWin.Refresh();
            if (PlayListCompleted != null)
            {
                PlayListCompleted(this, ca);
            }
        }
Beispiel #5
0
        public void Generate()
        {
            Check.Require(Layers, "Layers", Check.NotNull);
            Check.Require(Layers.Length, "Layers.Length", Check.GreaterThan <int>(0));
            Check.Require(HWnd, "HWnd", Check.NotNull);
            Check.Require(Tick, "Tick", Check.GreaterThanOrEqual <int>(0));

            var layers = helper.PopulateDataBatchLoad(Layers);

            layers.BackColor = HWnd.BackColor;
            //layers.VideoSize = new Size(ControlService.SignCombo.Current.Width, ControlService.SignCombo.Current.Height);
            layers.VideoSize = HWnd.Size;
            layers.Sort(new SortComparer <Layer>("Level", false));
            var DynamicTextDS = layers.FindAll(item => { return(item.LayerType == LayerType.DynamicText); });

            if (layers.Count == 0)
            {
                //TODO:
                var img = new Bitmap(HWnd.Width, HWnd.Height);
                using (var g = Graphics.FromImage(img))
                {
                    g.Clear(HWnd.BackColor);
                }
                NailImage = img;
                return;
            }

            //using (var des = new DESCombine(DESConsts.FPS, DESConsts.BitCount, HWnd.Width, HWnd.Height, layers))
            var des = new DESCombine(DESConsts.FPS, DESConsts.BitCount, layers.VideoSize.Width, layers.VideoSize.Height, layers);
            {
                int MaxCount             = Tick <= 0 ? DESConsts.BitCount : (int)Tick * DESConsts.BitCount;
                ManualResetEvent mre     = new ManualResetEvent(false);
                bool             hasSign = false;
                try
                {
                    Control.CheckForIllegalCrossThreadCalls = false;
                    Panel pnl      = new Panel();
                    var   callback = new DESVideoCallBack();

                    EventHandler onCompleted = delegate
                    {
                        if (des != null)
                        {
                            des.Dispose();
                        }
                        Control.CheckForIllegalCrossThreadCalls = true;
                        if (!hasSign)
                        {
                            hasSign = true;
                            mre.Set();
                        }
                    };

                    callback.OnCallBack = () =>
                    {
                        try
                        {
                            if (callback.m_FrameCount == 5)
                            {
                                des.Pause();
                                hasSign = true;
                                mre.Set();
                            }
                        }
                        catch
                        {
                        }
                    };
                    des.Completed += onCompleted;
                    pnl.Width      = layers.VideoSize.Width;
                    pnl.Height     = layers.VideoSize.Height;
                    des.RenderToFrame(pnl, callback, null, DynamicTextDS, DsRect.FromRectangle(HWnd.ClientRectangle), 0, layers.PlayLength);
                    des.StartRendering();
                    des.put_CurrentPosition(Tick);

                    mre.WaitOne();
                    mre.Close();

                    if (des != null && !des.IsDisposed)
                    {
                        NailImage = des.GetImage();
                        des.Cancel();
                    }
                }
                catch
                {
                    des.Cancel();
                }
            }
        }