mirror of https://github.com/SixLabors/ImageSharp
committed by
Scott Williams
1 changed files with 39 additions and 0 deletions
@ -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<Rgba32>(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<Rgba32>()); |
|||
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]); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue