From b6ccbb783ad71a2dbf43cb80a39e220c1394febe Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 11 Jul 2016 22:23:01 +0200 Subject: [PATCH] FEATURE-916: Added auto-fit for the .ico, using the best possible size (16x16, 32x32, 48x48 and 256x256) --- GreenshotPlugin/Core/ImageOutput.cs | 36 +++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/GreenshotPlugin/Core/ImageOutput.cs b/GreenshotPlugin/Core/ImageOutput.cs index 64f6709ff..c4419814e 100644 --- a/GreenshotPlugin/Core/ImageOutput.cs +++ b/GreenshotPlugin/Core/ImageOutput.cs @@ -641,17 +641,39 @@ namespace GreenshotPlugin.Core { IList encodedImages = new List(); foreach (var image in images) { - var imageStream = new MemoryStream(); - // Always size to 256x256, first make sure the image is 32bpp - using (var clonedImage = ImageHelper.Clone(image, PixelFormat.Format32bppArgb)) + // Pick the best fit + var sizes = new[] { 16, 32, 48 }; + int size = 256; + foreach (var possibleSize in sizes) { - using (var resizedImage = ImageHelper.ResizeImage(clonedImage, true, true, Color.Empty, 256, 256, null)) + if (image.Width <= possibleSize && image.Height <= possibleSize) { - resizedImage.Save(imageStream, ImageFormat.Png); - imageSizes.Add(resizedImage.Size); + size = possibleSize; + break; } - } + var imageStream = new MemoryStream(); + if (image.Width == size && image.Height == size) + { + using (var clonedImage = ImageHelper.Clone(image, PixelFormat.Format32bppArgb)) + { + clonedImage.Save(imageStream, ImageFormat.Png); + imageSizes.Add(new Size(size, size)); + } + } + else + { + // Resize to the specified size, first make sure the image is 32bpp + using (var clonedImage = ImageHelper.Clone(image, PixelFormat.Format32bppArgb)) + { + using (var resizedImage = ImageHelper.ResizeImage(clonedImage, true, true, Color.Empty, size, size, null)) + { + resizedImage.Save(imageStream, ImageFormat.Png); + imageSizes.Add(resizedImage.Size); + } + } + } + imageStream.Seek(0, SeekOrigin.Begin); encodedImages.Add(imageStream); }