protected Palette(
            ColorWheelBase wheel
            )
        {
            Debug.Assert(wheel != null);

            m_colors = new ObservableCollection <PaletteColor>();
            m_wheel  = wheel;
        }
Beispiel #2
0
        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);
        }