Files
Speckle.Material.Avalonia/Material.Colors/ColorManipulation/LabConverter.cs
T
2022-07-05 10:21:35 +09:00

40 lines
1023 B
C#

using System;
using Avalonia.Media;
namespace Material.Colors.ColorManipulation
{
internal static class LabConverter
{
public static Lab ToLab(this Color c)
{
var xyz = c.ToXyz();
return xyz.ToLab();
}
public static Lab ToLab(this Xyz xyz)
{
double XyzLab(double v)
{
if (v > LabConstants.E)
return Math.Pow(v, 1 / 3.0);
return (v * LabConstants.K + 16) / 116;
}
var fx = XyzLab(xyz.X / LabConstants.WhitePointX);
var fy = XyzLab(xyz.Y / LabConstants.WhitePointY);
var fz = XyzLab(xyz.Z / LabConstants.WhitePointZ);
var l = 116 * fy - 16;
var a = 500 * (fx - fy);
var b = 200 * (fy - fz);
return new Lab(l, a, b);
}
public static Color ToColor(this Lab lab)
{
var xyz = lab.ToXyz();
return xyz.ToColor();
}
}
}