Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 35 additions & 46 deletions ColorHelper.Tests/Converter/ColorConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,21 @@ public void HsvToRgb()
Assert.AreEqual(new RGB(32, 32, 162), result);
}

[Test]
public void HsvToRgbBlack()
{
var result = ColorConverter.HsvToRgb(new HSV(0, 0, 0));
Assert.AreEqual(new RGB(0, 0, 0), result);
}

[Test]
public void HsvToRgbWhite()
{
var result = ColorConverter.HsvToRgb(new HSV(0, 0, 100));
Assert.AreEqual(new RGB(255, 255, 255), result);
}


[Test]
public void HsvToHex()
{
Expand Down Expand Up @@ -159,6 +174,21 @@ public void HslToRgb()
Assert.AreEqual(new RGB(11, 63, 91), result);
}

[Test]
public void HslToRgbBlack()
{
var result = ColorConverter.HslToRgb(new HSL(0, 0, 0));
Assert.AreEqual(new RGB(0, 0, 0), result);
}

[Test]
public void HslToRgbWhite()
{
var result = ColorConverter.HslToRgb(new HSL(0, 0, 100));
Assert.AreEqual(new RGB(255, 255, 255), result);
}


[Test]
public void HslToHex()
{
Expand All @@ -179,51 +209,10 @@ public void HslToHsv()
var result = ColorConverter.HslToHsv(new HSL(338, 56, 18));
Assert.AreEqual(new HSV(338, 72, 28), result);
}

[Test]
public void HslToXyz()
{
var result = ColorConverter.HslToXyz(new HSL(50, 60, 80));
Assert.AreEqual(
new XYZ(68.4594297801599, 73.99060685808122, 50.208580024011965),
result);
}

[Test]
public void XyzToRgb()
{
var result = ColorConverter.XyzToRgb(
new XYZ(0.43011701684271597, 0.5867562215079294, 0.37774575807786603));
Assert.AreEqual(new RGB(10, 20, 10), result);
}

[Test]
public void XyzToHex()
{
var result = ColorConverter.XyzToHex(
new XYZ(5.699791412405596, 9.958316792578774, 3.135110923508634));
Assert.AreEqual(new HEX("226622"), result);
}

[Test]
public void XyzToCmyk()
{
var result = ColorConverter.XyzToCmyk(new XYZ(30, 30, 30));
Assert.AreEqual(new CMYK(0, 10, 12, 36), result);
}

[Test]
public void XyzToHsv()
{
var result = ColorConverter.XyzToHsv(new XYZ(10, 10, 10));
Assert.AreEqual(new HSV(10, 13, 39), result);
}

[Test]
public void XyzToHsl()
{
var result = ColorConverter.XyzToHsl(new XYZ(20, 20, 22));
Assert.AreEqual(new HSL(344, 4, 50), result);
}





}
}
6 changes: 6 additions & 0 deletions ColorHelper.sln.DotSettings.user
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=d6520c1c_002D4c66_002D43bf_002D8d33_002Dcad3f489da1a/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="Equals_HexXyz_Correct" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;TestAncestor&gt;&#xD;
&lt;TestId&gt;NUnit3x::D7E11FEA-1D25-40AC-A5FD-C4515821ECAF::.NETCoreApp,Version=v3.1::ConsoleHelper.Tests.ColorComparerTests.Equals_HexXyz_Correct&lt;/TestId&gt;&#xD;
&lt;/TestAncestor&gt;&#xD;
&lt;/SessionState&gt;</s:String></wpf:ResourceDictionary>
23 changes: 14 additions & 9 deletions ColorHelper/Converter/ColorConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public static XYZ RgbToXyz(RGB rgb)
{
double[] modifiedRGB = { rgb.R / 255.0, rgb.G / 255.0, rgb.B / 255.0 };

for(var x = 0; x < modifiedRGB.Length; x++)
for (var x = 0; x < modifiedRGB.Length; x++)
{
modifiedRGB[x] =
(modifiedRGB[x] > 0.04045) ?
Expand Down Expand Up @@ -202,7 +202,12 @@ public static RGB HslToRgb(HSL hsl)
q = (modifiedL < 0.5) ? modifiedL * (1 + modifiedS) : modifiedL + modifiedS - modifiedL * modifiedS;
p = 2 * modifiedL - q;

if (modifiedS != 0)
if (modifiedL == 0) // if the lightness value is 0 it will always be black
{
r = 0;
g = 0;
b = 0;
} else if (modifiedS != 0)
{
r = GetHue(p, q, modifiedH + 1.0 / 3);
g = GetHue(p, q, modifiedH);
Expand Down Expand Up @@ -258,7 +263,7 @@ public static HSV HslToHsv(HSL hsl)

return new HSV(hsl.H, (byte)Math.Round(hsvS * 100), (byte)Math.Round(hsvV * 100));
}

public static XYZ HslToXyz(HSL hsl)
{
return RgbToXyz(HslToRgb(hsl));
Expand All @@ -267,7 +272,7 @@ public static XYZ HslToXyz(HSL hsl)
public static RGB XyzToRgb(XYZ xyz)
{
double modifiedX = xyz.X / 100.0, modifiedY = xyz.Y / 100.0, modifiedZ = xyz.Z / 100.0;

double[] rgb = new double[3];
rgb[0] = modifiedX * 3.2410 + modifiedY * (-1.5374) + modifiedZ * (-0.4986);
rgb[1] = modifiedX * (-0.9692) + modifiedY * 1.8760 + modifiedZ * 0.0416;
Expand All @@ -277,25 +282,25 @@ public static RGB XyzToRgb(XYZ xyz)
{
rgb[x] = (rgb[x] <= 0.0031308) ? 12.92 * rgb[x] : 1.055 * Math.Pow(rgb[x], 0.41666666666) - 0.055;
}

return new RGB((byte)Math.Round(rgb[0] * 255), (byte)Math.Round(rgb[1] * 255), (byte)Math.Round(rgb[2] * 255));
}

public static HEX XyzToHex(XYZ xyz)
{
return RgbToHex(XyzToRgb(xyz));
}

public static CMYK XyzToCmyk(XYZ xyz)
{
return RgbToCmyk(XyzToRgb(xyz));
}

public static HSV XyzToHsv(XYZ xyz)
{
return RgbToHsv(XyzToRgb(xyz));
}

public static HSL XyzToHsl(XYZ xyz)
{
return RgbToHsl(XyzToRgb(xyz));
Expand Down