public Color GetColor(PredefinedColor color, LuminosityLevel luminosity = LuminosityLevel.Unspecified) { if (color == PredefinedColor.Random) { return(GetColor(RandomWithin(0, 359))); } var bounds = color == PredefinedColor.Monochrome ? s_Monochrome : s_ColorPalette[color]; return(GetColor(luminosity, bounds)); }
private ReadOnlySpan<LuminosityLevel> ComputeRelativeLuminosityLevels ( ReadOnlySpan<double> neighbourDifferences ) { var darks = new List<double>(); var lights = new List<double>(); foreach (var difference in neighbourDifferences) { if (difference >= -this.NoiseCutoff && difference <= this.NoiseCutoff) { // This difference is considered a samey value. continue; } if (difference < this.NoiseCutoff) { darks.Add(difference); continue; } if (difference > this.NoiseCutoff) { lights.Add(difference); } } var muchDarkerCutoff = darks.Count > 0 ? darks.Median() : -this.NoiseCutoff; var muchLighterCutoff = lights.Count > 0 ? lights.Median() : this.NoiseCutoff; Span<LuminosityLevel> luminosityLevels = new LuminosityLevel[neighbourDifferences.Length]; for (var i = 0; i < neighbourDifferences.Length; i++) { var difference = neighbourDifferences[i]; if (difference >= -this.NoiseCutoff && difference <= this.NoiseCutoff) { luminosityLevels[i] = LuminosityLevel.Same; continue; } if (difference < 0.0) { luminosityLevels[i] = difference < muchDarkerCutoff ? LuminosityLevel.MuchDarker : LuminosityLevel.Darker; continue; } luminosityLevels[i] = difference > muchLighterCutoff ? LuminosityLevel.MuchLighter : LuminosityLevel.Lighter; } return luminosityLevels; }
private Color GetColor(LuminosityLevel luminosity, ColorBounds bounds) { // Pick Hue var hue = PickHue(bounds.HueRange); // Pick Saturation var saturation = PickSaturation(bounds.SaturationRange, luminosity); // Pick Brightness based on Saturation var brightness = PickBrightness(bounds.BrightnessCurve, saturation, bounds.SaturationRange, luminosity); // Convert to Color object return(HSBtoColor(hue, saturation, brightness)); }
public Color GetColor(int hue, LuminosityLevel luminosity = LuminosityLevel.Unspecified) { var h = hue % 360; foreach (var v in s_ColorPalette.Values) { if (v.HueRange.Min <= h && h <= v.HueRange.Max) { return(GetColor(luminosity, v)); } } return(GetColor(luminosity, s_ColorPalette[PredefinedColor.Red])); }
int PickSaturation(Range range, LuminosityLevel luminosity) { if (range == null) { return(0); } switch (luminosity) { case LuminosityLevel.Random: return(RandomWithin(0, 100)); case LuminosityLevel.Bright: return(RandomWithin(55, range.Max)); case LuminosityLevel.Dark: return(RandomWithin(range.Max - 10, range.Max)); case LuminosityLevel.Light: return(RandomWithin(range.Min, 55)); } return(RandomWithin(range)); }
int PickBrightness(AnimationCurve brightnessCurve, int saturation, Range saturationRange, LuminosityLevel luminosity) { if (luminosity == LuminosityLevel.Random) { return(RandomWithin(0, 100)); } var t = saturationRange == null ? 0 : Mathf.InverseLerp(saturationRange.Min, saturationRange.Max, saturation); var brightness = (int)brightnessCurve.Evaluate(t); switch (luminosity) { case LuminosityLevel.Dark: return(RandomWithin(brightness, brightness + 20)); case LuminosityLevel.Light: return(RandomWithin((brightness + 100) / 2, 100)); } return(RandomWithin(brightness, 100)); }