diff options
Diffstat (limited to 'Software/Experiments/Tango.RemoteDesktop/WpfApp1/MainWindow.xaml.cs')
| -rw-r--r-- | Software/Experiments/Tango.RemoteDesktop/WpfApp1/MainWindow.xaml.cs | 50 |
1 files changed, 36 insertions, 14 deletions
diff --git a/Software/Experiments/Tango.RemoteDesktop/WpfApp1/MainWindow.xaml.cs b/Software/Experiments/Tango.RemoteDesktop/WpfApp1/MainWindow.xaml.cs index 85e5ca0bd..fd0df286c 100644 --- a/Software/Experiments/Tango.RemoteDesktop/WpfApp1/MainWindow.xaml.cs +++ b/Software/Experiments/Tango.RemoteDesktop/WpfApp1/MainWindow.xaml.cs @@ -34,6 +34,7 @@ namespace WpfApp1 public MainWindow() { + InitializeComponent(); ContentRendered += MainWindow_ContentRendered; @@ -41,7 +42,7 @@ namespace WpfApp1 { CaptureRegion = new CaptureRegion(0, 0, 1280, 800) }; - _engine.Interval = TimeSpan.FromMilliseconds(100); + _engine.FrameRate = 5; //Per second _engine.CaptureCursor = true; _engine.FrameReceived += _engine_FrameReceived; } @@ -54,28 +55,49 @@ namespace WpfApp1 if (e.Frame.DifferenceAvailable) { - var diffFrame = e.Frame.ToDifference(); + if (e.Frame.HasDifference) + { + var diffFrame = e.Frame.ToDifference(); + + var bitmapStream = diffFrame.OptimizeBounds().ToEncoder<PngEncoder>().ToStream(); + + size = (int)bitmapStream.Length; + + Bitmap newBitmap = new Bitmap(bitmapStream); + + diffFrame = new RasterFrame(newBitmap, diffFrame.Left, diffFrame.Top); - size = diffFrame.Encode<PngEncoder>().ToArray().Length; + diffFrame.Apply(_currentBitmap); - //diffFrame.Apply(_currentBitmap); + diffFrame.Dispose(); + bitmapStream.Dispose(); - //var updatedFrame = new RasterFrame(_currentBitmap); - //preview = updatedFrame.ToBitmapSource(); + var updatedFrame = new RasterFrame(_currentBitmap); + preview = updatedFrame.ToBitmapSource(); + + Debug.WriteLine($"Actual frame size on network: {size / 1000} kb"); + + Dispatcher.BeginInvoke(new Action(() => + { + img.Source = preview; + })); + } + else + { + //No need to send new frames (no differences)... + } } else { _currentBitmap = e.Frame.ToBitmap().Clone() as Bitmap; preview = e.Frame.ToBitmapSource(); - size = e.Frame.Encode<PngEncoder>().ToArray().Length; - } + size = e.Frame.ToEncoder<Png8BitEncoder>().ToArray().Length; - //Debug.WriteLine($"Actual frame size on network: {size / 1000} kb"); - - //Dispatcher.BeginInvoke(new Action(() => - //{ - // img.Source = preview; - //})); + Dispatcher.BeginInvoke(new Action(() => + { + img.Source = preview; + })); + } e.Frame.Dispose(); } |
