private void ApplyResize(SKBitmap original, InputImageParameters inputImage, OutputImageParameters outputImage)
        {
            if (!outputImage.Resized)
            {
                return;
            }

            using (SKBitmap resized = original.Resize(new SKImageInfo(outputImage.Width, outputImage.Height), SKFilterQuality.High))
            {
                if (resized == null)
                {
                    throw new ArgumentException {
                              Data = { { "ValidationData", new { Body = new { Image = "Something wrong with incoming image" } } } }
                    }
                }
                ;

                using (SKImage image = SKImage.FromBitmap(resized))
                {
                    MemoryStream output = new MemoryStream();
                    image.Encode(inputImage.Format, outputImage.Quality).SaveTo(output);

                    outputImage.OutputStream = output;
                }
            }
        }
        public IEnumerable <OutputImageParameters> ResizeMultiple(InputImageParameters inputImage, IEnumerable <ImageSizeParam> targetSizes)
        {
            using (SKBitmap original = SKBitmap.Decode(inputImage.InputStream))
            {
                if (original == null)
                {
                    throw new ArgumentException {
                              Data = { { "ValidationData", new { Body = new { Image = "Something wrong with incoming image" } } } }
                    }
                }
                ;

                IOrderedEnumerable <OutputImageParameters> outputImages = targetSizes
                                                                          .Select(targetSize => CalculateSize(original.Width, original.Height, targetSize, inputImage.MinimumDifference))
                                                                          .OrderByDescending(s => s.Width);

                foreach (OutputImageParameters outputImage in outputImages)
                {
                    if (!outputImage.Resized)
                    {
                        continue;
                    }

                    ApplyResize(original, inputImage, outputImage);

                    yield return(outputImage);
                }
            }
        }
        private OutputImageParameters Resize(SKBitmap original, InputImageParameters inputImage, ImageSizeParam targetSize)
        {
            OutputImageParameters outputImage = CalculateSize(original.Width, original.Height, targetSize, inputImage.MinimumDifference);

            ApplyResize(original, inputImage, outputImage);

            return(outputImage);
        }
        public OutputImageParameters Resize(InputImageParameters inputImage, ImageSizeParam targetSize)
        {
            using (SKBitmap original = SKBitmap.Decode(inputImage.InputStream))
            {
                if (original == null)
                {
                    throw new ArgumentException {
                              Data = { { "ValidationData", new { Body = new { Image = "Something wrong with incoming image" } } } }
                    }
                }
                ;

                return(Resize(original, inputImage, targetSize));
            }
        }