protected override void OnColorChanged() { double lightness = HslColor.Lightness; base.OnColorChanged(); PointLightness = HslColor.Lightness; PointBrush.Color = PointColor.MediaColor(); if (HslColor.Lightness < 0.2) lightness = 0.2; HslColor hsl = new HslColor(HslColor.Hue, HslColor.Saturation, lightness); PureBrush.Color = hsl.ToRGB().MediaColor(); }
private void MakeGradient() { Media.Color color, color1; Media.LinearGradientBrush lgb = new Media.LinearGradientBrush(); lgb.StartPoint = new System.Windows.Point(0.5, 1.0); lgb.EndPoint = new System.Windows.Point(0.5, 0.0); if (ColorScale == ColorPart.H) { color = new HslColor(ScaleRange.X, 1.0, 0.5).ToRGB().MediaColor(); color1 = new HslColor(ScaleRange.Y, 1.0, 0.5).ToRGB().MediaColor(); lgb.GradientStops.Add(new Media.GradientStop(color, 0.0)); lgb.GradientStops.Add(new Media.GradientStop(color1, 1.0)); if (scale != null) scale.Background = lgb; } if (ColorScale == ColorPart.S) { color = new HslColor(HueValue, 0.0, 0.5).ToRGB().MediaColor(); color1 = new HslColor(HueValue, 1.0, 0.5).ToRGB().MediaColor(); lgb.GradientStops.Add(new Media.GradientStop(color, 0.0)); lgb.GradientStops.Add(new Media.GradientStop(color1, 1.0)); if (scale != null) scale.Background = lgb; } if (ColorScale == ColorPart.L) { lgb.GradientStops.Add(new Media.GradientStop(Media.Colors.Black, 0.0)); lgb.GradientStops.Add(new Media.GradientStop(Media.Colors.LightGray, 1.0)); if (scale != null) scale.Background = lgb; } }
private List<PatternPoint> GetLightnessCurve(PatternPoint from, PatternPoint to) { List<PatternPoint> lightnessCurve = null; int fromIx = Pattern.IndexOf(from); int toIx = Pattern.IndexOf(to); int stepCount = 0; int baseLedPos; HslColor hsl; double deltaHue = 0.0; double deltaSat = 0.0; if ((toIx - fromIx) != 0) // имеются яркостные точки { lightnessCurve = new List<PatternPoint>(); for (int i = fromIx + 1; i < toIx; i++) lightnessCurve.Add(Pattern[i]); if (from.Variant == PointVariant.Range) baseLedPos = (from.LedPos + from.LedCount - 1); else baseLedPos = from.LedPos; stepCount = to.LedPos - baseLedPos; deltaHue = (to.HslColor.Hue - from.HslColor.Hue) / stepCount; deltaSat = (to.HslColor.Saturation - from.HslColor.Saturation) / stepCount; blockOnPointColorChanged = true; foreach (PatternPoint pp in lightnessCurve) { hsl = new HslColor(from.HslColor.Hue + (pp.LedPos - baseLedPos) * deltaHue, from.HslColor.Saturation + (pp.LedPos - baseLedPos) * deltaSat, pp.HslColor.Lightness); pp.HslColor = hsl; } blockOnPointColorChanged = false; } return lightnessCurve; }
private void MakeGradient(PatternPoint from, PatternPoint to) { HslColor hsl; int stepCount = 0; PatternPoint tmpFrom = null; if (to.Variant == PointVariant.Range) for (int i = 0; i < to.LedCount; i++) StripModel[to.LedPos + i - 1].PointColor = to.PointColor; if (from.Variant == PointVariant.Range) { for (int i = 0; i < from.LedCount; i++) StripModel[from.LedPos + i - 1].PointColor = from.PointColor; tmpFrom = new PatternPoint(from.PointColor, from.LedPos + from.LedCount - 1); } else tmpFrom = from; stepCount = to.LedPos - tmpFrom.LedPos; double deltaHue = (to.HslColor.Hue - tmpFrom.HslColor.Hue) / stepCount; double deltaSat = (to.HslColor.Saturation - tmpFrom.HslColor.Saturation) / stepCount; double deltaBri = (to.HslColor.Lightness - tmpFrom.HslColor.Lightness) / stepCount; StripModel[tmpFrom.LedPos - 1].PointColor = tmpFrom.PointColor; //Console.WriteLine("Pos: {0} Hue: {1}, Lightness: {2}", from.LedPos, from.HslColor.Hue, from.HslColor.Lightness); StripModel[to.LedPos - 1].PointColor = to.PointColor; for (int i = 1; i < stepCount; i++) { hsl = new HslColor(from.HslColor.Hue + i * deltaHue, from.HslColor.Saturation + i * deltaSat, from.HslColor.Lightness + i * deltaBri); StripModel[tmpFrom.LedPos + i - 1].PointColor = hsl.ToRGB(); //Console.WriteLine("Pos: {0} Hue: {1}, Lightness: {2}", from.LedPos + i, hsl.Hue, hsl.Lightness); } //Console.WriteLine("Pos: {0} Hue: {1}, Lightness: {2}", to.LedPos, to.HslColor.Hue, to.HslColor.Lightness); }