// Copyright (c) Six Labors. // Licensed under the Six Labors Split License. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing.Extensions.Convolution; using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison; namespace SixLabors.ImageSharp.Tests.Processing.Processors.Convolution; [GroupOutput("Convolution")] public class ConvolutionTests { private static readonly ImageComparer ValidatorComparer = ImageComparer.TolerantPercentage(0.05F); public static readonly TheoryData> Values = new() { // Sharpening kernel. new float[,] { { -1, -1, -1 }, { -1, 16, -1 }, { -1, -1, -1 } } }; public static readonly string[] InputImages = [ TestImages.Bmp.Car, TestImages.Png.CalliphoraPartial, TestImages.Png.Blur ]; [Theory] [WithFileCollection(nameof(InputImages), nameof(Values), PixelTypes.Rgba32)] public void OnFullImage(TestImageProvider provider, DenseMatrix value) where TPixel : unmanaged, IPixel => provider.RunValidatingProcessorTest( x => x.Convolve(value), string.Join('_', value.Data), ValidatorComparer); [Theory] [WithFileCollection(nameof(InputImages), nameof(Values), PixelTypes.Rgba32)] public void InBox(TestImageProvider provider, DenseMatrix value) where TPixel : unmanaged, IPixel => provider.RunRectangleConstrainedValidatingProcessorTest( (x, rect) => x.Convolve(rect, value), string.Join('_', value.Data), ValidatorComparer); }