public void DangerousGetPixelRowMemory_PixelDataIsCorrect <TPixel>(TestImageProvider <TPixel> provider) where TPixel : unmanaged, IPixel <TPixel> { provider.LimitAllocatorBufferCapacity().InPixelsSqrt(200); using Image <TPixel> image = provider.GetImage(); for (int y = 0; y < image.Height; y++) { // Act: Memory <TPixel> rowMemoryFromImage = image.DangerousGetPixelRowMemory(y); Memory <TPixel> rowMemoryFromFrame = image.Frames.RootFrame.DangerousGetPixelRowMemory(y); Span <TPixel> spanFromImage = rowMemoryFromImage.Span; Span <TPixel> spanFromFrame = rowMemoryFromFrame.Span; Assert.Equal(spanFromFrame.Length, spanFromImage.Length); Assert.True(Unsafe.AreSame(ref spanFromFrame[0], ref spanFromImage[0])); // Assert: for (int x = 0; x < image.Width; x++) { Assert.Equal(provider.GetExpectedBasicTestPatternPixelAt(x, y), spanFromImage[x]); } } }
public void GetPixelRowMemory_PixelDataIsCorrect <TPixel>(TestImageProvider <TPixel> provider) where TPixel : unmanaged, IPixel <TPixel> { provider.LimitAllocatorBufferCapacity().InPixelsSqrt(200); using Image <TPixel> image = provider.GetImage(); for (int y = 0; y < image.Height; y++) { // Act: Memory <TPixel> rowMemory = image.GetPixelRowMemory(y); Span <TPixel> span = rowMemory.Span; // Assert: for (int x = 0; x < image.Width; x++) { Assert.Equal(provider.GetExpectedBasicTestPatternPixelAt(x, y), span[x]); } } }
private static void VerifyMemoryGroupDataMatchesTestPattern <TPixel>( TestImageProvider <TPixel> provider, IMemoryGroup <TPixel> memoryGroup, Size size) where TPixel : unmanaged, IPixel <TPixel> { Assert.True(memoryGroup.IsValid); Assert.Equal(size.Width * size.Height, memoryGroup.TotalLength); Assert.True(memoryGroup.BufferLength % size.Width == 0); int cnt = 0; for (MemoryGroupIndex i = memoryGroup.MaxIndex(); i < memoryGroup.MaxIndex(); i += 1, cnt++) { int y = cnt / size.Width; int x = cnt % size.Width; TPixel expected = provider.GetExpectedBasicTestPatternPixelAt(x, y); TPixel actual = memoryGroup.GetElementAt(i); Assert.Equal(expected, actual); } }