public static void RgbToHls(RgbColor rgbColor, ref HlsColor hlsColor) { rgbColor.Red = Math.Min(1f, Math.Max(0.0f, rgbColor.Red)); rgbColor.Green = Math.Min(1f, Math.Max(0.0f, rgbColor.Green)); rgbColor.Blue = Math.Min(1f, Math.Max(0.0f, rgbColor.Blue)); float num1 = Math.Min(rgbColor.Red, Math.Min(rgbColor.Green, rgbColor.Blue)); float num2 = Math.Max(rgbColor.Red, Math.Max(rgbColor.Green, rgbColor.Blue)); hlsColor.Lightness = (float)(((double)num1 + (double)num2) / 2.0); if ((double)num1 == (double)num2) { if ((double)hlsColor.Lightness > 0.0 && (double)hlsColor.Lightness < 1.0) { hlsColor.Saturation = 0.0f; } } else { float num3 = num2 - num1; hlsColor.Saturation = (double)hlsColor.Lightness <= 0.5 ? num3 / (num1 + num2) : num3 / (2f - num1 - num2); hlsColor.Hue = (double)rgbColor.Red != (double)num2 ? ((double)rgbColor.Green != (double)num2 ? (float)(4.0 + ((double)rgbColor.Red - (double)rgbColor.Green) / (double)num3) : (float)(2.0 + ((double)rgbColor.Blue - (double)rgbColor.Red) / (double)num3)) : (rgbColor.Green - rgbColor.Blue) / num3; if ((double)hlsColor.Hue < 0.0) { hlsColor.Hue += 6f; } hlsColor.Hue /= 6f; } hlsColor.Hue = Math.Min(1f, Math.Max(0.0f, hlsColor.Hue)); hlsColor.Lightness = Math.Min(1f, Math.Max(0.0f, hlsColor.Lightness)); hlsColor.Saturation = Math.Min(1f, Math.Max(0.0f, hlsColor.Saturation)); }
public void CopyFrom(ColorModel source) { this.color = source.color; this.rgbColor = source.rgbColor; this.hsbColor = source.hsbColor; this.hlsColor = source.hlsColor; this.cmykColor = source.cmykColor; this.isAlphaEnabled = source.isAlphaEnabled; this.OnColorChanged(); }
public static void HlsToRgb(HlsColor hlsColor, ref RgbColor rgbColor) { hlsColor.Hue = Math.Min(1f, Math.Max(0.0f, hlsColor.Hue)); hlsColor.Lightness = Math.Min(1f, Math.Max(0.0f, hlsColor.Lightness)); hlsColor.Saturation = Math.Min(1f, Math.Max(0.0f, hlsColor.Saturation)); if ((double)hlsColor.Saturation == 0.0) { rgbColor.Red = rgbColor.Green = rgbColor.Blue = hlsColor.Lightness; } else { float hue = (float)(((double)hlsColor.Hue - Math.Floor((double)hlsColor.Hue)) * 6.0); float n2 = (double)hlsColor.Lightness > 0.5 ? (float)((double)hlsColor.Lightness + (double)hlsColor.Saturation - (double)hlsColor.Lightness * (double)hlsColor.Saturation) : hlsColor.Lightness * (1f + hlsColor.Saturation); float n1 = 2f * hlsColor.Lightness - n2; rgbColor.Red = ColorUtility.HlsValue(n1, n2, hue + 2f); rgbColor.Green = ColorUtility.HlsValue(n1, n2, hue); rgbColor.Blue = ColorUtility.HlsValue(n1, n2, hue - 2f); } rgbColor.Red = Math.Min(1f, Math.Max(0.0f, rgbColor.Red)); rgbColor.Green = Math.Min(1f, Math.Max(0.0f, rgbColor.Green)); rgbColor.Blue = Math.Min(1f, Math.Max(0.0f, rgbColor.Blue)); }