diff --git a/src/ImageSharp/Image/ImageFrameCollection.cs b/src/ImageSharp/Image/ImageFrameCollection.cs index a2e53c044..a1cf82c38 100644 --- a/src/ImageSharp/Image/ImageFrameCollection.cs +++ b/src/ImageSharp/Image/ImageFrameCollection.cs @@ -24,6 +24,8 @@ namespace SixLabors.ImageSharp Guard.NotNull(parent, nameof(parent)); this.parent = parent; + + // Frames are already cloned within the caller this.frames.Add(new ImageFrame(width, height)); } @@ -33,9 +35,11 @@ namespace SixLabors.ImageSharp Guard.NotNullOrEmpty(frames, nameof(frames)); this.parent = parent; + + // Frames are already cloned by the caller foreach (ImageFrame f in frames) { - this.AddFrame(f); + this.frames.Add(f); } } diff --git a/src/ImageSharp/Image/Image{TPixel}.cs b/src/ImageSharp/Image/Image{TPixel}.cs index 85e1aa858..482971e54 100644 --- a/src/ImageSharp/Image/Image{TPixel}.cs +++ b/src/ImageSharp/Image/Image{TPixel}.cs @@ -143,9 +143,8 @@ namespace SixLabors.ImageSharp /// Returns a new image with all the same metadata as the original. public Image Clone() { - IEnumerable> frames = this.frames.Select(x => x.Clone()).ToArray(); - - return new Image(this.configuration, this.MetaData.Clone(), frames); + IEnumerable> clonedFrames = this.frames.Select(x => x.Clone()); + return new Image(this.configuration, this.MetaData.Clone(), clonedFrames); } /// @@ -162,8 +161,8 @@ namespace SixLabors.ImageSharp public Image CloneAs() where TPixel2 : struct, IPixel { - IEnumerable> frames = this.frames.Select(x => x.CloneAs()).ToArray(); - var target = new Image(this.configuration, this.MetaData, frames); + IEnumerable> clonedFrames = this.frames.Select(x => x.CloneAs()); + var target = new Image(this.configuration, this.MetaData.Clone(), clonedFrames); return target; }