Skip to content

Commit

Permalink
Resize images based on quality.
Browse files Browse the repository at this point in the history
  • Loading branch information
bitbound committed Apr 24, 2021
1 parent afbd127 commit 998728a
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 6 deletions.
13 changes: 8 additions & 5 deletions Desktop.Core/Services/ScreenCaster.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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;
Expand Down
6 changes: 5 additions & 1 deletion Tests/ManualTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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}");
Expand Down

0 comments on commit 998728a

Please sign in to comment.