diff --git a/src/ImageSharp/Configuration.cs b/src/ImageSharp/Configuration.cs
index 1b009bfed..354701747 100644
--- a/src/ImageSharp/Configuration.cs
+++ b/src/ImageSharp/Configuration.cs
@@ -125,7 +125,7 @@ namespace SixLabors.ImageSharp
/// Creates a shallow copy of the
///
/// A new configuration instance
- public Configuration ShallowCopy()
+ public Configuration Clone()
{
return new Configuration
{
diff --git a/src/ImageSharp/ImageFrame{TPixel}.cs b/src/ImageSharp/ImageFrame{TPixel}.cs
index 132ab598e..9ff6c6511 100644
--- a/src/ImageSharp/ImageFrame{TPixel}.cs
+++ b/src/ImageSharp/ImageFrame{TPixel}.cs
@@ -95,6 +95,10 @@ namespace SixLabors.ImageSharp
///
/// Initializes a new instance of the class wrapping an existing buffer.
///
+ /// The configuration providing initialization code which allows extending the library.
+ /// The width of the image in pixels.
+ /// The height of the image in pixels.
+ /// The memory source.
internal ImageFrame(Configuration configuration, int width, int height, MemorySource memorySource)
: this(configuration, width, height, memorySource, new ImageFrameMetaData())
{
@@ -103,12 +107,12 @@ namespace SixLabors.ImageSharp
///
/// Initializes a new instance of the class wrapping an existing buffer.
///
- internal ImageFrame(
- Configuration configuration,
- int width,
- int height,
- MemorySource memorySource,
- ImageFrameMetaData metaData)
+ /// The configuration providing initialization code which allows extending the library.
+ /// The width of the image in pixels.
+ /// The height of the image in pixels.
+ /// The memory source.
+ /// The meta data.
+ internal ImageFrame(Configuration configuration, int width, int height, MemorySource memorySource, ImageFrameMetaData metaData)
{
Guard.NotNull(configuration, nameof(configuration));
Guard.MustBeGreaterThan(width, 0, nameof(width));
@@ -247,25 +251,47 @@ namespace SixLabors.ImageSharp
///
public override string ToString() => $"ImageFrame<{typeof(TPixel).Name}>: {this.Width}x{this.Height}";
+ ///
+ /// Clones the current instance.
+ ///
+ /// The
+ internal ImageFrame Clone() => this.Clone(this.configuration);
+
+ ///
+ /// Clones the current instance.
+ ///
+ /// The configuration providing initialization code which allows extending the library.
+ /// The
+ internal ImageFrame Clone(Configuration configuration) => new ImageFrame(configuration, this);
+
///
/// Returns a copy of the image frame in the given pixel format.
///
/// The pixel format.
/// The
internal ImageFrame CloneAs()
+ where TPixel2 : struct, IPixel => this.CloneAs(this.configuration);
+
+ ///
+ /// Returns a copy of the image frame in the given pixel format.
+ ///
+ /// The pixel format.
+ /// The configuration providing initialization code which allows extending the library.
+ /// The
+ internal ImageFrame CloneAs(Configuration configuration)
where TPixel2 : struct, IPixel
{
if (typeof(TPixel2) == typeof(TPixel))
{
- return this.Clone() as ImageFrame;
+ return this.Clone(configuration) as ImageFrame;
}
- var target = new ImageFrame(this.configuration, this.Width, this.Height, this.MetaData.Clone());
+ var target = new ImageFrame(configuration, this.Width, this.Height, this.MetaData.Clone());
ParallelFor.WithTemporaryBuffer(
0,
this.Height,
- this.configuration,
+ configuration,
this.Width,
(int y, IMemoryOwner tempRowBuffer) =>
{
@@ -298,12 +324,6 @@ namespace SixLabors.ImageSharp
});
}
- ///
- /// Clones the current instance.
- ///
- /// The
- internal ImageFrame Clone() => new ImageFrame(this.configuration, this);
-
///
void IDisposable.Dispose() => this.Dispose();
}
diff --git a/src/ImageSharp/Image{TPixel}.cs b/src/ImageSharp/Image{TPixel}.cs
index 8bc5a40bd..3ee369fda 100644
--- a/src/ImageSharp/Image{TPixel}.cs
+++ b/src/ImageSharp/Image{TPixel}.cs
@@ -11,7 +11,6 @@ using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.MetaData;
using SixLabors.ImageSharp.PixelFormats;
-using SixLabors.Memory;
namespace SixLabors.ImageSharp
{
@@ -23,15 +22,12 @@ namespace SixLabors.ImageSharp
where TPixel : struct, IPixel
{
private readonly Configuration configuration;
- private readonly ImageFrameCollection frames;
///
/// Initializes a new instance of the class
/// with the height and the width of the image.
///
- ///
- /// The configuration providing initialization code which allows extending the library.
- ///
+ /// The configuration providing initialization code which allows extending the library.
/// The width of the image in pixels.
/// The height of the image in pixels.
public Image(Configuration configuration, int width, int height)
@@ -43,9 +39,7 @@ namespace SixLabors.ImageSharp
/// Initializes a new instance of the class
/// with the height and the width of the image.
///
- ///
- /// The configuration providing initialization code which allows extending the library.
- ///
+ /// The configuration providing initialization code which allows extending the library.
/// The width of the image in pixels.
/// The height of the image in pixels.
/// The color to initialize the pixels with.
@@ -69,9 +63,7 @@ namespace SixLabors.ImageSharp
/// Initializes a new instance of the class
/// with the height and the width of the image.
///
- ///
- /// The configuration providing initialization code which allows extending the library.
- ///
+ /// The configuration providing initialization code which allows extending the library.
/// The width of the image in pixels.
/// The height of the image in pixels.
/// The images metadata.
@@ -80,37 +72,41 @@ namespace SixLabors.ImageSharp
this.configuration = configuration ?? Configuration.Default;
this.PixelType = new PixelTypeInfo(Unsafe.SizeOf() * 8);
this.MetaData = metadata ?? new ImageMetaData();
- this.frames = new ImageFrameCollection(this, width, height, default(TPixel));
+ this.Frames = new ImageFrameCollection(this, width, height, default(TPixel));
}
///
/// Initializes a new instance of the class
/// wrapping an external
///
+ /// The configuration providing initialization code which allows extending the library.
+ /// The memory source.
+ /// The width of the image in pixels.
+ /// The height of the image in pixels.
+ /// The images metadata.
internal Image(Configuration configuration, MemorySource memorySource, int width, int height, ImageMetaData metadata)
{
this.configuration = configuration;
this.PixelType = new PixelTypeInfo(Unsafe.SizeOf() * 8);
this.MetaData = metadata;
- this.frames = new ImageFrameCollection(this, width, height, memorySource);
+ this.Frames = new ImageFrameCollection(this, width, height, memorySource);
}
///
/// Initializes a new instance of the class
/// with the height and the width of the image.
///
- ///
- /// The configuration providing initialization code which allows extending the library.
- ///
+ /// The configuration providing initialization code which allows extending the library.
/// The width of the image in pixels.
/// The height of the image in pixels.
/// The color to initialize the pixels with.
/// The images metadata.
- internal Image(Configuration configuration, int width, int height, TPixel backgroundColor, ImageMetaData metadata) {
+ internal Image(Configuration configuration, int width, int height, TPixel backgroundColor, ImageMetaData metadata)
+ {
this.configuration = configuration ?? Configuration.Default;
this.PixelType = new PixelTypeInfo(Unsafe.SizeOf() * 8);
this.MetaData = metadata ?? new ImageMetaData();
- this.frames = new ImageFrameCollection(this, width, height, backgroundColor);
+ this.Frames = new ImageFrameCollection(this, width, height, backgroundColor);
}
///
@@ -126,7 +122,7 @@ namespace SixLabors.ImageSharp
this.PixelType = new PixelTypeInfo(Unsafe.SizeOf() * 8);
this.MetaData = metadata ?? new ImageMetaData();
- this.frames = new ImageFrameCollection(this, frames);
+ this.Frames = new ImageFrameCollection(this, frames);
}
///
@@ -138,10 +134,10 @@ namespace SixLabors.ImageSharp
public PixelTypeInfo PixelType { get; }
///
- public int Width => this.frames.RootFrame.Width;
+ public int Width => this.Frames.RootFrame.Width;
///
- public int Height => this.frames.RootFrame.Height;
+ public int Height => this.Frames.RootFrame.Height;
///
public ImageMetaData MetaData { get; }
@@ -149,12 +145,12 @@ namespace SixLabors.ImageSharp
///
/// Gets the frames.
///
- public ImageFrameCollection Frames => this.frames;
+ public ImageFrameCollection Frames { get; }
///
/// Gets the root frame.
///
- private IPixelSource PixelSource => this.frames?.RootFrame ?? throw new ObjectDisposedException(nameof(Image));
+ private IPixelSource PixelSource => this.Frames?.RootFrame ?? throw new ObjectDisposedException(nameof(Image));
///
/// Gets or sets the pixel at the specified position.
@@ -187,16 +183,17 @@ namespace SixLabors.ImageSharp
/// Clones the current image
///
/// Returns a new image with all the same metadata as the original.
- public Image Clone()
- {
- IEnumerable> clonedFrames = this.frames.Select(x => x.Clone());
- return new Image(this.configuration, this.MetaData.Clone(), clonedFrames);
- }
+ public Image Clone() => this.Clone(this.configuration);
- ///
- public override string ToString()
+ ///
+ /// Clones the current image with the given configueation.
+ ///
+ /// The configuration providing initialization code which allows extending the library.
+ /// Returns a new with all the same pixel data as the original.
+ public Image Clone(Configuration configuration)
{
- return $"Image<{typeof(TPixel).Name}>: {this.Width}x{this.Height}";
+ IEnumerable> clonedFrames = this.Frames.Select(x => x.Clone(configuration));
+ return new Image(configuration, this.MetaData.Clone(), clonedFrames);
}
///
@@ -205,22 +202,27 @@ namespace SixLabors.ImageSharp
/// The pixel format.
/// The
public Image CloneAs()
- where TPixel2 : struct, IPixel
- {
- IEnumerable> clonedFrames = this.frames.Select(x => x.CloneAs());
- var target = new Image(this.configuration, this.MetaData.Clone(), clonedFrames);
-
- return target;
- }
+ where TPixel2 : struct, IPixel => this.CloneAs(this.configuration);
///
- /// Releases managed resources.
+ /// Returns a copy of the image in the given pixel format.
///
- public void Dispose()
+ /// The pixel format.
+ /// The configuration providing initialization code which allows extending the library.
+ /// The
+ public Image CloneAs(Configuration configuration)
+ where TPixel2 : struct, IPixel
{
- this.frames.Dispose();
+ IEnumerable> clonedFrames = this.Frames.Select(x => x.CloneAs(configuration));
+ return new Image(configuration, this.MetaData.Clone(), clonedFrames);
}
+ ///
+ public void Dispose() => this.Frames.Dispose();
+
+ ///
+ public override string ToString() => $"Image<{typeof(TPixel).Name}>: {this.Width}x{this.Height}";
+
///
/// Switches the buffers used by the image and the pixelSource meaning that the Image will "own" the buffer from the pixelSource and the pixelSource will now own the Images buffer.
///
@@ -229,9 +231,9 @@ namespace SixLabors.ImageSharp
{
Guard.NotNull(pixelSource, nameof(pixelSource));
- for (int i = 0; i < this.frames.Count; i++)
+ for (int i = 0; i < this.Frames.Count; i++)
{
- this.frames[i].SwapOrCopyPixelsBufferFrom(pixelSource.frames[i]);
+ this.Frames[i].SwapOrCopyPixelsBufferFrom(pixelSource.Frames[i]);
}
}
}
diff --git a/tests/ImageSharp.Tests/ConfigurationTests.cs b/tests/ImageSharp.Tests/ConfigurationTests.cs
index 6a8479b2b..963d67446 100644
--- a/tests/ImageSharp.Tests/ConfigurationTests.cs
+++ b/tests/ImageSharp.Tests/ConfigurationTests.cs
@@ -23,7 +23,7 @@ namespace SixLabors.ImageSharp.Tests
{
// the shallow copy of configuration should behave exactly like the default configuration,
// so by using the copy, we test both the default and the copy.
- this.DefaultConfiguration = Configuration.CreateDefaultInstance().ShallowCopy();
+ this.DefaultConfiguration = Configuration.CreateDefaultInstance().Clone();
this.ConfigurationEmpty = new Configuration();
}
diff --git a/tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs b/tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs
index 69572425c..16d999ad2 100644
--- a/tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs
+++ b/tests/ImageSharp.Tests/Image/ImageTests.WrapMemory.cs
@@ -84,7 +84,7 @@ namespace SixLabors.ImageSharp.Tests
[Fact]
public void WrapMemory_CreatedImageIsCorrect()
{
- Configuration cfg = Configuration.Default.ShallowCopy();
+ Configuration cfg = Configuration.Default.Clone();
var metaData = new ImageMetaData();
var array = new Rgba32[25];
diff --git a/tests/ImageSharp.Tests/Image/ImageTests.cs b/tests/ImageSharp.Tests/Image/ImageTests.cs
index ed142ed97..f3c04d5e1 100644
--- a/tests/ImageSharp.Tests/Image/ImageTests.cs
+++ b/tests/ImageSharp.Tests/Image/ImageTests.cs
@@ -32,7 +32,7 @@ namespace SixLabors.ImageSharp.Tests
[Fact]
public void Configuration_Width_Height()
{
- Configuration configuration = Configuration.Default.ShallowCopy();
+ Configuration configuration = Configuration.Default.Clone();
using (var image = new Image(configuration, 11, 23))
{
@@ -48,7 +48,7 @@ namespace SixLabors.ImageSharp.Tests
[Fact]
public void Configuration_Width_Height_BackroundColor()
{
- Configuration configuration = Configuration.Default.ShallowCopy();
+ Configuration configuration = Configuration.Default.Clone();
Rgba32 color = Rgba32.Aquamarine;
using (var image = new Image(configuration, 11, 23, color))
diff --git a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs
index ab0cc42f9..30ac0856c 100644
--- a/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs
+++ b/tests/ImageSharp.Tests/TestUtilities/ImageProviders/TestImageProvider.cs
@@ -33,7 +33,7 @@ namespace SixLabors.ImageSharp.Tests
public virtual string SourceFileOrDescription => "";
- public Configuration Configuration { get; set; } = Configuration.Default.ShallowCopy();
+ public Configuration Configuration { get; set; } = Configuration.Default.Clone();
///
/// Utility instance to provide informations about the test image & manage input/output