diff --git a/src/ImageSharp/DefaultInternalImageProcessorContext.cs b/src/ImageSharp/DefaultInternalImageProcessorContext.cs
index cdfd582be..974d0bc11 100644
--- a/src/ImageSharp/DefaultInternalImageProcessorContext.cs
+++ b/src/ImageSharp/DefaultInternalImageProcessorContext.cs
@@ -47,7 +47,7 @@ namespace SixLabors.ImageSharp
}
///
- public Rectangle Bounds() => this.source.Bounds();
+ public Rectangle Bounds() => this.destination?.Bounds() ?? this.source.Bounds();
///
public IImageProcessingContext ApplyProcessor(IImageProcessor processor, Rectangle rectangle)
diff --git a/tests/ImageSharp.Tests/Image/ImageProcessingContextTests.cs b/tests/ImageSharp.Tests/Image/ImageProcessingContextTests.cs
new file mode 100644
index 000000000..8411dd2f0
--- /dev/null
+++ b/tests/ImageSharp.Tests/Image/ImageProcessingContextTests.cs
@@ -0,0 +1,58 @@
+// Copyright (c) Six Labors and contributors.
+// Licensed under the Apache License, Version 2.0.
+
+using SixLabors.Primitives;
+using Xunit;
+
+namespace SixLabors.ImageSharp.Tests
+{
+ public class ImageProcessingContextTests
+ {
+ [Fact]
+ public void MutatedBoundsAreAccuratePerOperation()
+ {
+ var x500 = new Size(500, 500);
+ var x400 = new Size(400, 400);
+ var x300 = new Size(300, 300);
+ var x200 = new Size(200, 200);
+ var x100 = new Size(100, 100);
+ using (var image = new Image(500, 500))
+ {
+ image.Mutate(x =>
+ x.AssertBounds(x500)
+ .Resize(x400).AssertBounds(x400)
+ .Resize(x300).AssertBounds(x300)
+ .Resize(x200).AssertBounds(x200)
+ .Resize(x100).AssertBounds(x100));
+ }
+ }
+
+ [Fact]
+ public void ClonedBoundsAreAccuratePerOperation()
+ {
+ var x500 = new Size(500, 500);
+ var x400 = new Size(400, 400);
+ var x300 = new Size(300, 300);
+ var x200 = new Size(200, 200);
+ var x100 = new Size(100, 100);
+ using (var image = new Image(500, 500))
+ {
+ image.Clone(x =>
+ x.AssertBounds(x500)
+ .Resize(x400).AssertBounds(x400)
+ .Resize(x300).AssertBounds(x300)
+ .Resize(x200).AssertBounds(x200)
+ .Resize(x100).AssertBounds(x100));
+ }
+ }
+ }
+
+ public static class BoundsAssertationExtensions
+ {
+ public static IImageProcessingContext AssertBounds(this IImageProcessingContext context, Size size)
+ {
+ Assert.Equal(size, context.Bounds().Size);
+ return context;
+ }
+ }
+}
\ No newline at end of file