private Bitmap resizeImageToBitmap(string trackingId, Image image, int width, int height) { var innerRect = ResizeMath.KeepRatio(image.Width, image.Height, width, height); _log.info(trackingId, () => $"resize {image.Width}x{image.Height} --> {width}x{height} = [{innerRect.Top} {innerRect.Left} {innerRect.Width}x{innerRect.Height}]"); var destImage = new Bitmap(width, height); destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); using (var graphics = Graphics.FromImage(destImage)) { graphics.CompositingMode = CompositingMode.SourceCopy; graphics.CompositingQuality = CompositingQuality.HighQuality; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; using (var wrapMode = new ImageAttributes()) { wrapMode.SetWrapMode(WrapMode.TileFlipXY); graphics.DrawImage(image, innerRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode); } fillMargins(graphics, width, height, innerRect, Brushes.Black); } return(destImage); }
public void With_same_dimensions_They_are_kept() { Assert.IsTrue(ResizeMath .KeepRatio(300, 200, 300, 200) .SameAs(0, 0, 300, 200)); }
public void With_different_ratio_X_ration_is_adjusted() { Assert.IsTrue(ResizeMath .KeepRatio(300, 200, 280, 100) .SameAs(65, 0, 150, 100)); }
public void With_different_ratio_Y_ration_is_adjusted() { Assert.IsTrue(ResizeMath .KeepRatio(300, 200, 75, 75) .SameAs(0, 12, 75, 50)); }
public void It_does_not_scale_up() { Assert.IsTrue(ResizeMath .KeepRatio(300, 200, 400, 300) .SameAs(50, 50, 300, 200)); }
public void With_same_ratio_Destination_dimensions_are_kept() { Assert.IsTrue(ResizeMath .KeepRatio(300, 200, 150, 100) .SameAs(0, 0, 150, 100)); }