protected Palette( ColorWheelBase wheel ) { Debug.Assert(wheel != null); m_colors = new ObservableCollection <PaletteColor>(); m_wheel = wheel; }
public static DoubleColor AlterHue( this DoubleColor c, ColorWheelBase wheel, double hue ) { AHSB src = c.ToAHSB(); AHSB dest = wheel.GetColor(hue).ToAHSB(); dest.Saturation = src.Saturation; dest.Brightness = src.Brightness; dest.Alpha = src.Alpha; return(dest.Double()); }
/// /// <summary> /// Generate palette by base color, schema and number of colors. /// Number of colors should be more than 1</summary> /// public static Palette Create( ColorWheelBase wheel, Color baseColor, PaletteSchemaType schema = PaletteSchemaType.Complementary, int colorCount = 5, double fromSat = 1.0, double toSat = 0.2, double fromBri = 0.2, double toBri = 0.9 ) { double angle = 30; double baseAngle = 0; double alpha = baseColor.A / 255.0; double incs = 0; double incb = 0; AHSB c; int index = 0; wheel = wheel ?? new RGBColorWheel(); baseAngle = wheel.GetAngle(baseColor.Double()); if (schema == PaletteSchemaType.Complementary) { angle = 180.0; } else if (schema == PaletteSchemaType.Quadrants) { angle = 90.0; } else if (schema == PaletteSchemaType.Triad) { angle = 120.0; } Palette p = new Palette(wheel) { Schema = schema, Angle = angle }; if (colorCount > 1) { incs = (toSat - fromSat) / (colorCount - 1); incb = (toBri - fromBri) / (colorCount - 1); } for (int i = 0; i < colorCount; ++i) { switch (p.Schema) { case PaletteSchemaType.Monochromatic: break; case PaletteSchemaType.Quadrants: case PaletteSchemaType.Tetrads: index = i % 4; break; case PaletteSchemaType.Custom: case PaletteSchemaType.SplitComplementary: case PaletteSchemaType.SplitAnalogous: case PaletteSchemaType.Triad: index = i % 3; break; case PaletteSchemaType.Complementary: case PaletteSchemaType.Analogous: index = i % 2; break; default: throw new ArgumentException(); } c = new AHSB(alpha, baseAngle, fromSat, fromBri); fromSat = AHSB.Fix(fromSat + incs); fromBri = AHSB.Fix(fromBri + incb); p.Colors.Add(new PaletteColor() { Name = i.ToString(), VectorIndex = index, Color = c }); } p.BaseAngle = baseAngle; return(p); }