diff --git a/src/ImageSharp/Processing/Transforms/Resize.cs b/src/ImageSharp/Processing/Transforms/Resize.cs
index 38662317b..c1599ebe2 100644
--- a/src/ImageSharp/Processing/Transforms/Resize.cs
+++ b/src/ImageSharp/Processing/Transforms/Resize.cs
@@ -123,6 +123,22 @@ namespace ImageSharp
return Resize(source, width, height, sampler, false);
}
+ ///
+ /// Resizes an image to the given width and height with the given sampler.
+ ///
+ /// The pixel format.
+ /// The image to resize.
+ /// The target image size.
+ /// The to perform the resampling.
+ /// Whether to compress and expand the image color-space to gamma correct the image during processing.
+ /// The
+ /// Passing zero for one of height or width will automatically preserve the aspect ratio of the original image
+ public static IImageProcessingContext Resize(this IImageProcessingContext source, Size size, IResampler sampler, bool compand)
+ where TPixel : struct, IPixel
+ {
+ return Resize(source, size.Width, size.Height, sampler, new Rectangle(0, 0, size.Width, size.Height), compand);
+ }
+
///
/// Resizes an image to the given width and height with the given sampler.
///
diff --git a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs
index db8063ba3..0fc424295 100644
--- a/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs
+++ b/tests/ImageSharp.Tests/Processing/Processors/Transforms/ResizeTests.cs
@@ -14,7 +14,7 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms
{
public static readonly string[] ResizeFiles = { TestImages.Png.CalliphoraPartial };
- public static readonly TheoryData ReSamplers =
+ public static readonly TheoryData AllReSamplers =
new TheoryData
{
{ "Bicubic", new BicubicResampler() },
@@ -32,6 +32,12 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms
{ "Welch", new WelchResampler() }
};
+ public static readonly TheoryData JustBicubicResampler =
+ new TheoryData
+ {
+ { "Bicubic", new BicubicResampler() },
+ };
+
[Theory]
[WithFile(TestImages.Gif.Giphy, DefaultPixelType)]
public void ResizeShouldApplyToAllFrames(TestImageProvider provider)
@@ -45,21 +51,40 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms
}
[Theory]
- [WithTestPatternImages(nameof(ReSamplers), 100, 100, DefaultPixelType)]
- [WithFileCollection(nameof(ResizeFiles), nameof(ReSamplers), DefaultPixelType)]
- public void ImageShouldResize(TestImageProvider provider, string name, IResampler sampler)
+ [WithTestPatternImages(nameof(AllReSamplers), 100, 100, DefaultPixelType, 50)]
+ [WithFileCollection(nameof(ResizeFiles), nameof(AllReSamplers), DefaultPixelType, 50)]
+ [WithFileCollection(nameof(ResizeFiles), nameof(AllReSamplers), DefaultPixelType, 30)]
+ public void ResizeFullImage(TestImageProvider provider, string name, IResampler sampler, int percents)
+ where TPixel : struct, IPixel
+ {
+ using (Image image = provider.GetImage())
+ {
+ float ratio = (float)percents / 100.0F;
+ SizeF newSize = image.Size() * ratio;
+ image.Mutate(x => x.Resize((Size)newSize, sampler, false));
+
+ string details = $"{name}-{percents}%";
+
+ image.DebugSave(provider, details);
+ }
+ }
+
+ [Theory]
+ [WithTestPatternImages(100, 100, DefaultPixelType)]
+ public void ResizeFullImage_Compand(TestImageProvider provider)
where TPixel : struct, IPixel
{
using (Image image = provider.GetImage())
{
- image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2, sampler, true));
- image.DebugSave(provider, name);
+ image.Mutate(x => x.Resize(image.Size() / 2, true));
+
+ image.DebugSave(provider);
}
}
[Theory]
- [WithFileCollection(nameof(ResizeFiles), nameof(ReSamplers), DefaultPixelType)]
- public void ImageShouldResizeFromSourceRectangle(TestImageProvider provider, string name, IResampler sampler)
+ [WithFileCollection(nameof(ResizeFiles), DefaultPixelType)]
+ public void ImageShouldResizeFromSourceRectangle(TestImageProvider provider)
where TPixel : struct, IPixel
{
using (Image image = provider.GetImage())
@@ -67,163 +92,156 @@ namespace ImageSharp.Tests.Processing.Processors.Transforms
var sourceRectangle = new Rectangle(image.Width / 8, image.Height / 8, image.Width / 4, image.Height / 4);
var destRectangle = new Rectangle(image.Width / 4, image.Height / 4, image.Width / 2, image.Height / 2);
- image.Mutate(x => x.Resize(image.Width, image.Height, sampler, sourceRectangle, destRectangle, false));
- image.DebugSave(provider, name);
+ image.Mutate(x => x.Resize(image.Width, image.Height, new BicubicResampler(), sourceRectangle, destRectangle, false));
+ image.DebugSave(provider);
}
}
[Theory]
- [WithFileCollection(nameof(ResizeFiles), nameof(ReSamplers), DefaultPixelType)]
- public void ImageShouldResizeWidthAndKeepAspect(TestImageProvider provider, string name, IResampler sampler)
+ [WithFileCollection(nameof(ResizeFiles), DefaultPixelType)]
+ public void ImageShouldResizeWidthAndKeepAspect(TestImageProvider provider)
where TPixel : struct, IPixel
{
using (Image image = provider.GetImage())
{
- image.Mutate(x => x.Resize(image.Width / 3, 0, sampler, false));
- image.DebugSave(provider, name);
+ image.Mutate(x => x.Resize(image.Width / 3, 0, false));
+ image.DebugSave(provider);
}
}
[Theory]
- [WithFileCollection(nameof(ResizeFiles), nameof(ReSamplers), DefaultPixelType)]
- public void ImageShouldResizeHeightAndKeepAspect(TestImageProvider provider, string name, IResampler sampler)
+ [WithFileCollection(nameof(ResizeFiles), DefaultPixelType)]
+ public void ImageShouldResizeHeightAndKeepAspect(TestImageProvider provider)
where TPixel : struct, IPixel
{
using (Image image = provider.GetImage())
{
- image.Mutate(x => x.Resize(0, image.Height / 3, sampler, false));
- image.DebugSave(provider, name);
+ image.Mutate(x => x.Resize(0, image.Height / 3, false));
+ image.DebugSave(provider);
}
}
[Theory]
- [WithFileCollection(nameof(ResizeFiles), nameof(ReSamplers), DefaultPixelType)]
- public void ImageShouldResizeWithCropWidthMode(TestImageProvider provider, string name, IResampler sampler)
+ [WithFileCollection(nameof(ResizeFiles), DefaultPixelType)]
+ public void ImageShouldResizeWithCropWidthMode(TestImageProvider provider)
where TPixel : struct, IPixel
{
using (Image image = provider.GetImage())
{
var options = new ResizeOptions
{
- Sampler = sampler,
Size = new Size(image.Width / 2, image.Height)
};
image.Mutate(x => x.Resize(options));
- image.DebugSave(provider, name);
+ image.DebugSave(provider);
}
}
[Theory]
- [WithFileCollection(nameof(ResizeFiles), nameof(ReSamplers), DefaultPixelType)]
- public void ImageShouldResizeWithCropHeightMode(TestImageProvider provider, string name, IResampler sampler)
+ [WithFileCollection(nameof(ResizeFiles), DefaultPixelType)]
+ public void ImageShouldResizeWithCropHeightMode(TestImageProvider provider)
where TPixel : struct, IPixel
{
using (Image image = provider.GetImage())
{
var options = new ResizeOptions
{
- Sampler = sampler,
Size = new Size(image.Width, image.Height / 2)
};
image.Mutate(x => x.Resize(options));
- image.DebugSave(provider, name);
+ image.DebugSave(provider);
}
}
[Theory]
- [WithFileCollection(nameof(ResizeFiles), nameof(ReSamplers), DefaultPixelType)]
- public void ImageShouldResizeWithPadMode(TestImageProvider provider, string name, IResampler sampler)
+ [WithFileCollection(nameof(ResizeFiles), DefaultPixelType)]
+ public void ImageShouldResizeWithPadMode(TestImageProvider provider)
where TPixel : struct, IPixel
{
using (Image image = provider.GetImage())
{
var options = new ResizeOptions
{
- Sampler = sampler,
Size = new Size(image.Width + 200, image.Height),
Mode = ResizeMode.Pad
};
image.Mutate(x => x.Resize(options));
- image.DebugSave(provider, name);
+ image.DebugSave(provider);
}
}
[Theory]
- [WithFileCollection(nameof(ResizeFiles), nameof(ReSamplers), DefaultPixelType)]
- public void ImageShouldResizeWithBoxPadMode(TestImageProvider provider, string name, IResampler sampler)
+ [WithFileCollection(nameof(ResizeFiles), DefaultPixelType)]
+ public void ImageShouldResizeWithBoxPadMode(TestImageProvider provider)
where TPixel : struct, IPixel
{
using (Image image = provider.GetImage())
{
var options = new ResizeOptions
{
- Sampler = sampler,
Size = new Size(image.Width + 200, image.Height + 200),
Mode = ResizeMode.BoxPad
};
image.Mutate(x => x.Resize(options));
- image.DebugSave(provider, name);
+ image.DebugSave(provider);
}
}
[Theory]
- [WithFileCollection(nameof(ResizeFiles), nameof(ReSamplers), DefaultPixelType)]
- public void ImageShouldResizeWithMaxMode(TestImageProvider provider, string name, IResampler sampler)
+ [WithFileCollection(nameof(ResizeFiles), DefaultPixelType)]
+ public void ImageShouldResizeWithMaxMode(TestImageProvider provider)
where TPixel : struct, IPixel
{
using (Image image = provider.GetImage())
{
var options = new ResizeOptions
{
- Sampler = sampler,
Size = new Size(300, 300),
Mode = ResizeMode.Max
};
image.Mutate(x => x.Resize(options));
- image.DebugSave(provider, name);
+ image.DebugSave(provider);
}
}
[Theory]
- [WithFileCollection(nameof(ResizeFiles), nameof(ReSamplers), DefaultPixelType)]
- public void ImageShouldResizeWithMinMode(TestImageProvider provider, string name, IResampler sampler)
+ [WithFileCollection(nameof(ResizeFiles), DefaultPixelType)]
+ public void ImageShouldResizeWithMinMode(TestImageProvider provider)
where TPixel : struct, IPixel
{
using (Image image = provider.GetImage())
{
var options = new ResizeOptions
{
- Sampler = sampler,
Size = new Size((int)MathF.Round(image.Width * .75F), (int)MathF.Round(image.Height * .95F)),
Mode = ResizeMode.Min
};
image.Mutate(x => x.Resize(options));
- image.DebugSave(provider, name);
+ image.DebugSave(provider);
}
}
[Theory]
- [WithFileCollection(nameof(ResizeFiles), nameof(ReSamplers), DefaultPixelType)]
- public void ImageShouldResizeWithStretchMode(TestImageProvider provider, string name, IResampler sampler)
+ [WithFileCollection(nameof(ResizeFiles), DefaultPixelType)]
+ public void ImageShouldResizeWithStretchMode(TestImageProvider provider)
where TPixel : struct, IPixel
{
using (Image image = provider.GetImage())
{
var options = new ResizeOptions
{
- Sampler = sampler,
Size = new Size(image.Width / 2, image.Height),
Mode = ResizeMode.Stretch
};
image.Mutate(x => x.Resize(options));
- image.DebugSave(provider, name);
+ image.DebugSave(provider);
}
}