public async Task Capture() { var capturer = new ScreenCapturerWin(); capturer.GetNextFrame(); Process.Start("msg", "* test"); await Task.Delay(500); capturer.GetNextFrame(); var diffArea = ImageUtils.GetDiffArea(capturer.CurrentFrame, capturer.PreviousFrame, false); if (diffArea.IsEmpty) { return; } using (var newImage = capturer.CurrentFrame.Clone(diffArea, PixelFormat.Format32bppArgb)) { if (capturer.CaptureFullscreen) { capturer.CaptureFullscreen = false; } newImage.Save(Path.Combine(Path.GetTempPath(), "!ImageDiff.jpg"), ImageFormat.Jpeg); capturer.CurrentFrame.Save(Path.Combine(Path.GetTempPath(), "!Current.jpg"), ImageFormat.Jpeg); capturer.PreviousFrame.Save(Path.Combine(Path.GetTempPath(), "!Previous.jpg"), ImageFormat.Jpeg); } }
public void Init() { _conductor = new Conductor(); _cursorWatcher = new Mock <ICursorIconWatcher>(); _sessionIndicator = new Mock <ISessionIndicator>(); _clipboard = new Mock <IClipboardService>(); _webrtcFactory = new Mock <IWebRtcSessionFactory>(); _casterSocket = new Mock <ICasterSocket>(); _audio = new Mock <IAudioCapturer>(); _shutdown = new Mock <IShutdownService>(); _capturer = new ScreenCapturerWin(); _screenCaster = new ScreenCaster(_conductor, _cursorWatcher.Object, _sessionIndicator.Object, _shutdown.Object); _viewer = new Viewer(_casterSocket.Object, _capturer, _clipboard.Object, _webrtcFactory.Object, _audio.Object); _casterSocket .Setup(x => x.SendDtoToViewer(It.IsAny <CaptureFrameDto>(), It.IsAny <string>())) .Callback((CaptureFrameDto dto, string viewerId) => { _bytesSent += dto.ImageBytes.Length; }); _casterSocket .Setup(x => x.SendDtoToViewer(It.Is <CaptureFrameDto>(x => x.EndOfFrame), It.IsAny <string>())) .Callback(() => { Task.Run(() => { Thread.Sleep(RoundtripLatency); _viewer.PendingSentFrames.TryDequeue(out _); }); }); _casterSocket .Setup(x => x.IsConnected) .Returns(true) .Callback(() => _frameCount++); var serviceCollection = new ServiceCollection(); serviceCollection.AddLogging(builder => { builder.AddConsole().AddDebug().AddEventLog(); }); serviceCollection.AddSingleton((e) => _viewer); ServiceContainer.Instance = serviceCollection.BuildServiceProvider(); }