// New Color Label clicked, calculate optimal params and update
        private void ColorEditor_RequestSetNewColor(object sender, EventArgs e)
        {
            ColorDialog cdial = new ColorDialog();
            DialogResult dr = cdial.ShowDialog();

            if (dr == System.Windows.Forms.DialogResult.Cancel) return;
           
            ImageProcessor p = resourceManager.Processors[cmbColorProcessors.Text];
            ColorRGB exc = new ColorRGB(cdial.Color);

            tmpProcessor.HA = GetRelation(tmpProcessor.HueMode, tmpProcessor.BaseColor.H, exc.H);
            tmpProcessor.SA = GetRelation(tmpProcessor.SaturationMode, tmpProcessor.BaseColor.S, exc.S);
            tmpProcessor.LA = GetRelation(tmpProcessor.LightnessMode, tmpProcessor.BaseColor.L, exc.L);

            SyncTmpToUI();
            ApplyColorScheme();
        }
Exemple #2
0
        // Given H,S,L,A in range of 0-1
        // Returns a Color (RGB struct) in range of 0-255
        public static ColorRGB FromHSLA(double H, double S, double L, double A)
        {
            double v;
            double r, g, b;
            if (A > 1.0)
                A = 1.0;

            r = L;   // default to gray
            g = L;
            b = L;
            v = (L <= 0.5) ? (L * (1.0 + S)) : (L + S - L * S);
            if (v > 0)
            {
                double m;
                double sv;
                int sextant;
                double fract, vsf, mid1, mid2;

                m = L + L - v;
                sv = (v - m) / v;
                H *= 6.0;
                sextant = (int)H;
                fract = H - sextant;
                vsf = v * sv * fract;
                mid1 = m + vsf;
                mid2 = v - vsf;
                switch (sextant)
                {
                    case 0:
                        r = v;
                        g = mid1;
                        b = m;
                        break;
                    case 1:
                        r = mid2;
                        g = v;
                        b = m;
                        break;
                    case 2:
                        r = m;
                        g = v;
                        b = mid1;
                        break;
                    case 3:
                        r = m;
                        g = mid2;
                        b = v;
                        break;
                    case 4:
                        r = mid1;
                        g = m;
                        b = v;
                        break;
                    case 5:
                        r = v;
                        g = m;
                        b = mid2;
                        break;
                }
            }
            ColorRGB rgb = new ColorRGB();
            rgb.R = Convert.ToByte(r * 255.0f);
            rgb.G = Convert.ToByte(g * 255.0f);
            rgb.B = Convert.ToByte(b * 255.0f);
            rgb.A = Convert.ToByte(A * 255.0f);
            return rgb;
        }