public async Task StartServer(string ip, int port) { _server = new NetServer(ip, port); _server.StartServer(); ScreenCaptureThread screen_capture_thread = new ScreenCaptureThread(); screen_capture_thread.OnFrameReady += (sender, frame_bytes) => { logger.Information("Captured " + frame_bytes.Length + " bytes."); if (previous_frame_bytes != null) { // If it's NOT the first frame, then send the differences between frames. Bitmap image_diff = ScreenInterpolator.GetDeltaImage( ScreenCaptureWPFRenderer.Render(previous_frame_bytes).ToBitmap(), ScreenCaptureWPFRenderer.Render(frame_bytes).ToBitmap(), Color.Purple ); previous_frame_bytes = frame_bytes; frame_bytes = image_diff.ToByteArray(); // Instead of sending frame - send differences. } else { // If it's the first frame, just send it. previous_frame_bytes = frame_bytes; } // Send frame/differences to clients. _server.SendBytesBroadcast(frame_bytes); }; screen_capture_thread.StartCapture(); await Task.FromResult <object>(null); }
public void ReadServerResponse() { logger.Information("Capture started."); _client.OnServerMessage((frame_bytes) => { logger.Information("Received from server " + frame_bytes.Length + " bytes. Rendering..."); BitmapImage server_image_data = ScreenCaptureWPFRenderer.Render(frame_bytes); if (previous_image != null) { Bitmap image_reconstructed = ScreenInterpolator.AddDeltaImage( previous_image.ToBitmap(), server_image_data.ToBitmap(), Color.Purple ); server_image_data = image_reconstructed.ToBitmapImage(); } previous_image = server_image_data; OnServerMessage?.Invoke(server_image_data); }); }