internal void UpdateHSL(HSLStruct @struct) { this.H_.Text = (Math.Round(@struct.hue, 1) * 360).ToString().Truncate(3); var sat = Math.Round(@struct.saturation / 1, 3) * 100; var lg = Math.Round(@struct.lightness / 1, 3) * 100; if (sat == 100) { this.S_.Text = sat.ToString().Truncate(3) + "%"; } else if (sat > 9 & sat < 100) { this.S_.Text = sat.ToString().Truncate(2) + "%"; return; } else { this.S_.Text = sat.ToString().Truncate(1) + "%"; return; } if (lg == 100) { this.L_.Text = lg.ToString().Truncate(3) + "%"; } else if (lg > 9 & lg < 100) { this.L_.Text = lg.ToString().Truncate(2) + "%"; return; } else { this.L_.Text = lg.ToString().Truncate(1) + "%"; return; } }
/// <summary> /// Convert a <see cref="HSLStruct"/> to <see cref="Helpers.RGBStruct"/> /// </summary> /// <param name="HSL">the <see cref="HSLStruct"/> to convert</param> /// <returns>a <see cref="Helpers.RGBStruct"/> converted</returns> public static Helpers.RGBStruct ToRGB(this HSLStruct HSL) { double h = HSL.hue; double sl = HSL.saturation; double l = HSL.lightness; double v; double r, g, b; r = l; // default to gray g = l; b = l; v = (l <= 0.5) ? (l * (1.0 + sl)) : (l + sl - l * sl); if (v > 0) { double m; double sv; int sextant; double fract, vsf, mid1, mid2; m = l + l - v; sv = (v - m) / v; h *= 6.0; sextant = (int)h; fract = h - sextant; vsf = v * sv * fract; mid1 = m + vsf; mid2 = v - vsf; switch (sextant) { case 0: r = v; g = mid1; b = m; break; case 1: r = mid2; g = v; b = m; break; case 2: r = m; g = v; b = mid1; break; case 3: r = m; g = mid2; b = v; break; case 4: r = mid1; g = m; b = v; break; case 5: r = v; g = m; b = mid2; break; } } byte rr = Convert.ToByte(r * 255.0f); byte gg = Convert.ToByte(g * 255.0f); byte bb = Convert.ToByte(b * 255.0f); return(new Helpers.RGBStruct(new Color(255, rr, gg, bb))); }