Skip to content

Commit

Permalink
Added MagickGeometry overload for SetArea (#191).
Browse files Browse the repository at this point in the history
  • Loading branch information
Dirk Lemstra committed Apr 29, 2018
1 parent cce1255 commit af69298
Show file tree
Hide file tree
Showing 6 changed files with 328 additions and 0 deletions.
28 changes: 28 additions & 0 deletions Source/Magick.NET/Shared/Pixels/IPixelCollection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,13 @@ public interface IPixelCollection : IEnumerable<Pixel>, IDisposable
/// <param name="height">The height of the area.</param>
/// <param name="values">The values of the pixels.</param>
void SetArea(int x, int y, int width, int height, byte[] values);

/// <summary>
/// Changes the values of the specified pixels.
/// </summary>
/// <param name="geometry">The geometry of the area.</param>
/// <param name="values">The values of the pixels.</param>
void SetArea(MagickGeometry geometry, byte[] values);
#endif

/// <summary>
Expand All @@ -157,6 +164,13 @@ public interface IPixelCollection : IEnumerable<Pixel>, IDisposable
/// <param name="values">The values of the pixels.</param>
void SetArea(int x, int y, int width, int height, double[] values);

/// <summary>
/// Changes the values of the specified pixels.
/// </summary>
/// <param name="geometry">The geometry of the area.</param>
/// <param name="values">The values of the pixels.</param>
void SetArea(MagickGeometry geometry, double[] values);

/// <summary>
/// Changes the values of the specified pixels.
/// </summary>
Expand All @@ -167,6 +181,13 @@ public interface IPixelCollection : IEnumerable<Pixel>, IDisposable
/// <param name="values">The values of the pixels.</param>
void SetArea(int x, int y, int width, int height, int[] values);

/// <summary>
/// Changes the values of the specified pixels.
/// </summary>
/// <param name="geometry">The geometry of the area.</param>
/// <param name="values">The values of the pixels.</param>
void SetArea(MagickGeometry geometry, int[] values);

/// <summary>
/// Changes the values of the specified pixels.
/// </summary>
Expand All @@ -177,6 +198,13 @@ public interface IPixelCollection : IEnumerable<Pixel>, IDisposable
/// <param name="values">The values of the pixels.</param>
void SetArea(int x, int y, int width, int height, QuantumType[] values);

/// <summary>
/// Changes the values of the specified pixels.
/// </summary>
/// <param name="geometry">The geometry of the area.</param>
/// <param name="values">The values of the pixels.</param>
void SetArea(MagickGeometry geometry, QuantumType[] values);

/// <summary>
/// Returns the values of the pixels as an array.
/// </summary>
Expand Down
20 changes: 20 additions & 0 deletions Source/Magick.NET/Shared/Pixels/PixelCollection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,11 @@ public virtual void SetArea(int x, int y, int width, int height, byte[] values)
QuantumType[] castedValues = CastArray(values, Quantum.Convert);
SetAreaUnchecked(x, y, width, height, castedValues);
}

public virtual void SetArea(MagickGeometry geometry, byte[] values)
{
SetArea(geometry.X, geometry.Y, geometry.Width, geometry.Height, values);
}
#endif

public virtual void SetArea(int x, int y, int width, int height, double[] values)
Expand All @@ -161,17 +166,32 @@ public virtual void SetArea(int x, int y, int width, int height, double[] values
SetAreaUnchecked(x, y, width, height, castedValues);
}

public virtual void SetArea(MagickGeometry geometry, double[] values)
{
SetArea(geometry.X, geometry.Y, geometry.Width, geometry.Height, values);
}

public virtual void SetArea(int x, int y, int width, int height, int[] values)
{
QuantumType[] castedValues = CastArray(values, Quantum.Convert);
SetAreaUnchecked(x, y, width, height, castedValues);
}

public virtual void SetArea(MagickGeometry geometry, int[] values)
{
SetArea(geometry.X, geometry.Y, geometry.Width, geometry.Height, values);
}

public virtual void SetArea(int x, int y, int width, int height, QuantumType[] values)
{
SetAreaUnchecked(x, y, width, height, values);
}

public virtual void SetArea(MagickGeometry geometry, QuantumType[] values)
{
SetArea(geometry.X, geometry.Y, geometry.Width, geometry.Height, values);
}

public QuantumType[] ToArray()
{
return GetValues();
Expand Down
28 changes: 28 additions & 0 deletions Source/Magick.NET/Shared/Pixels/SafePixelCollection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,13 @@ public override void SetArea(int x, int y, int width, int height, byte[] values)
CheckValues(x, y, width, height, values);
base.SetArea(x, y, width, height, values);
}

public override void SetArea(MagickGeometry geometry, byte[] values)
{
Throw.IfNull(nameof(geometry), geometry);

base.SetArea(geometry, values);
}
#endif

public override void SetArea(int x, int y, int width, int height, double[] values)
Expand All @@ -122,18 +129,39 @@ public override void SetArea(int x, int y, int width, int height, double[] value
base.SetArea(x, y, width, height, values);
}

public override void SetArea(MagickGeometry geometry, double[] values)
{
Throw.IfNull(nameof(geometry), geometry);

base.SetArea(geometry, values);
}

public override void SetArea(int x, int y, int width, int height, int[] values)
{
CheckValues(x, y, width, height, values);
base.SetArea(x, y, width, height, values);
}

public override void SetArea(MagickGeometry geometry, int[] values)
{
Throw.IfNull(nameof(geometry), geometry);

base.SetArea(geometry, values);
}

public override void SetArea(int x, int y, int width, int height, QuantumType[] values)
{
CheckValues(x, y, width, height, values);
base.SetArea(x, y, width, height, values);
}

public override void SetArea(MagickGeometry geometry, QuantumType[] values)
{
Throw.IfNull(nameof(geometry), geometry);

base.SetArea(geometry, values);
}

public override byte[] ToByteArray(MagickGeometry geometry, string mapping)
{
Throw.IfNull(nameof(geometry), geometry);
Expand Down
24 changes: 24 additions & 0 deletions Source/Magick.NET/Shared/Pixels/UnsafePixelCollection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,12 @@ public override void SetArea(int x, int y, int width, int height, byte[] values)
if (values != null)
base.SetArea(x, y, width, height, values);
}

public override void SetArea(MagickGeometry geometry, byte[] values)
{
if (geometry != null)
base.SetArea(geometry, values);
}
#endif

public override void SetArea(int x, int y, int width, int height, double[] values)
Expand All @@ -53,18 +59,36 @@ public override void SetArea(int x, int y, int width, int height, double[] value
base.SetArea(x, y, width, height, values);
}

public override void SetArea(MagickGeometry geometry, double[] values)
{
if (geometry != null)
base.SetArea(geometry, values);
}

public override void SetArea(int x, int y, int width, int height, int[] values)
{
if (values != null)
base.SetArea(x, y, width, height, values);
}

public override void SetArea(MagickGeometry geometry, int[] values)
{
if (geometry != null)
base.SetArea(geometry, values);
}

public override void SetArea(int x, int y, int width, int height, QuantumType[] values)
{
if (values != null)
base.SetArea(x, y, width, height, values);
}

public override void SetArea(MagickGeometry geometry, QuantumType[] values)
{
if (geometry != null)
base.SetArea(geometry, values);
}

public override void SetPixel(IEnumerable<Pixel> pixels)
{
if (pixels != null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,36 @@ public void ShouldChangePixelsWhenByteArrayHasMaxNumberOfValues()
}
}

[TestMethod]
public void ShouldThrowExceptionWhenByteArrayIsSpecifiedAndGeometryIsNull()
{
using (IMagickImage image = new MagickImage(Files.ImageMagickJPG))
{
using (IPixelCollection pixels = image.GetPixels())
{
ExceptionAssert.ThrowsArgumentNullException("geometry", () =>
{
pixels.SetArea(null, new byte[] { 0 });
});
}
}
}

[TestMethod]
public void ShouldChangePixelsWhenGeometryAndByteArrayAreSpecified()
{
using (IMagickImage image = new MagickImage(Files.ImageMagickJPG))
{
using (IPixelCollection pixels = image.GetPixels())
{
var values = new byte[113 * 108 * image.ChannelCount];
pixels.SetArea(new MagickGeometry(10, 10, 113, 108), values);

ColorAssert.AreEqual(MagickColors.Black, image, image.Width - 1, image.Height - 1);
}
}
}

[TestMethod]
public void ShouldThrowExceptionWhenDoubleArrayIsNull()
{
Expand Down Expand Up @@ -153,6 +183,36 @@ public void ShouldChangePixelsWhenDoubleArrayHasMaxNumberOfValues()
}
}

[TestMethod]
public void ShouldThrowExceptionWhenDoubleArrayIsSpecifiedAndGeometryIsNull()
{
using (IMagickImage image = new MagickImage(Files.ImageMagickJPG))
{
using (IPixelCollection pixels = image.GetPixels())
{
ExceptionAssert.ThrowsArgumentNullException("geometry", () =>
{
pixels.SetArea(null, new double[] { 0 });
});
}
}
}

[TestMethod]
public void ShouldChangePixelsWhenGeometryAndDoubleArrayAreSpecified()
{
using (IMagickImage image = new MagickImage(Files.ImageMagickJPG))
{
using (IPixelCollection pixels = image.GetPixels())
{
var values = new double[113 * 108 * image.ChannelCount];
pixels.SetArea(new MagickGeometry(10, 10, 113, 108), values);

ColorAssert.AreEqual(MagickColors.Black, image, image.Width - 1, image.Height - 1);
}
}
}

[TestMethod]
public void ShouldThrowExceptionWhenIntArrayIsNull()
{
Expand Down Expand Up @@ -214,6 +274,36 @@ public void ShouldChangePixelsWhenIntArrayHasMaxNumberOfValues()
}
}

[TestMethod]
public void ShouldThrowExceptionWhenIntArrayIsSpecifiedAndGeometryIsNull()
{
using (IMagickImage image = new MagickImage(Files.ImageMagickJPG))
{
using (IPixelCollection pixels = image.GetPixels())
{
ExceptionAssert.ThrowsArgumentNullException("geometry", () =>
{
pixels.SetArea(null, new int[] { 0 });
});
}
}
}

[TestMethod]
public void ShouldChangePixelsWhenGeometryAndIntArrayAreSpecified()
{
using (IMagickImage image = new MagickImage(Files.ImageMagickJPG))
{
using (IPixelCollection pixels = image.GetPixels())
{
var values = new int[113 * 108 * image.ChannelCount];
pixels.SetArea(new MagickGeometry(10, 10, 113, 108), values);

ColorAssert.AreEqual(MagickColors.Black, image, image.Width - 1, image.Height - 1);
}
}
}

[TestMethod]
public void ShouldThrowExceptionWhenArrayIsNull()
{
Expand Down Expand Up @@ -274,6 +364,36 @@ public void ShouldChangePixelsWhenArrayHasMaxNumberOfValues()
}
}
}

[TestMethod]
public void ShouldThrowExceptionWhenArrayIsSpecifiedAndGeometryIsNull()
{
using (IMagickImage image = new MagickImage(Files.ImageMagickJPG))
{
using (IPixelCollection pixels = image.GetPixels())
{
ExceptionAssert.ThrowsArgumentNullException("geometry", () =>
{
pixels.SetArea(null, new QuantumType[] { 0 });
});
}
}
}

[TestMethod]
public void ShouldChangePixelsWhenGeometryAndArrayAreSpecified()
{
using (IMagickImage image = new MagickImage(Files.ImageMagickJPG))
{
using (IPixelCollection pixels = image.GetPixels())
{
var values = new QuantumType[113 * 108 * image.ChannelCount];
pixels.SetArea(new MagickGeometry(10, 10, 113, 108), values);

ColorAssert.AreEqual(MagickColors.Black, image, image.Width - 1, image.Height - 1);
}
}
}
}
}
}
Loading

0 comments on commit af69298

Please sign in to comment.