public static C3f FromXYZToYxy(this C3f XYZ) { double Y = XYZ.G; double x = XYZ.R / (XYZ.R + XYZ.G + XYZ.B); double y = XYZ.G / (XYZ.R + XYZ.G + XYZ.B); return(new C3f(Y, x, y)); }
public static C3f FromYuvToYxy(this C3f Yuv) { var Y = Yuv.R; var u = Yuv.G; var v = Yuv.B; return(new C3f(Y, 3 * u / (2 * u - 8 * v + 4), 2 * v / (2 * u - 8 * v + 4))); }
public static C4f GetLodColor(int level, int maxLevel) { if (maxLevel == 0) { return(C4f.Red); } float hue = ((float)level / (float)maxLevel) * 2 / (float)3; return(C3f.FromHSV(hue, 1.0f, 1.0f).ToC4f()); }
/// <summary> /// converts Lab-color to XYZ-color /// </summary> /// <param name="lab">L=[0,100], a=[-150,150], b=[-150,150]</param> /// <returns></returns> public static C3f LabToXYZ(this C3f lab) { var L = lab.R; var a = lab.G; var b = lab.B; var d = (1.0f / 116.0f) * (L + 16); var Y = YREF * fInv(d); var X = XREF * fInv(d + a / 500.0f); var Z = ZREF * fInv(d - b / 200.0f); return(new C3f(X, Y, Z)); }
public static C3f FromYxyToXYZ(this C3f Yxy) { double Y = Yxy.R; double x = Yxy.G; double y = Yxy.B; //AZ: check for y == 0 needed - szabo: DONE if (y == 0) { y = double.Epsilon; } return(new C3f((x * (Y / y)), Y, ((1 - x - y) * (Y / y)))); }
/// <summary> /// Converts XYZ-color to Lab-color /// </summary> /// <param name="xyz"></param> /// <returns></returns> public static C3f XYZToLab(this C3f xyz) { var X = xyz.R / XREF; var Y = xyz.G / YREF; var Z = xyz.B / ZREF; var fx = f(X); var fy = f(Y); var fz = f(Z); var L = (116 * fy) - 16; var a = 500 * (fx - fy); var b = 200 * (fy - fz); return(new C3f(L, a, b)); }
/// <summary> /// Returns the int representation of the supplied C3f color. /// </summary> public static int FromRgbToInt(this C3f self) { return(Col.ByteFromDouble(self.R) << 16 | Col.ByteFromDouble(self.G) << 8 | Col.ByteFromDouble(self.B)); }
/// <summary> /// Returns the GamutMap represantion of the supplied C3f. /// </summary> public static C3f ToGamutMap(this C3f self) { return(self.Clamped(0.0f, 1.0f)); }
public void Write(C3f c) { Write(c.R); Write(c.G); Write(c.B); }
public void Write(C3f value) { base.Write(Conversion.HostToNetworkOrder(value.R)); base.Write(Conversion.HostToNetworkOrder(value.G)); base.Write(Conversion.HostToNetworkOrder(value.B)); }
/// <summary>Computes MD5 hash of given data.</summary> public static Guid ComputeMd5Hash(this C3f x) => ComputeMd5Hash(bw => { bw.Write(x.R); bw.Write(x.G); bw.Write(x.B); });
/// <summary> /// C3f to System.Drawing.Color. /// </summary> public static Color ToColor(this C3f color) => Color.FromArgb( Col.ByteFromFloatClamped(color.R), Col.ByteFromFloatClamped(color.G), Col.ByteFromFloatClamped(color.B));