public static Color ColorCombineLuminosity(Color A, Color B) { ColorHSL x = ColorHSL.FromRGBA(A); ColorHSL y = ColorHSL.FromRGBA(B); x.l = y.l; return(ColorHSL.ToRGBA(x)); }
public static Color ColorCombineHue(Color A, Color B) { ColorHSL x = ColorHSL.FromRGBA(A); ColorHSL y = ColorHSL.FromRGBA(B); x.h = y.h; return(ColorHSL.ToRGBA(x)); }
public static Color ColorCombineSaturation(Color A, Color B) { ColorHSL x = ColorHSL.FromRGBA(A); ColorHSL y = ColorHSL.FromRGBA(B); x.s = y.s; return(ColorHSL.ToRGBA(x)); }
public static Color ToRGBA(ColorHSL input) { float v; float m, sv; int sextant; float fract, vsf, mid1, mid2; Color result; //result.R = input.l; // default to gray //result.G = input.l; //result.B = input.l; //result.A = input.a; if (input.l < 0.5f) { v = (input.l * (1.0f + input.s)); } else { v = (input.l + input.s - input.l * input.s); } if (v > 0) { m = input.l + input.l - v; sv = (v - m) / v; input.h *= 6.0f; sextant = (int)Math.Floor(input.h); fract = input.h - sextant; vsf = v * sv * fract; mid1 = m + vsf; mid2 = v - vsf; //switch (sextant) //{ // case 0: // { // result.R = v; // result.G = mid1; // result.B = m; // break; // } // case 1: // { // result.R = mid2; // result.G = v; // result.B = m; // break; // } // case 2: // { // result.R = m; // result.G = v; // result.B = mid1; // break; // } // case 3: // { // result.R = m; // result.G = mid2; // result.B = v; // break; // } // case 4: // { // result.R = mid1; // result.G = m; // result.B = v; // break; // } // case 5: // { // result.R = v; // result.G = m; // result.B = mid2; // break; // } //} } return(result); }