From 921adcb0b8cc0f3fd7ab0cafc4369515e16f03a5 Mon Sep 17 00:00:00 2001 From: christopherbauer Date: Thu, 14 Jan 2016 19:07:23 -0500 Subject: [PATCH] Fix the partial struct issue in #298 Former-commit-id: 5633cbc801b1f69ce97aac5e2c768eb9b24ae798 Former-commit-id: aceef6262bc1372ae91581633e5f106633b5f2af Former-commit-id: aad7fa159b413aec0fd153857ac7068a9f0a7221 --- .../Colors/ColorSpacialTransforms.cs | 31 +++++++++++ .../Colors/ColorSpacialTransformTests.cs | 53 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 src/ImageProcessor/Colors/ColorSpacialTransforms.cs create mode 100644 tests/ImageProcessor.Tests/Colors/ColorSpacialTransformTests.cs diff --git a/src/ImageProcessor/Colors/ColorSpacialTransforms.cs b/src/ImageProcessor/Colors/ColorSpacialTransforms.cs new file mode 100644 index 000000000..6a49708bf --- /dev/null +++ b/src/ImageProcessor/Colors/ColorSpacialTransforms.cs @@ -0,0 +1,31 @@ +// +// Copyright (c) James Jackson-South and contributors. +// Licensed under the Apache License, Version 2.0. +// + +namespace ImageProcessor +{ + using System.Numerics; + + public partial struct Color + { + public static Color Multiply(Color source, Color destination) + { + if (destination == Color.Black) + { + return Color.Black; + } + if (destination == Color.White) + { + return source; + } + return + new Color( + new Vector4( + source.backingVector.X * destination.backingVector.X, + source.backingVector.Y * destination.backingVector.Y, + source.backingVector.Z * destination.backingVector.Z, + source.backingVector.W * destination.backingVector.W)); + } + } +} diff --git a/tests/ImageProcessor.Tests/Colors/ColorSpacialTransformTests.cs b/tests/ImageProcessor.Tests/Colors/ColorSpacialTransformTests.cs new file mode 100644 index 000000000..faf8173f1 --- /dev/null +++ b/tests/ImageProcessor.Tests/Colors/ColorSpacialTransformTests.cs @@ -0,0 +1,53 @@ +namespace ImageProcessor.Tests +{ + using Xunit; + + public class ColorSpacialTransformTests + { + public class MultiplyTests + { + [Fact] + public void MultiplyBlendConvertsRedBackdropAndGreenOverlayToBlack() + { + var backdrop = Color.Red; + var overlay = Color.Green; + + var result = Color.Multiply(backdrop, overlay); + + Assert.Equal(Color.Black, result); + } + [Fact] + public void MultiplyBlendConvertsBlueBackdropAndWhiteOverlayToBlue() + { + var backdrop = Color.Blue; + var overlay = Color.White; + + var result = Color.Multiply(backdrop, overlay); + + Assert.Equal(Color.Blue, result); + } + [Fact] + public void MultiplyBlendConvertsBlueBackdropAndBlackOverlayToBlack() + { + var backdrop = Color.Blue; + var overlay = Color.Black; + + var result = Color.Multiply(backdrop, overlay); + + Assert.Equal(Color.Black, result); + } + [Fact] + public void MultiplyBlendConvertsBlueBackdropAndGrayOverlayToBlueBlack() + { + var backdrop = Color.Blue; + var overlay = Color.Gray; + + var result = Color.Multiply(backdrop, overlay); + + var expected = new Color(0, 0, 0.5f, 1); + + Assert.True(expected.AlmostEquals(result,.01f)); + } + } + } +} \ No newline at end of file