// Copyright (c) Six Labors. // Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Tests.PixelFormats.PixelBlenders { using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; using Xunit; public class PorterDuffCompositorTests { // TODO: Add other modes to compare. public static readonly TheoryData CompositingOperators = new TheoryData { PixelAlphaCompositionMode.Src, PixelAlphaCompositionMode.SrcAtop, PixelAlphaCompositionMode.SrcOver, PixelAlphaCompositionMode.SrcIn, PixelAlphaCompositionMode.SrcOut, PixelAlphaCompositionMode.Dest, PixelAlphaCompositionMode.DestAtop, PixelAlphaCompositionMode.DestOver, PixelAlphaCompositionMode.DestIn, PixelAlphaCompositionMode.DestOut, PixelAlphaCompositionMode.Clear, PixelAlphaCompositionMode.Xor }; [Theory] [WithFile(TestImages.Png.PDDest, nameof(CompositingOperators), PixelTypes.Rgba32)] public void PorterDuffOutputIsCorrect(TestImageProvider provider, PixelAlphaCompositionMode mode) { var srcFile = TestFile.Create(TestImages.Png.PDSrc); using (Image src = srcFile.CreateRgba32Image()) using (Image dest = provider.GetImage()) { var options = new GraphicsOptions { Antialias = false, AlphaCompositionMode = mode }; using (Image res = dest.Clone(x => x.DrawImage(src, options))) { string combinedMode = mode.ToString(); if (combinedMode != "Src" && combinedMode.StartsWith("Src")) { combinedMode = combinedMode.Substring(3); } res.DebugSave(provider, combinedMode); res.CompareToReferenceOutput(provider, combinedMode); } } } } }