public static void RgbToHsb(RgbColor rgbColor, ref HsbColor hsbColor) { 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)); hsbColor.Brightness = num2; if ((double)num1 == (double)num2) { if ((double)hsbColor.Brightness > 0.0) { hsbColor.Saturation = 0.0f; } } else { float num3 = num2 - num1; hsbColor.Saturation = num3 / num2; hsbColor.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)hsbColor.Hue < 0.0) { hsbColor.Hue += 6f; } hsbColor.Hue /= 6f; } hsbColor.Hue = Math.Min(1f, Math.Max(0.0f, hsbColor.Hue)); hsbColor.Saturation = Math.Min(1f, Math.Max(0.0f, hsbColor.Saturation)); hsbColor.Brightness = Math.Min(1f, Math.Max(0.0f, hsbColor.Brightness)); }
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 HsbToRgb(HsbColor hsbColor, ref RgbColor rgbColor) { hsbColor.Hue = Math.Min(1f, Math.Max(0.0f, hsbColor.Hue)); hsbColor.Saturation = Math.Min(1f, Math.Max(0.0f, hsbColor.Saturation)); hsbColor.Brightness = Math.Min(1f, Math.Max(0.0f, hsbColor.Brightness)); if ((double)hsbColor.Saturation == 0.0) { rgbColor.Red = rgbColor.Green = rgbColor.Blue = hsbColor.Brightness; } else { float num1 = (float)(((double)hsbColor.Hue - Math.Floor((double)hsbColor.Hue)) * 6.0); int num2 = (int)num1; float num3 = num1 - (float)num2; float num4 = hsbColor.Brightness * (1f - hsbColor.Saturation); float num5 = hsbColor.Brightness * (float)(1.0 - (double)hsbColor.Saturation * (double)num3); float num6 = hsbColor.Brightness * (float)(1.0 - (double)hsbColor.Saturation * (1.0 - (double)num3)); switch (num2 % 6) { case 0: rgbColor.Red = hsbColor.Brightness; rgbColor.Green = num6; rgbColor.Blue = num4; break; case 1: rgbColor.Red = num5; rgbColor.Green = hsbColor.Brightness; rgbColor.Blue = num4; break; case 2: rgbColor.Red = num4; rgbColor.Green = hsbColor.Brightness; rgbColor.Blue = num6; break; case 3: rgbColor.Red = num4; rgbColor.Green = num5; rgbColor.Blue = hsbColor.Brightness; break; case 4: rgbColor.Red = num6; rgbColor.Green = num4; rgbColor.Blue = hsbColor.Brightness; break; case 5: rgbColor.Red = hsbColor.Brightness; rgbColor.Green = num4; rgbColor.Blue = num5; break; default: throw new InvalidOperationException(ExceptionStringTable.CannotReachHere); } } 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)); }