From 82b717c00807a0b97397a66efeadc2c2f5b73fe5 Mon Sep 17 00:00:00 2001 From: "SND\\eagleeyestudios_cp" Date: Wed, 10 Oct 2012 15:12:25 +0000 Subject: [PATCH] - Fixed missing alpha clamp in Color.cs/FromNonPremultiplied - Added TestCase for Random Color generation using Random. --- .../Strukturen/ColorTest.cs | 14 ++++++++++++++ ANX.Framework/Color.cs | 18 ++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/ANX.Framework.TestCenter/Strukturen/ColorTest.cs b/ANX.Framework.TestCenter/Strukturen/ColorTest.cs index fceadf7e..1428dfe5 100644 --- a/ANX.Framework.TestCenter/Strukturen/ColorTest.cs +++ b/ANX.Framework.TestCenter/Strukturen/ColorTest.cs @@ -404,6 +404,20 @@ namespace ANX.Framework.TestCenter.Strukturen AssertHelper.ConvertEquals(xna, anx, "FromNonPremultipliedIntStatic2"); } + [Test] + public void FromNonPremultipliedIntRandom() + { + Random rand = new Random(); + int r = rand.Next(255); + int g = rand.Next(255); + int b = rand.Next(255); + int a = 255; + XNAColor xna = XNAColor.FromNonPremultiplied(r, g, b, a); + ANXColor anx = ANXColor.FromNonPremultiplied(r, g, b, a); + + AssertHelper.ConvertEquals(xna, anx, "FromNonPremultipliedIntStatic2"); + } + [Test, TestCaseSource("fourfloats")] public void FromNonPremultipliedVector4Static(float r, float g, float b, float a) { diff --git a/ANX.Framework/Color.cs b/ANX.Framework/Color.cs index df58911a..64633be1 100644 --- a/ANX.Framework/Color.cs +++ b/ANX.Framework/Color.cs @@ -811,9 +811,10 @@ namespace ANX.Framework { Color color; - r = ClampValue((long)r * a / 255L); - g = ClampValue((long)g * a / 255L); - b = ClampValue((long)b * a / 255L); + r = ClampValue64((long)r * a / 255L); + g = ClampValue64((long)g * a / 255L); + b = ClampValue64((long)b * a / 255L); + a = ClampValue32(a); /* //What the heck is this? Anyway it does not work! if (((((r | g) | b) | a) & -256) != 0) @@ -829,7 +830,7 @@ namespace ANX.Framework return color; } - private static int ClampValue(long value) + private static int ClampValue64(long value) { if (value < 0L) return 0; @@ -838,6 +839,15 @@ namespace ANX.Framework return (int) value; } + public static int ClampValue32(int value) + { + if (value < 0) + return 0; + if (value > 255) + return 255; + return value; + } + public static Color FromNonPremultiplied(Vector4 vector) { Color color;