From 3440a7decfb61670b13aefceb06d6a84ea613eeb Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Fri, 20 Apr 2018 08:09:49 +1000 Subject: [PATCH] Fix System.Drawing.Bridge --- .../ImageSharp.Tests/Drawing/DrawImageTest.cs | 4 +- .../ReferenceCodecs/SystemDrawingBridge.cs | 90 +++---------------- .../Tests/ReferenceCodecTests.cs | 2 +- 3 files changed, 15 insertions(+), 81 deletions(-) diff --git a/tests/ImageSharp.Tests/Drawing/DrawImageTest.cs b/tests/ImageSharp.Tests/Drawing/DrawImageTest.cs index 0ff0b8557..d63467435 100644 --- a/tests/ImageSharp.Tests/Drawing/DrawImageTest.cs +++ b/tests/ImageSharp.Tests/Drawing/DrawImageTest.cs @@ -93,7 +93,7 @@ namespace SixLabors.ImageSharp.Tests Assert.Equal(Rgba32.White, backgroundPixel); Assert.Equal(overlayPixel, background[0, 0]); - background.DebugSave(provider, new[] { "Negative" }); + background.DebugSave(provider, testOutputDetails: "Negative"); } } @@ -115,7 +115,7 @@ namespace SixLabors.ImageSharp.Tests Assert.Equal(Rgba32.White, backgroundPixel); Assert.Equal(overlayPixel, background[xy, xy]); - background.DebugSave(provider, new[] { "Positive" }); + background.DebugSave(provider, testOutputDetails: "Positive"); } } } diff --git a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs index d1270dcfd..d04d2343f 100644 --- a/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs +++ b/tests/ImageSharp.Tests/TestUtilities/ReferenceCodecs/SystemDrawingBridge.cs @@ -12,72 +12,6 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs { public static class SystemDrawingBridge { - // TODO: It would be nice to have this method in PixelOperations - private static void ToArgb32(Span source, Span dest) - where TPixel : struct, IPixel - { - int length = source.Length; - Guard.MustBeSizedAtLeast(dest, length, nameof(dest)); - - using (IBuffer rgbaBuffer = Configuration.Default.MemoryManager.Allocate(length)) - { - Span rgbaSpan = rgbaBuffer.Span; - PixelOperations.Instance.ToRgba32(source, rgbaSpan, length); - - for (int i = 0; i < length; i++) - { - ref Rgba32 s = ref rgbaSpan[i]; - ref Argb32 d = ref dest[i]; - - d.PackFromRgba32(s); - } - } - } - - private static void FromArgb32(Span source, Span dest) - where TPixel : struct, IPixel - { - int length = source.Length; - Guard.MustBeSizedAtLeast(dest, length, nameof(dest)); - - using (IBuffer rgbaBuffer = Configuration.Default.MemoryManager.Allocate(length)) - { - Span rgbaSpan = rgbaBuffer.Span; - PixelOperations.Instance.ToRgba32(source, rgbaSpan, length); - - for (int i = 0; i < length; i++) - { - ref Rgba32 s = ref rgbaSpan[i]; - ref TPixel d = ref dest[i]; - - d.PackFromRgba32(s); - } - } - } - - private static void FromRgb24(Span source, Span dest) - where TPixel : struct, IPixel - { - int length = source.Length; - Guard.MustBeSizedAtLeast(dest, length, nameof(dest)); - - using (IBuffer rgbBuffer = Configuration.Default.MemoryManager.Allocate(length)) - { - Span rgbSpan = rgbBuffer.Span; - PixelOperations.Instance.ToRgb24(source, rgbSpan, length); - - for (int i = 0; i < length; i++) - { - ref Rgb24 s = ref rgbSpan[i]; - ref TPixel d = ref dest[i]; - var rgba = default(Rgba32); - s.ToRgba32(ref rgba); - - d.PackFromRgba32(rgba); - } - } - } - internal static unsafe Image FromFromArgb32SystemDrawingBitmap(System.Drawing.Bitmap bmp) where TPixel : struct, IPixel { @@ -99,9 +33,9 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs var image = new Image(w, h); - using (IBuffer workBuffer = Configuration.Default.MemoryManager.Allocate(w)) + using (IBuffer workBuffer = Configuration.Default.MemoryManager.Allocate(w)) { - fixed (Argb32* destPtr = &workBuffer.DangerousGetPinnableReference()) + fixed (Bgra32* destPtr = &workBuffer.DangerousGetPinnableReference()) { for (int y = 0; y < h; y++) { @@ -110,8 +44,7 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs byte* sourcePtr = sourcePtrBase + data.Stride * y; Buffer.MemoryCopy(sourcePtr, destPtr, destRowByteCount, sourceRowByteCount); - - FromArgb32(workBuffer.Span, row); + PixelOperations.Instance.PackFromBgra32(workBuffer.Span, row, row.Length); } } } @@ -139,13 +72,13 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs byte* sourcePtrBase = (byte*)data.Scan0; long sourceRowByteCount = data.Stride; - long destRowByteCount = w * sizeof(Rgb24); + long destRowByteCount = w * sizeof(Bgr24); var image = new Image(w, h); - using (IBuffer workBuffer = Configuration.Default.MemoryManager.Allocate(w)) + using (IBuffer workBuffer = Configuration.Default.MemoryManager.Allocate(w)) { - fixed (Rgb24* destPtr = &workBuffer.DangerousGetPinnableReference()) + fixed (Bgr24* destPtr = &workBuffer.DangerousGetPinnableReference()) { for (int y = 0; y < h; y++) { @@ -154,8 +87,9 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs byte* sourcePtr = sourcePtrBase + data.Stride * y; Buffer.MemoryCopy(sourcePtr, destPtr, destRowByteCount, sourceRowByteCount); + PixelOperations.Instance.PackFromBgr24(workBuffer.Span, row, row.Length); - FromRgb24(workBuffer.Span, row); + // FromRgb24(workBuffer.Span, row); } } } @@ -175,17 +109,17 @@ namespace SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs byte* destPtrBase = (byte*)data.Scan0; long destRowByteCount = data.Stride; - long sourceRowByteCount = w * sizeof(Argb32); + long sourceRowByteCount = w * sizeof(Bgra32); - using (IBuffer workBuffer = image.GetConfiguration().MemoryManager.Allocate(w)) + using (IBuffer workBuffer = image.GetConfiguration().MemoryManager.Allocate(w)) { - fixed (Argb32* sourcePtr = &workBuffer.DangerousGetPinnableReference()) + fixed (Bgra32* sourcePtr = &workBuffer.DangerousGetPinnableReference()) { for (int y = 0; y < h; y++) { Span row = image.Frames.RootFrame.GetPixelRowSpan(y); - ToArgb32(row, workBuffer.Span); + PixelOperations.Instance.ToBgra32(row, workBuffer.Span, row.Length); byte* destPtr = destPtrBase + data.Stride * y; Buffer.MemoryCopy(sourcePtr, destPtr, destRowByteCount, sourceRowByteCount); diff --git a/tests/ImageSharp.Tests/TestUtilities/Tests/ReferenceCodecTests.cs b/tests/ImageSharp.Tests/TestUtilities/Tests/ReferenceCodecTests.cs index 6ff935b54..eda6c99a3 100644 --- a/tests/ImageSharp.Tests/TestUtilities/Tests/ReferenceCodecTests.cs +++ b/tests/ImageSharp.Tests/TestUtilities/Tests/ReferenceCodecTests.cs @@ -85,7 +85,7 @@ namespace SixLabors.ImageSharp.Tests } } - [Theory(Skip = "Doesen't work yet :(")] + [Theory] [WithTestPatternImages(100, 100, PixelTypes.Rgba32)] public void FromFromRgb24SystemDrawingBitmap2(TestImageProvider provider) where TPixel : struct, IPixel