コード例 #1
0
        public static void CaptureScreen(Uri source, Dictionary<TimeSpan, object> captureList, double scale, CaptureWorkerDelegate finalWorkerPrimary, CaptureWorkerDelegate finalWorkerThumbnail)
        {
            var mutexLock = new Mutex(false, source.GetHashCode().ToString());
            mutexLock.WaitOne();

            var player = new MediaPlayer { Volume = 0, ScrubbingEnabled = true };

            player.Open(source);
            player.Pause();
            foreach (var pair in captureList)
            {
                var timeSpan = pair.Key;
                var state = pair.Value;

                player.Position = timeSpan;
                Thread.Sleep(1000);

                var width = player.NaturalVideoWidth;
                var height = player.NaturalVideoHeight;

                var rtb = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
                var dv = new DrawingVisual();

                using (DrawingContext dc = dv.RenderOpen())
                    dc.DrawVideo(player, new Rect(0, 0, width, height));

                rtb.Render(dv);
                var frame = BitmapFrame.Create(rtb).GetCurrentValueAsFrozen();
                if (finalWorkerPrimary != null)
                    finalWorkerPrimary(frame as BitmapFrame, state);

                if (scale > 0 && finalWorkerThumbnail != null)
                {
                    var thumbnailFrame =
                        BitmapFrame.Create(new TransformedBitmap(frame as BitmapSource, new ScaleTransform(scale, scale))).
                            GetCurrentValueAsFrozen();
                    var encoder = new JpegBitmapEncoder();
                    encoder.Frames.Add(thumbnailFrame as BitmapFrame);

                    finalWorkerThumbnail(thumbnailFrame as BitmapFrame, state);
                }
            }
            player.Close();
            mutexLock.ReleaseMutex();
        }
コード例 #2
0
ファイル: VideoScreenShot.cs プロジェクト: realM4C/thumbgen
        public static bool CaptureScreen(Uri source, Dictionary <TimeSpan, object> captureList, double scale, CaptureWorkerDelegate finalWorkerPrimary, CaptureWorkerDelegate finalWorkerThumbnail)
        {
            bool _result = false;

            var mutexLock = new Mutex(false, source.GetHashCode().ToString());

            mutexLock.WaitOne();

            var player = new MediaPlayer {
                Volume = 0, ScrubbingEnabled = true
            };

            player.Open(source);
            player.Pause();
            foreach (var pair in captureList)
            {
                var timeSpan = pair.Key;
                var state    = pair.Value;

                //player.Play();
                player.Position = timeSpan;
                Thread.Sleep(1000);
                //player.Pause();

                int width  = player.NaturalVideoWidth;
                int height = player.NaturalVideoHeight;

                if (player.NaturalVideoWidth != 0 && player.NaturalVideoHeight != 0)
                {
                    var rtb = new RenderTargetBitmap(player.NaturalVideoWidth, player.NaturalVideoHeight, 96, 96, PixelFormats.Pbgra32);
                    var dv  = new DrawingVisual();

                    using (DrawingContext dc = dv.RenderOpen())
                        dc.DrawVideo(player, new Rect(0, 0, player.NaturalVideoWidth, player.NaturalVideoHeight));

                    rtb.Render(dv);
                    var frame = BitmapFrame.Create(rtb).GetCurrentValueAsFrozen();
                    if (finalWorkerPrimary != null)
                    {
                        finalWorkerPrimary(frame as BitmapFrame, state);
                    }

                    _result = true;
                }
                //if (scale > 0 && finalWorkerThumbnail != null)
                //{
                //    var thumbnailFrame =
                //        BitmapFrame.Create(new TransformedBitmap(frame as BitmapSource, new ScaleTransform(scale, scale))).
                //            GetCurrentValueAsFrozen();
                //    var encoder = new JpegBitmapEncoder();
                //    encoder.Frames.Add(thumbnailFrame as BitmapFrame);

                //    finalWorkerThumbnail(thumbnailFrame as BitmapFrame, state);
                //}
            }
            player.Stop();
            player.Close();
            player = null;
            mutexLock.ReleaseMutex();

            return(_result);
        }
コード例 #3
0
ファイル: VideoScreenShot.cs プロジェクト: realM4C/thumbgen
 public static void CaptureScreen(Uri source, TimeSpan timeSpan, object state, double scale, CaptureWorkerDelegate finalWorkerPrimary, CaptureWorkerDelegate finalWorkerThumbnail)
 {
     CaptureScreen(source, new Dictionary <TimeSpan, object> {
         { timeSpan, state }
     }, scale, finalWorkerPrimary, finalWorkerThumbnail);
 }
コード例 #4
0
ファイル: VideoScreenShot.cs プロジェクト: realM4C/thumbgen
 public static bool CaptureScreen(Uri source, Dictionary <TimeSpan, object> captureList, CaptureWorkerDelegate finalWorkerPrimary)
 {
     return(CaptureScreen(source, captureList, -1, finalWorkerPrimary, null));
 }
コード例 #5
0
ファイル: VideoScreenShot.cs プロジェクト: realM4C/thumbgen
 public static void CaptureScreen(Uri source, TimeSpan timeSpan, object state, CaptureWorkerDelegate finalWorkerPrimary)
 {
     CaptureScreen(source, timeSpan, state, -1, finalWorkerPrimary, null);
 }
コード例 #6
0
ファイル: VideoScreenShot.cs プロジェクト: realM4C/thumbgen
 public static void CaptureScreenAsync(Uri source, Dictionary <TimeSpan, object> captureList, double scale, CaptureWorkerDelegate finalWorkerPrimary, CaptureWorkerDelegate finalWorkerThumbnail)
 {
     ThreadPool.QueueUserWorkItem(delegate { CaptureScreen(source, captureList, scale, finalWorkerPrimary, finalWorkerThumbnail); });
 }
コード例 #7
0
ファイル: VideoScreenShot.cs プロジェクト: realM4C/thumbgen
 public static void CaptureScreenAsync(Uri source, Dictionary <TimeSpan, object> captureList, CaptureWorkerDelegate finalWorkerPrimary)
 {
     CaptureScreenAsync(source, captureList, -1, finalWorkerPrimary, null);
 }
コード例 #8
0
 public static void CaptureScreenAsync(Uri source, Dictionary<TimeSpan, object> captureList, double scale, CaptureWorkerDelegate finalWorkerPrimary, CaptureWorkerDelegate finalWorkerThumbnail)
 {
     ThreadPool.QueueUserWorkItem(delegate { CaptureScreen(source, captureList, scale, finalWorkerPrimary, finalWorkerThumbnail); });
 }
コード例 #9
0
 public static void CaptureScreenAsync(Uri source, TimeSpan timeSpan, object state, double scale, CaptureWorkerDelegate finalWorkerPrimary, CaptureWorkerDelegate finalWorkerThumbnail)
 {
     CaptureScreenAsync(source, new Dictionary<TimeSpan, object> { { timeSpan, state } }, scale, finalWorkerPrimary, finalWorkerThumbnail);
 }
コード例 #10
0
 public static void CaptureScreenAsync(Uri source, Dictionary<TimeSpan, object> captureList, CaptureWorkerDelegate finalWorkerPrimary)
 {
     CaptureScreenAsync(source, captureList, -1, finalWorkerPrimary, null);
 }
コード例 #11
0
 public static void CaptureScreenAsync(Uri source, TimeSpan timeSpan, object state, CaptureWorkerDelegate finalWorkerPrimary)
 {
     CaptureScreenAsync(source, timeSpan, state, -1, finalWorkerPrimary, null);
 }