// Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Tests.PixelFormats.PixelBlenders { using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing.Drawing; using Xunit; public class PorterDuffCompositorTests { // TODO: Add other modes to compare. public static readonly TheoryData CompositingOperators = new TheoryData { PixelBlenderMode.Src, PixelBlenderMode.Atop, PixelBlenderMode.Over, PixelBlenderMode.In, PixelBlenderMode.Out, PixelBlenderMode.Dest, PixelBlenderMode.DestAtop, PixelBlenderMode.DestOver, PixelBlenderMode.DestIn, PixelBlenderMode.DestOut, PixelBlenderMode.Clear, PixelBlenderMode.Xor }; [Theory] [WithFile(TestImages.Png.PDDest, nameof(CompositingOperators), PixelTypes.Rgba32)] public void PorterDuffOutputIsCorrect(TestImageProvider provider, PixelBlenderMode mode) { var srcFile = TestFile.Create(TestImages.Png.PDSrc); using (Image src = srcFile.CreateImage()) using (Image dest = provider.GetImage()) { using (Image res = dest.Clone(x => x.DrawImage(new GraphicsOptions { BlenderMode = mode }, src))) { res.DebugSave(provider, mode.ToString()); res.CompareToReferenceOutput(provider, mode.ToString()); } } } } }