diff --git a/src/ImageSharp/ImageFrameCollection{TPixel}.cs b/src/ImageSharp/ImageFrameCollection{TPixel}.cs
index b51e4dae53..c1eae02806 100644
--- a/src/ImageSharp/ImageFrameCollection{TPixel}.cs
+++ b/src/ImageSharp/ImageFrameCollection{TPixel}.cs
@@ -67,7 +67,17 @@ namespace SixLabors.ImageSharp
///
/// Gets the root frame.
///
- public new ImageFrame RootFrame => this.frames.Count > 0 ? this.frames[0] : null;
+ public new ImageFrame RootFrame
+ {
+ get
+ {
+ this.EnsureNotDisposed();
+
+ // frame collection would always contain at least 1 frame
+ // the only exception is when collection is disposed what is checked via EnsureNotDisposed() call
+ return this.frames[0];
+ }
+ }
///
protected override ImageFrame NonGenericRootFrame => this.RootFrame;
@@ -80,20 +90,30 @@ namespace SixLabors.ImageSharp
///
/// The index.
/// The at the specified index.
- public new ImageFrame this[int index] => this.frames[index];
-
- ///
- public override int IndexOf(ImageFrame frame)
+ public new ImageFrame this[int index]
{
- return frame is ImageFrame specific ? this.IndexOf(specific) : -1;
+ get
+ {
+ this.EnsureNotDisposed();
+
+ return this.frames[index];
+ }
}
+ ///
+ public override int IndexOf(ImageFrame frame) => frame is ImageFrame specific ? this.IndexOf(specific) : -1;
+
///
/// Determines the index of a specific in the .
///
/// The to locate in the .
/// The index of item if found in the list; otherwise, -1.
- public int IndexOf(ImageFrame frame) => this.frames.IndexOf(frame);
+ public int IndexOf(ImageFrame frame)
+ {
+ this.EnsureNotDisposed();
+
+ return this.frames.IndexOf(frame);
+ }
///
/// Clones and inserts the into the at the specified .
@@ -104,6 +124,8 @@ namespace SixLabors.ImageSharp
/// The cloned .
public ImageFrame InsertFrame(int index, ImageFrame source)
{
+ this.EnsureNotDisposed();
+
this.ValidateFrame(source);
ImageFrame clonedFrame = source.Clone(this.parent.GetConfiguration());
this.frames.Insert(index, clonedFrame);
@@ -117,6 +139,8 @@ namespace SixLabors.ImageSharp
/// The cloned .
public ImageFrame AddFrame(ImageFrame source)
{
+ this.EnsureNotDisposed();
+
this.ValidateFrame(source);
ImageFrame clonedFrame = source.Clone(this.parent.GetConfiguration());
this.frames.Add(clonedFrame);
@@ -131,6 +155,8 @@ namespace SixLabors.ImageSharp
/// The new .
public ImageFrame AddFrame(ReadOnlySpan source)
{
+ this.EnsureNotDisposed();
+
var frame = ImageFrame.LoadPixelData(
this.parent.GetConfiguration(),
source,
@@ -149,6 +175,7 @@ namespace SixLabors.ImageSharp
public ImageFrame AddFrame(TPixel[] source)
{
Guard.NotNull(source, nameof(source));
+
return this.AddFrame(source.AsSpan());
}
@@ -159,6 +186,8 @@ namespace SixLabors.ImageSharp
/// Cannot remove last frame.
public override void RemoveFrame(int index)
{
+ this.EnsureNotDisposed();
+
if (index == 0 && this.Count == 1)
{
throw new InvalidOperationException("Cannot remove last frame.");
@@ -180,7 +209,12 @@ namespace SixLabors.ImageSharp
///
/// true if the contains the specified frame; otherwise, false.
///
- public bool Contains(ImageFrame frame) => this.frames.Contains(frame);
+ public bool Contains(ImageFrame frame)
+ {
+ this.EnsureNotDisposed();
+
+ return this.frames.Contains(frame);
+ }
///
/// Moves an from to .
@@ -189,6 +223,8 @@ namespace SixLabors.ImageSharp
/// The index to move the frame to.
public override void MoveFrame(int sourceIndex, int destinationIndex)
{
+ this.EnsureNotDisposed();
+
if (sourceIndex == destinationIndex)
{
return;
@@ -208,6 +244,8 @@ namespace SixLabors.ImageSharp
/// The new with the specified frame.
public new Image ExportFrame(int index)
{
+ this.EnsureNotDisposed();
+
ImageFrame frame = this[index];
if (this.Count == 1 && this.frames.Contains(frame))
@@ -228,6 +266,8 @@ namespace SixLabors.ImageSharp
/// The new with the specified frame.
public new Image CloneFrame(int index)
{
+ this.EnsureNotDisposed();
+
ImageFrame frame = this[index];
ImageFrame clonedFrame = frame.Clone();
return new Image(this.parent.GetConfiguration(), this.parent.Metadata.DeepClone(), new[] { clonedFrame });
@@ -241,6 +281,8 @@ namespace SixLabors.ImageSharp
///
public new ImageFrame CreateFrame()
{
+ this.EnsureNotDisposed();
+
var frame = new ImageFrame(
this.parent.GetConfiguration(),
this.RootFrame.Width,