protected DoubleColor GetDoubleColor( ColorWheelBase wl, double degree, double currentRadius, double gradRadius ) { DoubleColor val; AHSL hsl; DoubleColor dc = wl.GetColor(degree); switch (PaintMethod) { case WheelPaintMethod.Brightness: val = dc.ToAHSB().Alter(null, 1.0, currentRadius / gradRadius).Double(); break; case WheelPaintMethod.InverseLuminance: hsl = dc.ToAHSL(); hsl.Luminance = currentRadius / gradRadius; val = hsl.Double(); break; case WheelPaintMethod.Luminance: hsl = dc.ToAHSL(); hsl.Luminance = 1.0 - currentRadius / gradRadius; val = hsl.Double(); break; case WheelPaintMethod.Saturation: val = dc.ToAHSB().Alter(null, currentRadius / gradRadius).Double(); break; default: throw new NotImplementedException(); } return(val); }
public void UpdateColor( Color color ) { DoubleColor c = color.Double(); if (!String.IsNullOrEmpty(SliderColorComponent)) { DoubleColor begin; DoubleColor end; m_isGradient = true; switch (SliderColorComponent.ToLower()) { case "r": begin = c.Alter(0); end = c.Alter(255); break; case "g": begin = c.Alter(null, 0); end = c.Alter(null, 255); break; case "b": begin = c.Alter(null, null, 0); end = c.Alter(null, null, 255); break; case "alpha": case "a": begin = c.Alter(null, null, null, 0); end = c.Alter(null, null, null, 255); break; case "saturation": case "sat": begin = c.ToAHSB().Alter(null, 0).Double(); end = c.ToAHSB().Alter(null, 1).Double(); break; case "brightness": case "bri": begin = c.ToAHSB().Alter(null, null, 0).Double(); end = c.ToAHSB().Alter(null, null, 1).Double(); break; case "hue": m_calc = (double loc) => ColorWheel.GetColor(loc); m_isGradient = false; begin = c; end = c; break; default: Debug.Assert(false); begin = Colors.Yellow.Double(); end = Colors.Green.Double(); break; } if (m_begin != begin.ToColor() || m_end != end.ToColor()) { m_begin = begin.ToColor(); m_end = end.ToColor(); UpdateImage(); } } }