diff options
Diffstat (limited to 'Software/Experiments/Tango.RemoteDesktop/WpfApp1/MainWindow.xaml.cs')
| -rw-r--r-- | Software/Experiments/Tango.RemoteDesktop/WpfApp1/MainWindow.xaml.cs | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/Software/Experiments/Tango.RemoteDesktop/WpfApp1/MainWindow.xaml.cs b/Software/Experiments/Tango.RemoteDesktop/WpfApp1/MainWindow.xaml.cs new file mode 100644 index 000000000..85e5ca0bd --- /dev/null +++ b/Software/Experiments/Tango.RemoteDesktop/WpfApp1/MainWindow.xaml.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using System.Windows.Threading; +using Tango.RemoteDesktop; +using Tango.RemoteDesktop.CaptureMethods; +using Tango.RemoteDesktop.Encoders; +using Tango.RemoteDesktop.Engines; +using Tango.RemoteDesktop.Frames; + +namespace WpfApp1 +{ + /// <summary> + /// Interaction logic for MainWindow.xaml + /// </summary> + public partial class MainWindow : Window + { + private RasterScreenCaptureEngine _engine; + private Bitmap _currentBitmap; + + public MainWindow() + { + InitializeComponent(); + ContentRendered += MainWindow_ContentRendered; + + _engine = new RasterScreenCaptureEngine() + { + CaptureRegion = new CaptureRegion(0, 0, 1280, 800) + }; + _engine.Interval = TimeSpan.FromMilliseconds(100); + _engine.CaptureCursor = true; + _engine.FrameReceived += _engine_FrameReceived; + } + + private void _engine_FrameReceived(object sender, ScreenCaptureFrameReceivedEventArgs<RasterFrame> e) + { + BitmapSource preview = null; + + int size = 0; + + if (e.Frame.DifferenceAvailable) + { + var diffFrame = e.Frame.ToDifference(); + + size = diffFrame.Encode<PngEncoder>().ToArray().Length; + + //diffFrame.Apply(_currentBitmap); + + //var updatedFrame = new RasterFrame(_currentBitmap); + //preview = updatedFrame.ToBitmapSource(); + } + else + { + _currentBitmap = e.Frame.ToBitmap().Clone() as Bitmap; + preview = e.Frame.ToBitmapSource(); + size = e.Frame.Encode<PngEncoder>().ToArray().Length; + } + + //Debug.WriteLine($"Actual frame size on network: {size / 1000} kb"); + + //Dispatcher.BeginInvoke(new Action(() => + //{ + // img.Source = preview; + //})); + + e.Frame.Dispose(); + } + + private void MainWindow_ContentRendered(object sender, EventArgs e) + { + _engine.Start(); + } + } +} |
