예제 #1
0
        public ColorBox2D()
        {
            InitializeComponent();
            base.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);

            this.colorHSL  = HslColor.FromAhsl(1.0, 1.0, 1.0);
            this.colorRGB  = this.colorHSL.RgbValue;
            this.colorMode = ColorModes.Hue;
        }
예제 #2
0
        private HslColor GetColor(int x, int y)
        {
            int      num;
            int      num2;
            int      num3;
            HslColor color = HslColor.FromAhsl(0xff);

            switch (this.ColorMode)
            {
            case ColorModes.Red:
                num2 = MathExtensions.Round(255.0 * (1.0 - (((double)y) / ((double)(base.Height - 4)))));
                num3 = MathExtensions.Round((255.0 * x) / ((double)(base.Width - 4)));
                return(HslColor.FromColor(Color.FromArgb(this.colorRGB.R, num2, num3)));

            case ColorModes.Green:
                num  = MathExtensions.Round(255.0 * (1.0 - (((double)y) / ((double)(base.Height - 4)))));
                num3 = MathExtensions.Round((255.0 * x) / ((double)(base.Width - 4)));
                return(HslColor.FromColor(Color.FromArgb(num, this.colorRGB.G, num3)));

            case ColorModes.Blue:
                num  = MathExtensions.Round((255.0 * x) / ((double)(base.Width - 4)));
                num2 = MathExtensions.Round(255.0 * (1.0 - (((double)y) / ((double)(base.Height - 4)))));
                return(HslColor.FromColor(Color.FromArgb(num, num2, this.colorRGB.B)));

            case ColorModes.Hue:
                color.H = this.colorHSL.H;
                color.S = ((double)x) / ((double)(base.Width - 4));
                color.L = 1.0 - (((double)y) / ((double)(base.Height - 4)));
                return(color);

            case ColorModes.Saturation:
                color.S = this.colorHSL.S;
                color.H = ((double)x) / ((double)(base.Width - 4));
                color.L = 1.0 - (((double)y) / ((double)(base.Height - 4)));
                return(color);

            case ColorModes.Luminance:
                color.L = this.colorHSL.L;
                color.H = ((double)x) / ((double)(base.Width - 4));
                color.S = 1.0 - (((double)y) / ((double)(base.Height - 4)));
                return(color);
            }
            return(color);
        }
예제 #3
0
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            HslColor color  = HslColor.FromAhsl(0xff);
            HslColor color2 = HslColor.FromAhsl(0xff);

            switch (this.ColorMode)
            {
            case ColorModes.Hue:
                color.H  = this.ColorHSL.H;
                color2.H = this.ColorHSL.H;
                color.S  = 0.0;
                color2.S = 1.0;
                break;

            case ColorModes.Saturation:
                color.S  = this.ColorHSL.S;
                color2.S = this.ColorHSL.S;
                color.L  = 1.0;
                color2.L = 0.0;
                break;

            case ColorModes.Luminance:
                color.L  = this.ColorHSL.L;
                color2.L = this.ColorHSL.L;
                color.S  = 1.0;
                color2.S = 0.0;
                break;
            }
            for (int i = 0; i < (base.Height - 4); i++)
            {
                int   green    = MathExtensions.Round(255.0 - ((255.0 * i) / ((double)(base.Height - 4))));
                Color empty    = Color.Empty;
                Color rgbValue = Color.Empty;
                switch (this.ColorMode)
                {
                case ColorModes.Red:
                    empty    = Color.FromArgb(this.ColorRGB.R, green, 0);
                    rgbValue = Color.FromArgb(this.ColorRGB.R, green, 0xff);
                    break;

                case ColorModes.Green:
                    empty    = Color.FromArgb(green, this.ColorRGB.G, 0);
                    rgbValue = Color.FromArgb(green, this.ColorRGB.G, 0xff);
                    break;

                case ColorModes.Blue:
                    empty    = Color.FromArgb(0, green, this.ColorRGB.B);
                    rgbValue = Color.FromArgb(0xff, green, this.ColorRGB.B);
                    break;

                case ColorModes.Hue:
                    color2.L = color.L = 1.0 - (((double)i) / ((double)(base.Height - 4)));
                    empty    = color.RgbValue;
                    rgbValue = color2.RgbValue;
                    break;

                case ColorModes.Saturation:
                case ColorModes.Luminance:
                    color2.H = color.H = ((double)i) / ((double)(base.Width - 4));
                    empty    = color.RgbValue;
                    rgbValue = color2.RgbValue;
                    break;
                }

                Rectangle rect       = new Rectangle(2, 2, base.Width - 4, 1);
                Rectangle rectangle2 = new Rectangle(2, i + 2, base.Width - 4, 1);
                if ((this.ColorMode == ColorModes.Saturation) || (this.ColorMode == ColorModes.Luminance))
                {
                    rect       = new Rectangle(2, 2, 1, base.Height - 4);
                    rectangle2 = new Rectangle(i + 2, 2, 1, base.Height - 4);
                    using (LinearGradientBrush brush = new LinearGradientBrush(rect, empty, rgbValue, 90f, false))
                    {
                        e.Graphics.FillRectangle(brush, rectangle2);
                        continue;
                    }
                }
                using (LinearGradientBrush brush2 = new LinearGradientBrush(rect, empty, rgbValue, 0f, false))
                {
                    e.Graphics.FillRectangle(brush2, rectangle2);
                }
            }
            Pen white = Pens.White;

            if (this.colorHSL.L >= 0.78431372549019607)
            {
                if ((this.colorHSL.H < 0.072222222222222215) || (this.colorHSL.H > 0.55555555555555558))
                {
                    if (this.colorHSL.S <= 0.27450980392156865)
                    {
                        white = Pens.Black;
                    }
                }
                else
                {
                    white = Pens.Black;
                }
            }
            e.Graphics.DrawEllipse(white, this.markerPoint.X - 5, this.markerPoint.Y - 5, 10, 10);
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            HslColor color = HslColor.FromAhsl(0xff);

            switch (this.ColorMode)
            {
            case ColorModes.Hue:
                color.L = color.S = 1.0;
                break;

            case ColorModes.Saturation:
                color.H = this.ColorHSL.H;
                color.L = this.ColorHSL.L;
                break;

            case ColorModes.Luminance:
                color.H = this.ColorHSL.H;
                color.S = this.ColorHSL.S;
                break;
            }
            for (int i = 0; i < (base.Height - 8); i++)
            {
                double num2 = 0.0;
                if (this.ColorMode < ColorModes.Hue)
                {
                    num2 = 255.0 - MathExtensions.Round((255.0 * i) / (base.Height - 8.0));
                }
                else
                {
                    num2 = 1.0 - (((double)i) / ((double)(base.Height - 8)));
                }
                Color empty = Color.Empty;
                switch (this.ColorMode)
                {
                case ColorModes.Red:
                    empty = Color.FromArgb((int)num2, this.ColorRGB.G, this.ColorRGB.B);
                    break;

                case ColorModes.Green:
                    empty = Color.FromArgb(this.ColorRGB.R, (int)num2, this.ColorRGB.B);
                    break;

                case ColorModes.Blue:
                    empty = Color.FromArgb(this.ColorRGB.R, this.ColorRGB.G, (int)num2);
                    break;

                case ColorModes.Hue:
                    color.H = num2;
                    empty   = color.RgbValue;
                    break;

                case ColorModes.Saturation:
                    color.S = num2;
                    empty   = color.RgbValue;
                    break;

                case ColorModes.Luminance:
                    color.L = num2;
                    empty   = color.RgbValue;
                    break;
                }

                using (Pen pen = new Pen(empty))
                {
                    e.Graphics.DrawLine(pen, 11, i + 4, base.Width - 11, i + 4);
                }
            }
            this.DrawSlider(e.Graphics);
        }