//методы
        public static QueryResult<byte[]> FillSize(byte[] inputBytes, ImageTargetParameters parameters)
        {
            bool hasExceptions = false;
            MemoryStream outputStream = new MemoryStream();

            try
            {
                MemoryStream inputStream = new MemoryStream(inputBytes);
                using (Image inputImage = Image.FromStream(inputStream))
                {
                    ImageNewSizes sizes = new ImageNewSizes(inputImage.Width, inputImage.Height);
                    if (sizes.IsEmpty)
                    {
                        return new QueryResult<byte[]>(null, true);
                    }

                    PickResizeType(parameters, sizes);

                    if (sizes.IsEmpty)
                    {
                        return new QueryResult<byte[]>(null, true);
                    }

                    SaveToStream(inputImage, outputStream, parameters, sizes);
                }
            }
            catch(Exception exception)
            {
                hasExceptions = true;
            }

            return new QueryResult<byte[]>(outputStream.ToArray(), hasExceptions);
        }
        private static void SaveToStream(Image inputImage, Stream outputStream
            , ImageTargetParameters parameters, ImageNewSizes sizes)
        {
            using (Bitmap newImage = new Bitmap(sizes.Width, sizes.Height))
            {
                using (Graphics g = Graphics.FromImage(newImage))
                {
                    g.SmoothingMode = SmoothingMode.HighSpeed;
                    g.InterpolationMode = InterpolationMode.Bilinear;
                    g.PixelOffsetMode = PixelOffsetMode.HighSpeed;
                    g.Clear(Color.White);

                    if (parameters.RoundCorners)
                    {
                        GraphicsPath roundPath = CreateRoundPath(sizes.DrawingRegion, 6);
                        g.SetClip(roundPath);
                    }

                    g.DrawImage(inputImage,sizes.DrawingRegion, sizes.CropRegion, GraphicsUnit.Pixel);
                }
                newImage.Save(outputStream, parameters.TargetFormat);
            }
        }
 private static void PickResizeType(ImageTargetParameters parameters, ImageNewSizes sizes)
 {
     if (parameters.ResizeType == ImageResizeType.FitRatio)
     {
         LowerAllProportionally(parameters.Width, parameters.Height, sizes);
         RaiseToLowestProportionally(parameters.Width, parameters.Height, sizes);
     }
     else if (parameters.ResizeType == ImageResizeType.FitAndFill)
     {
         LowerAllProportionally(parameters.Width, parameters.Height, sizes);
         RaiseToLowestProportionally(parameters.Width, parameters.Height, sizes);
         AddSpaceOnBorders(parameters.Width, parameters.Height, sizes);
     }
     else if (parameters.ResizeType == ImageResizeType.FitHeightAndCropWidth)
     {
         LowerAllProportionally(parameters.Width, parameters.Height, sizes);
         RaiseHeightProportionally(parameters.Height, sizes);
         CutAll(parameters.Width, parameters.Height, sizes);
     }
     else if (parameters.ResizeType == ImageResizeType.FitWidthAndCropHeight)
     {
         LowerAllProportionally(parameters.Width, parameters.Height, sizes);
         RaiseWidthProportionally(parameters.Width, sizes);
         CutAll(parameters.Width, parameters.Height, sizes);
     }
     else if (parameters.ResizeType == ImageResizeType.FitWidthAndSqueezeHeight)
     {
         LowerAllProportionally(parameters.Width, parameters.Height, sizes);
         RaiseWidthProportionally(parameters.Width, sizes);
         FillHeightIfBigger(parameters.Height, sizes);
     }
 }