diff --git a/tests/ImageSharp.Tests/PixelAccessorTests.cs b/tests/ImageSharp.Tests/PixelAccessorTests.cs new file mode 100644 index 0000000000..ab71d8de79 --- /dev/null +++ b/tests/ImageSharp.Tests/PixelAccessorTests.cs @@ -0,0 +1,168 @@ +// +// Copyright (c) James Jackson-South and contributors. +// Licensed under the Apache License, Version 2.0. +// + +namespace ImageSharp.Tests +{ + using Xunit; + + /// + /// Tests the class. + /// + public class PixelAccessorTests + { + [Fact] + public void CopyFromZYX() + { + CopyFromZYX(new Image(1, 1)); + } + + [Fact] + public void CopyFromZYXOptimized() + { + CopyFromZYX(new Image(1, 1)); + } + + [Fact] + public void CopyFromZYXW() + { + CopyFromZYXW(new Image(1, 1)); + } + + [Fact] + public void CopyFromZYXWOptimized() + { + CopyFromZYXW(new Image(1, 1)); + } + + [Fact] + public void CopyToZYX() + { + CopyToZYX(new Image(1, 1)); + } + + [Fact] + public void CopyToZYXOptimized() + { + CopyToZYX(new Image(1, 1)); + } + + [Fact] + public void CopyToZYXW() + { + CopyToZYXW(new Image(1, 1)); + } + + [Fact] + public void CopyToZYXWOptimized() + { + CopyToZYXW(new Image(1, 1)); + } + + private static void CopyFromZYX(Image image) + where TColor : struct, IPackedPixel + where TPacked : struct + { + using (PixelAccessor pixels = image.Lock()) + { + byte red = 1; + byte green = 2; + byte blue = 3; + byte alpha = 255; + + using (PixelRow row = new PixelRow(1, ComponentOrder.ZYX)) + { + row.Bytes[0] = blue; + row.Bytes[1] = green; + row.Bytes[2] = red; + + pixels.CopyFrom(row, 0); + + Color color = (Color) (object) pixels[0, 0]; + Assert.Equal(red, color.R); + Assert.Equal(green, color.G); + Assert.Equal(blue, color.B); + Assert.Equal(alpha, color.A); + } + } + } + + private static void CopyFromZYXW(Image image) + where TColor : struct, IPackedPixel + where TPacked : struct + { + using (PixelAccessor pixels = image.Lock()) + { + byte red = 1; + byte green = 2; + byte blue = 3; + byte alpha = 4; + + using (PixelRow row = new PixelRow(1, ComponentOrder.ZYXW)) + { + row.Bytes[0] = blue; + row.Bytes[1] = green; + row.Bytes[2] = red; + row.Bytes[3] = alpha; + + pixels.CopyFrom(row, 0); + + Color color = (Color) (object) pixels[0, 0]; + Assert.Equal(red, color.R); + Assert.Equal(green, color.G); + Assert.Equal(blue, color.B); + Assert.Equal(alpha, color.A); + } + } + } + + private static void CopyToZYX(Image image) + where TColor : struct, IPackedPixel + where TPacked : struct + { + using (PixelAccessor pixels = image.Lock()) + { + byte red = 1; + byte green = 2; + byte blue = 3; + + using (PixelRow row = new PixelRow(1, ComponentOrder.ZYX)) + { + pixels[0, 0] = (TColor) (object) new Color(red, green, blue); + + pixels.CopyTo(row, 0); + + Assert.Equal(blue, row.Bytes[0]); + Assert.Equal(green, row.Bytes[1]); + Assert.Equal(red, row.Bytes[2]); + } + } + } + + private static void CopyToZYXW(Image image) + where TColor : struct, IPackedPixel + where TPacked : struct + { + using (PixelAccessor pixels = image.Lock()) + { + byte red = 1; + byte green = 2; + byte blue = 3; + byte alpha = 4; + + using (PixelRow row = new PixelRow(1, ComponentOrder.ZYXW)) + { + pixels[0, 0] = (TColor) (object) new Color(red, green, blue, alpha); + + pixels.CopyTo(row, 0); + + Assert.Equal(blue, row.Bytes[0]); + Assert.Equal(green, row.Bytes[1]); + Assert.Equal(red, row.Bytes[2]); + Assert.Equal(alpha, row.Bytes[3]); + } + } + } + } +}