📷 A modern, cross-platform, 2D Graphics library for .NET
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

39 lines
1.3 KiB

// 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]);
}
}
}
}