// Copyright (c) Six Labors. // Licensed under the Six Labors Split License. using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison; namespace SixLabors.ImageSharp.Tests.Processing.Processors.Effects; [Trait("Category", "Processors")] [GroupOutput("Effects")] public class OilPaintTest { public static readonly TheoryData OilPaintValues = new() { { 15, 10 }, { 6, 5 } }; public static readonly string[] InputImages = [ TestImages.Png.CalliphoraPartial, TestImages.Bmp.Car ]; [Theory] [WithFileCollection(nameof(InputImages), nameof(OilPaintValues), PixelTypes.Rgba32)] public void FullImage(TestImageProvider provider, int levels, int brushSize) where TPixel : unmanaged, IPixel => provider.RunValidatingProcessorTest( x => { x.OilPaint(levels, brushSize); return $"{levels}-{brushSize}"; }, ImageComparer.TolerantPercentage(0.01F), appendPixelTypeToFileName: false); [Theory] [WithFileCollection(nameof(InputImages), nameof(OilPaintValues), PixelTypes.Rgba32)] [WithTestPatternImages(nameof(OilPaintValues), 100, 100, PixelTypes.Rgba32)] public void InBox(TestImageProvider provider, int levels, int brushSize) where TPixel : unmanaged, IPixel => provider.RunRectangleConstrainedValidatingProcessorTest( (x, rect) => x.OilPaint(levels, brushSize, rect), $"{levels}-{brushSize}", ImageComparer.TolerantPercentage(0.01F)); [Fact] public void Issue2518_PixelComponentOutsideOfRange_ThrowsImageProcessingException() { using Image image = new(10, 10, new RgbaVector(1, 1, 100)); Assert.Throws(() => image.Mutate(ctx => ctx.OilPaint())); } }