public IndexedGeneratedPalette( SpriteRamp ramp, PaletteParameters parameters) { BasePalette = ramp.GetColorPalette(parameters); ColorValues = ramp.ColorValues.ToArray(); PaletteAdjustments = ramp.Adjustments.ToArray(); #if DEBUG System.Diagnostics.Debug.Assert(ramp.Count == ColorValues.Length, "Palette and ramp size must match"); System.Diagnostics.Debug.Assert(ramp.Count == PaletteAdjustments.Length, "Palette and ramp size must match"); #endif // Saturation of the adjustment is reduced if the generated palette // is itself low saturation var rawParameters = (PaletteParameters)parameters.Clone(); rawParameters.YellowLight = 0; rawParameters.BlueShadow = 0; var rawPalette = ramp.GetColorPalette(rawParameters); AdjustmentsSaturationMultiplier = SaturationMultiplier( rawPalette.BaseColor, new XnaHSL(ramp.BaseColor)); //@Debug: per color saturation adjustments /*AdjustmentsSaturationMultipliers = PaletteAdjustments * .Select(x => 1f) * .ToArray(); * for (int i = 0; i < AdjustmentsSaturationMultipliers.Length; i++) * { * AdjustmentsSaturationMultipliers[i] = SaturationMultiplier( * rawPalette, ramp, i); * }*/ }
private List <Tuple <float, float> > Errors( PaletteParameters parameters, List <PaletteEntry> ramp, Range <float> range, int count, Func <PaletteGenerator, float, float> function) { PaletteGenerator copyGenerator = (PaletteGenerator)Clone(); PaletteParameters copyParameters = (PaletteParameters)parameters.Clone(); float interval = (range.Maximum - range.Minimum) / count; var errors = new List <Tuple <float, float> >(); for (int i = 0; i <= count; i++) { float value = range.Minimum + interval * i; function(copyGenerator, value); // Kind of necessary for user facing values // Minimize error on blue shadow copyParameters.MinimizeBlueError(copyGenerator, ramp); // Minimize error on yellow light copyParameters.MinimizeYellowError(copyGenerator, ramp); var palette = copyGenerator.GetPalette(copyParameters); float error = palette.GetError(ramp); errors.Add(Tuple.Create(value, error)); } return(errors); }
public GeneratedColorPalette GetColorPalette(PaletteParameters parameters) { parameters = (PaletteParameters)parameters.Clone(); // Adjust the lightness of the base color XnaHSL baseHsl = new XnaHSL(this.BaseColor); XnaHSL parametersHsl = new XnaHSL(parameters.BaseColor); parametersHsl = parametersHsl.SetLightness( MathHelper.Lerp( parametersHsl.Lightness, baseHsl.Lightness, parameters.OriginalLightness)); parameters.BaseColor = parametersHsl.GetColor(); return(Ramp.Generator.GetPalette(parameters)); }