diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-03-02 00:10:25 +0200 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2020-03-02 00:10:25 +0200 |
| commit | 6488158b9fd003d690eb015cf9a644112a363f71 (patch) | |
| tree | 135b4a9b0bd1fb1a977ee2f3e97403f5086b1fb6 /Software/Experiments/Tango.RemoteDesktop/Tango.ScreenCapture/WpfApp1/MainWindow.xaml.cs | |
| parent | 7e09a1b9f4227e536031a751619869c824a7af35 (diff) | |
| download | Tango-6488158b9fd003d690eb015cf9a644112a363f71.tar.gz Tango-6488158b9fd003d690eb015cf9a644112a363f71.zip | |
Implemented Tango.RemoteDesktop using generic Diff Frame.
Diffstat (limited to 'Software/Experiments/Tango.RemoteDesktop/Tango.ScreenCapture/WpfApp1/MainWindow.xaml.cs')
| -rw-r--r-- | Software/Experiments/Tango.RemoteDesktop/Tango.ScreenCapture/WpfApp1/MainWindow.xaml.cs | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/Software/Experiments/Tango.RemoteDesktop/Tango.ScreenCapture/WpfApp1/MainWindow.xaml.cs b/Software/Experiments/Tango.RemoteDesktop/Tango.ScreenCapture/WpfApp1/MainWindow.xaml.cs new file mode 100644 index 000000000..2ebcc9d73 --- /dev/null +++ b/Software/Experiments/Tango.RemoteDesktop/Tango.ScreenCapture/WpfApp1/MainWindow.xaml.cs @@ -0,0 +1,85 @@ +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.ScreenCapture; + +namespace WpfApp1 +{ + /// <summary> + /// Interaction logic for MainWindow.xaml + /// </summary> + public partial class MainWindow : Window + { + private ScreenCaptureEngine _capture; + private Bitmap _currentBitmap; + + public MainWindow() + { + InitializeComponent(); + ContentRendered += MainWindow_ContentRendered; + + _capture = new ScreenCaptureEngine() + { + CaptureRegion = new CaptureRegion(0, 0, 1280, 800) + }; + _capture.Interval = TimeSpan.FromMilliseconds(30); + _capture.CaptureCursor = true; + _capture.CaptureMethod = new DirectXScreenCapture(); + _capture.ScreenFrameReceived += _capture_ScreenFrameReceived; + } + + private void MainWindow_ContentRendered(object sender, EventArgs e) + { + _capture.Start(); + } + + private void _capture_ScreenFrameReceived(object sender, ScreenCaptureFrameReceivedEventArgs e) + { + BitmapSource preview = null; + + int size = 0; + + if (e.Frame.HasDifferenceFrame) + { + size = e.Frame.ToDifferenceCaptureFrame().ToPng().Length; + + using (Graphics g = Graphics.FromImage(_currentBitmap)) + { + g.DrawImage(e.Frame.ToBitmap(), new System.Drawing.Point(0, 0)); + ScreenCaptureFrame frame = new ScreenCaptureFrame(_currentBitmap, null); + preview = frame.ToBitmapSource(); + } + } + else + { + _currentBitmap = e.Frame.ToBitmap().Clone() as Bitmap; + preview = e.Frame.ToBitmapSource(); + size = e.Frame.ToPng().Length; + } + + //Debug.WriteLine($"Actual frame size on network: {size / 1000} kb"); + + Dispatcher.BeginInvoke(new Action(() => + { + img.Source = preview; + })); + + e.Frame.Dispose(); + } + } +} |
