protected override void DoWork() { _workerTask = Task.Run(() => { while (IsRunning) { _stopWatch.Start(); byte[] byteImage = new byte[0]; _screenCaptureService.CaptureScreenshot(ref byteImage); // If game handle is not set we will get an empty array. Just do nothing. if (byteImage == null) { HaltUntilNextInterval(); } var captureArgs = new ScreenCaptureCompletedArgs { ScreenImageStream = byteImage, ScreenBounds = _screenCaptureService.ScreenOptions.GetBoundsAsRectangle() }; OnScreenCaptureCompleted(captureArgs); if (!AutoReset) { IsRunning = false; break; } HaltUntilNextInterval(); } }); }
internal void screenCaptureWorker_ScreenCaptureCompleted(object sender, ScreenCaptureCompletedArgs captureArgs) { var imageStream = new MemoryStream(captureArgs.ScreenImageStream); var screenCaptureImage = new BitmapImage(); screenCaptureImage.BeginInit(); screenCaptureImage.StreamSource = imageStream; screenCaptureImage.CacheOption = BitmapCacheOption.OnLoad; screenCaptureImage.EndInit(); screenCaptureImage.Freeze(); Application.Current.Dispatcher.Invoke(() => { ScreenCaptureBrush = new ImageBrush(screenCaptureImage); }); }
internal void screenCaptureWorker_ScreenCaptureCompleted(object sender, ScreenCaptureCompletedArgs captureArgs) { if (captureArgs.ScreenBounds.Height == 0 || captureArgs.ScreenBounds.Width == 0) { return; } var imageStream = new MemoryStream(captureArgs.ScreenImageStream); ScreenCaptureQueue.Enqueue(new ScreenCapture() { ScreenMemoryStream = imageStream, RegionViewModels = ViewModel.RegionControl.Regions, ScreenBounds = captureArgs.ScreenBounds, CanvasBounds = captureArgs.CanvasBounds, CreationTime = DateTime.Now }); }
private void OnScreenCaptureCompleted(ScreenCaptureCompletedArgs captureArgs) { ScreenCaptureCompleted?.Invoke(this, captureArgs); }