123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- using ChunkyImageLib.DataHolders;
- using Drawie.Backend.Core;
- using Drawie.Backend.Core.ColorsImpl;
- using Drawie.Backend.Core.Surfaces.ImageData;
- using Drawie.Numerics;
- using PixiEditor.ChangeableDocument.Changeables.Graph;
- using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes;
- using PixiEditor.ChangeableDocument.Enums;
- using PixiEditor.ChangeableDocument.Rendering;
- namespace PixiEditor.Tests;
- public class BlendingTests : PixiEditorTest
- {
- [Theory]
- [InlineData(BlendMode.Normal, "#ffffff")]
- [InlineData(BlendMode.Erase, "#000000")]
- [InlineData(BlendMode.Darken, "#ff0000")]
- [InlineData(BlendMode.Multiply, "#ff0000")]
- [InlineData(BlendMode.ColorBurn, "#ff0000")]
- [InlineData(BlendMode.Lighten, "#ffffff")]
- [InlineData(BlendMode.Screen, "#ffffff")]
- [InlineData(BlendMode.ColorDodge, "#ff0000")]
- [InlineData(BlendMode.LinearDodge, "#ffffff")]
- [InlineData(BlendMode.Overlay, "#ff0000")]
- [InlineData(BlendMode.SoftLight, "#ff0000")]
- [InlineData(BlendMode.HardLight, "#ffffff")]
- [InlineData(BlendMode.Difference, "#00ffff")]
- [InlineData(BlendMode.Exclusion, "#00ffff")]
- [InlineData(BlendMode.Hue, "#949494")]
- [InlineData(BlendMode.Saturation, "#949494")]
- [InlineData(BlendMode.Luminosity, "#ffffff")]
- [InlineData(BlendMode.Color, "#949494")]
- public void TestThatBlendingWhiteOverRedBetweenTwoLayersInLinearSrgbWorksCorrectly(
- BlendMode blendMode,
- string? expectedColor)
- {
- NodeGraph graph = new NodeGraph();
- var firstImageLayer = new ImageLayerNode(new VecI(1, 1), ColorSpace.CreateSrgbLinear());
- var firstImg = firstImageLayer.GetLayerImageAtFrame(0);
- firstImg.EnqueueDrawPixel(VecI.Zero, new Color(255, 0, 0, 255), Drawie.Backend.Core.Surfaces.BlendMode.Src);
- firstImg.CommitChanges();
- var secondImageLayer = new ImageLayerNode(new VecI(1, 1), ColorSpace.CreateSrgbLinear());
- var secondImg = secondImageLayer.GetLayerImageAtFrame(0);
- secondImg.EnqueueDrawPixel(VecI.Zero, new Color(255, 255, 255, 255), Drawie.Backend.Core.Surfaces.BlendMode.Src);
- secondImg.CommitChanges();
- var outputNode = new OutputNode();
- graph.AddNode(firstImageLayer);
- graph.AddNode(secondImageLayer);
- graph.AddNode(outputNode);
- firstImageLayer.Output.ConnectTo(secondImageLayer.Background);
- secondImageLayer.Output.ConnectTo(outputNode.Input);
- secondImageLayer.BlendMode.NonOverridenValue = blendMode;
- Surface output = Surface.ForProcessing(VecI.One, ColorSpace.CreateSrgbLinear());
- graph.Execute(new RenderContext(output.DrawingSurface, 0, ChunkResolution.Full, VecI.One, VecI.One, ColorSpace.CreateSrgbLinear(), 1));
- Color result = output.GetSrgbPixel(VecI.Zero);
- Assert.Equal(expectedColor, result.ToRgbHex());
- }
- }
|