From 1a02468afd279c799706693b8f6da7efd0ec1129 Mon Sep 17 00:00:00 2001 From: Eric Mellino Date: Sat, 16 Sep 2017 03:04:09 -0700 Subject: [PATCH] Add a test case for DangerousGetPinnableReferenceToPixelBuffer. --- .../Advanced/ImageExtensionsTests.cs | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 tests/ImageSharp.Tests/Advanced/ImageExtensionsTests.cs diff --git a/tests/ImageSharp.Tests/Advanced/ImageExtensionsTests.cs b/tests/ImageSharp.Tests/Advanced/ImageExtensionsTests.cs new file mode 100644 index 000000000..3bd6bf19b --- /dev/null +++ b/tests/ImageSharp.Tests/Advanced/ImageExtensionsTests.cs @@ -0,0 +1,39 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the Apache License, Version 2.0. + +using Xunit; +using SixLabors.ImageSharp.Advanced; +using System.Runtime.CompilerServices; + +namespace SixLabors.ImageSharp.Tests.Advanced +{ + public class ImageExtensionsTests + { + [Fact] + public unsafe void DangerousGetPinnableReference_CopyToBuffer() + { + var image = new Image(128, 128); + for (int y = 0; y < image.Height; y++) + for (int x = 0; x < image.Width; x++) + { + image[x, y] = new Rgba32(x, 255 - y, x + y); + } + + Rgba32[] targetBuffer = new Rgba32[image.Width * image.Height]; + + fixed (Rgba32* targetPtr = targetBuffer) + fixed (Rgba32* pixelBasePtr = &image.DangerousGetPinnableReferenceToPixelBuffer()) + { + uint dataSizeInBytes = (uint)(image.Width * image.Height * Unsafe.SizeOf()); + Unsafe.CopyBlock(targetPtr, pixelBasePtr, dataSizeInBytes); + } + + for (int y = 0; y < image.Height; y++) + for (int x = 0; x < image.Width; x++) + { + int linearIndex = y * image.Width + x; + Assert.Equal(image[x, y], targetBuffer[linearIndex]); + } + } + } +}