internal static void ToColorSpace(IRgb color, ILuv item) { var xyz = new Xyz(); var white = XyzConverter.WhiteReference; xyz.Initialize(color); var y = xyz.Y / XyzConverter.WhiteReference.Y; item.L = y > XyzConverter.Epsilon ? 116.0 * XyzConverter.CubicRoot(y) - 16.0 : XyzConverter.Kappa * y; var targetDenominator = GetDenominator(xyz); var referenceDenominator = GetDenominator(white); // ReSharper disable CompareOfFloatsByEqualityOperator var xTarget = targetDenominator == 0 ? 0 : ((4.0 * xyz.X / targetDenominator) - (4.0 * white.X / referenceDenominator)); var yTarget = targetDenominator == 0 ? 0 : ((9.0 * xyz.Y / targetDenominator) - (9.0 * white.Y / referenceDenominator)); // ReSharper restore CompareOfFloatsByEqualityOperator item.U = 13.0 * item.L * xTarget; item.V = 13.0 * item.L * yTarget; }
public override IRgb ToRgb() { return(XyzConverter.ToColor(this)); }
public override void Initialize(IRgb color) { XyzConverter.ToColorSpace(color, this); }
public void Initialize(Rgb color) { XyzConverter.ToColorSpace(color, this); }