From 9c8bd2f178963420dac09110fb6e7560f6acaeac Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Wed, 23 Nov 2016 00:41:38 +1100 Subject: [PATCH] Darken Lighten --- src/ImageSharp/Colors/ColorTransforms.cs | 36 +++++++++++++++++++ .../Colors/ColorTransformTests.cs | 14 ++++++++ 2 files changed, 50 insertions(+) diff --git a/src/ImageSharp/Colors/ColorTransforms.cs b/src/ImageSharp/Colors/ColorTransforms.cs index 11d0139be..5993ac699 100644 --- a/src/ImageSharp/Colors/ColorTransforms.cs +++ b/src/ImageSharp/Colors/ColorTransforms.cs @@ -150,6 +150,42 @@ namespace ImageSharp return new Color(Pack(ref result)); } + /// + /// Selects the darker of the backdrop and source colors. + /// The backdrop is replaced with the source where the source is darker; otherwise, it is left unchanged. + /// + /// The backdrop color. + /// The source color. + /// + /// The . + /// + public static Color Darken(Color backdrop, Color source) + { + Vector4 vb = backdrop.ToVector4(); + Vector4 vs = source.ToVector4(); + Vector4 result = Vector4.Min(vb, vs); + result.W = vb.W; + return new Color(Pack(ref result)); + } + + /// + /// Selects the lighter of the backdrop and source colors. + /// The backdrop is replaced with the source where the source is lighter; otherwise, it is left unchanged. + /// + /// The backdrop color. + /// The source color. + /// + /// The . + /// + public static Color Lighten(Color backdrop, Color source) + { + Vector4 vb = backdrop.ToVector4(); + Vector4 vs = source.ToVector4(); + Vector4 result = Vector4.Max(vb, vs); + result.W = vb.W; + return new Color(Pack(ref result)); + } + /// /// Linearly interpolates from one color to another based on the given weighting. /// diff --git a/tests/ImageSharp.Tests/Colors/ColorTransformTests.cs b/tests/ImageSharp.Tests/Colors/ColorTransformTests.cs index dc710549b..41835e7c6 100644 --- a/tests/ImageSharp.Tests/Colors/ColorTransformTests.cs +++ b/tests/ImageSharp.Tests/Colors/ColorTransformTests.cs @@ -56,5 +56,19 @@ namespace ImageSharp.Tests.Colors Color overlay = Color.Overlay(Backdrop, Source); Assert.True(overlay == new Color(153, 82, 0)); } + + [Fact] + public void Darken() + { + Color darken = Color.Darken(Backdrop, Source); + Assert.True(darken == new Color(0, 102, 0)); + } + + [Fact] + public void Lighten() + { + Color lighten = Color.Lighten(Backdrop, Source); + Assert.True(lighten == new Color(204, 102, 153)); + } } }