From f46da0f7f1d77ff34aafc5d9cce0ec3ca4e5a3a6 Mon Sep 17 00:00:00 2001 From: Jared Goodwin Date: Sun, 16 Aug 2020 12:44:15 -0700 Subject: [PATCH] Capture full screen after capturer init. --- Desktop.Core/Services/ScreenCaster.cs | 8 ++++++-- Desktop.Core/Utilities/ImageUtils.cs | 5 +++++ Desktop.Linux/Services/ScreenCapturerLinux.cs | 3 ++- Desktop.Win/Services/ScreenCapturerWin.cs | 1 + 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Desktop.Core/Services/ScreenCaster.cs b/Desktop.Core/Services/ScreenCaster.cs index 97dde1f3..a3cd2eba 100644 --- a/Desktop.Core/Services/ScreenCaster.cs +++ b/Desktop.Core/Services/ScreenCaster.cs @@ -119,8 +119,12 @@ namespace Remotely.Desktop.Core.Services viewer.ThrottleIfNeeded(); - previousFrame?.Dispose(); - previousFrame = (Bitmap)currentFrame?.Clone(); + if (currentFrame != null) + { + previousFrame?.Dispose(); + previousFrame = (Bitmap)currentFrame.Clone(); + } + currentFrame?.Dispose(); currentFrame = viewer.Capturer.GetNextFrame(); diff --git a/Desktop.Core/Utilities/ImageUtils.cs b/Desktop.Core/Utilities/ImageUtils.cs index dfc3c98b..cc5c7b36 100644 --- a/Desktop.Core/Utilities/ImageUtils.cs +++ b/Desktop.Core/Utilities/ImageUtils.cs @@ -21,6 +21,11 @@ namespace Remotely.Desktop.Core.Utilities public static Rectangle GetDiffArea(Bitmap currentFrame, Bitmap previousFrame, bool captureFullscreen) { + if (currentFrame == null || previousFrame == null) + { + return Rectangle.Empty; + } + if (captureFullscreen) { return new Rectangle(new Point(0, 0), currentFrame.Size); diff --git a/Desktop.Linux/Services/ScreenCapturerLinux.cs b/Desktop.Linux/Services/ScreenCapturerLinux.cs index 11eec973..4ab08d05 100644 --- a/Desktop.Linux/Services/ScreenCapturerLinux.cs +++ b/Desktop.Linux/Services/ScreenCapturerLinux.cs @@ -24,7 +24,7 @@ namespace Remotely.Desktop.Linux.Services public event EventHandler ScreenChanged; - public bool CaptureFullscreen { get; set; } + public bool CaptureFullscreen { get; set; } = true; public Rectangle CurrentScreenBounds { get; private set; } public IntPtr Display { get; private set; } public string SelectedScreen { get; private set; } @@ -81,6 +81,7 @@ namespace Remotely.Desktop.Linux.Services { try { + CaptureFullscreen = true; x11Screens.Clear(); for (var i = 0; i < GetScreenCount(); i++) diff --git a/Desktop.Win/Services/ScreenCapturerWin.cs b/Desktop.Win/Services/ScreenCapturerWin.cs index eeb51d75..1a71f878 100644 --- a/Desktop.Win/Services/ScreenCapturerWin.cs +++ b/Desktop.Win/Services/ScreenCapturerWin.cs @@ -116,6 +116,7 @@ namespace Remotely.Desktop.Win.Services public void Init() { + CaptureFullscreen = true; InitBitBlt(); InitDirectX();