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 { /// /// Interaction logic for MainWindow.xaml /// 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(100); _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(); } } }