diff --git a/Desktop.Core/Services/ScreenCaster.cs b/Desktop.Core/Services/ScreenCaster.cs index bbfb5a89e..8f1ca93bd 100644 --- a/Desktop.Core/Services/ScreenCaster.cs +++ b/Desktop.Core/Services/ScreenCaster.cs @@ -167,20 +167,18 @@ await viewer.SendScreenCapture(new CaptureFrame() refreshNeeded = false; } - using var clone = currentFrame.Clone(diffArea, currentFrame.PixelFormat); - byte[] encodedImageBytes; if (viewer.Capturer.CaptureFullscreen) { // Recalculate Bps. viewer.AverageBytesPerSecond = 0; - encodedImageBytes = ImageUtils.EncodeJpeg(clone, _maxQuality); + encodedImageBytes = ImageUtils.EncodeJpeg(currentFrame, _maxQuality); } else { if (viewer.AverageBytesPerSecond > 0) { - var expectedSize = clone.Height * clone.Width * 4 * .1; + var expectedSize = diffArea.Height * diffArea.Width * 4 * .1; var timeToSend = expectedSize / viewer.AverageBytesPerSecond; currentQuality = Math.Max(_minQuality, Math.Min(_maxQuality, (int)(.1 / timeToSend * _maxQuality))); if (currentQuality < _maxQuality - 10) @@ -189,7 +187,12 @@ await viewer.SendScreenCapture(new CaptureFrame() Debug.WriteLine($"Quality Reduced: {currentQuality}"); } } - encodedImageBytes = ImageUtils.EncodeJpeg(clone, currentQuality); + + using var clone = currentFrame.Clone(diffArea, currentFrame.PixelFormat); + var resizeW = diffArea.Width * currentQuality / 100; + var resizeH = diffArea.Height * currentQuality / 100; + using var resized = new Bitmap(clone, new Size(resizeW, resizeH)); + encodedImageBytes = ImageUtils.EncodeJpeg(resized, currentQuality); } viewer.Capturer.CaptureFullscreen = false; diff --git a/Tests/ManualTests.cs b/Tests/ManualTests.cs index 254230e32..6d9310bf8 100644 --- a/Tests/ManualTests.cs +++ b/Tests/ManualTests.cs @@ -96,8 +96,12 @@ public void EncodingTests() var diffSize = 0; using (var tempImage = (Bitmap)frame1.Clone(new Rectangle(diff.X, diff.Y, diff.Width, diff.Height), PixelFormat.Format32bppArgb)) { + var resizeW = diff.Width * 60 / 100; + var resizeH = diff.Height * 60 / 100; + using var resized = new Bitmap(tempImage, new Size(resizeW, resizeH)); + using var ms = new MemoryStream(); - tempImage.Save(ms, jpegEncoder, encoderParams); + resized.Save(ms, jpegEncoder, encoderParams); diffSize = ms.ToArray().Length; } Debug.WriteLine($"Diff area size: {diffSize}");