diff --git a/src/ImageSharp/Image/ImageFrameCollection.cs b/src/ImageSharp/Image/ImageFrameCollection.cs index b29fdc511..3e9bb0343 100644 --- a/src/ImageSharp/Image/ImageFrameCollection.cs +++ b/src/ImageSharp/Image/ImageFrameCollection.cs @@ -24,7 +24,9 @@ namespace SixLabors.ImageSharp Guard.NotNull(parent, nameof(parent)); this.parent = parent; - this.AddFrame(new ImageFrame(width, height)); + + // Frames are already cloned within the caller + this.frames.Add(new ImageFrame(width, height)); } internal ImageFrameCollection(Image parent, IEnumerable> frames) @@ -33,9 +35,12 @@ 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.ValidateFrame(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; } diff --git a/tests/CodeCoverage/CodeCoverage.cmd b/tests/CodeCoverage/CodeCoverage.cmd index 2c13cfc14..622001fcf 100644 --- a/tests/CodeCoverage/CodeCoverage.cmd +++ b/tests/CodeCoverage/CodeCoverage.cmd @@ -9,6 +9,8 @@ cd .. cd .. dotnet restore ImageSharp.sln +rem Clean the solution to force a rebuild with /p:codecov=true +dotnet clean ImageSharp.sln -c Release rem The -threshold options prevents this taking ages... tests\CodeCoverage\OpenCover.4.6.519\tools\OpenCover.Console.exe -target:"dotnet.exe" -targetargs:"test tests\ImageSharp.Tests\ImageSharp.Tests.csproj -c Release /p:codecov=true" -register:user -threshold:10 -oldStyle -safemode:off -output:.\ImageSharp.Coverage.xml -hideskipped:All -returntargetcode -filter:"+[SixLabors.ImageSharp*]*"