Exemple #1
0
        /// <summary>
        /// this method performs all tasks done with a left mouse click in XYZ space
        /// </summary>
        /// <param name="x">the current x coordinate</param>
        /// <param name="y">the current y coordinate</param>
        /// <param name="showCircle">if true the selected Color circle will be shown</param>
        /// <author>Markus Strobel</author>
        private void LeftClickXYZSpace(float x, float y, bool showCircle)
        {
            // set trackbar values
            if (!(hoveredRGBColor.R < 0 || hoveredRGBColor.G < 0 || hoveredRGBColor.B < 0))
            {
                HSL hsl = hoveredRGBColor.asHSL();

                // normalize
                float maxV = Math.Max(hoveredRGBColor.R, Math.Max(hoveredRGBColor.G, hoveredRGBColor.B));
                hoveredRGBColor.R /= maxV;
                hoveredRGBColor.G /= maxV;
                hoveredRGBColor.B /= maxV;

                // set RGB tab values for trackbars
                labelTabRGB_R.Text = "R: " + hoveredRGBColor.R;
                labelTabRGB_G.Text = "G: " + hoveredRGBColor.G;
                labelTabRGB_B.Text = "B: " + hoveredRGBColor.B;
                trackBarR.Value = (int)(hoveredRGBColor.R * 255);
                trackBarG.Value = (int)(hoveredRGBColor.G * 255);
                trackBarB.Value = (int)(hoveredRGBColor.B * 255);

                //set HSL values for trackbars
                labelTabHSL_H.Text = "H: " + (hsl.H) + "°";
                labelTabHSL_S.Text = "S: " + (hsl.S * 100) + "%";
                labelTabHSL_L.Text = "L: " + (hsl.L * 100) + "%";
                trackBarH.Value = (int)hsl.H;
                trackBarS.Value = (int)(hsl.S * 100);
                trackBarL.Value = (int)(hsl.L * 100);

                selectedRGBColor = hoveredRGBColor;
                selectedXYZColor = hoveredXYZColor;
                selectedYxyColor = new Yxy(x, y);

                if (checkBoxRGB.Checked)
                {
                    showColorCircle = false;
                    createRGBPreviewLines(selectedRGBColor);
                }
                else if (checkBoxHSL.Checked)
                {
                    showColorCircle = false;
                    createHSLPreviewLines(selectedRGBColor.asHSL());
                    createHSLPreviewCircle(selectedRGBColor.asHSL());
                }
                else
                {
                    showColorCircle = showCircle;
                    createSelectedColorCircleVBO(x, y, 0.01f, 36); // computes color circle position
                }
            }
            else // (!(hoveredRGBColor.R < 0 || hoveredRGBColor.G < 0 || hoveredRGBColor.B < 0))
            {
                trackBarR.Value = 0;
                trackBarG.Value = 0;
                trackBarB.Value = 0;
                labelTabRGB_R.Text = "R: 0";
                labelTabRGB_G.Text = "G: 0";
                labelTabRGB_B.Text = "B: 0";
                trackBarH.Value = 1;
                trackBarS.Value = 100;
                trackBarL.Value = 50;
                labelTabHSL_H.Text = "H: 1°";
                labelTabHSL_S.Text = "S: 100%";
                labelTabHSL_L.Text = "L: 50%";

                selectedRGBColor = null;
                selectedXYZColor = null;
                showColorCircle = false;
            }

            // take current preview Color as selected Color
            // we dont need to compute it twice
            // set selectedColor Panel, label
            panelColorSelected.BackColor = panelColorPreview.BackColor;
            labelColorSelectedHex.Text = labelColorPreviewHex.Text;
            labelColSelectedXH.Text = labelColPreviewXH.Text;
            labelColSelectedYS.Text = labelColPreviewYS.Text;
        }
Exemple #2
0
        /// <summary>
        /// Slidebar Event for RGB - allows to change the current selected point 
        /// </summary>
        /// <author> Markus Strobel, Justine Smyzek</author>
        private void trackBarRGB_Scroll(object sender, EventArgs e)
        {
            if (radioButtonXYZView.Checked)
            {
                //calculate values
                RGB rgb_slide = new RGB(trackBarR.Value / 255f, trackBarG.Value / 255f, trackBarB.Value / 255f);

                // here is a small computation error, TODO - fix to get and show the correct color from trackbarRGB

                HSL hsl_slide = rgb_slide.asHSL();

                //change labels of color
                labelTabRGB_R.Text = "R: " + rgb_slide.R;
                labelTabRGB_G.Text = "G: " + rgb_slide.G;
                labelTabRGB_B.Text = "B: " + rgb_slide.B;

                //change also HSL scroll
                trackBarH.Value = (int)hsl_slide.H;
                trackBarS.Value = (int)(hsl_slide.S * 100);
                trackBarL.Value = (int)(hsl_slide.L * 100);
                labelTabHSL_H.Text = "H: " + (trackBarH.Value) + "°";
                labelTabHSL_S.Text = "S: " + trackBarS.Value + "%";
                labelTabHSL_L.Text = "L: " + trackBarL.Value + "%";

                //set new selected Color
                panelColorSelected.BackColor = Color.FromArgb((int)(rgb_slide.R * 255), (int)(rgb_slide.G * 255), (int)(rgb_slide.B * 255));
                labelColorSelectedHex.Text = "#" + ((int)(rgb_slide.R * 255)).ToString("X") + ((int)(rgb_slide.G * 255)).ToString("X") + ((int)(rgb_slide.B * 255)).ToString("X");

                //calculate yxy room
                Yxy yxy = rgb_slide.asXYZ().asYxy();

                //control if Line prieview is wished - draw
                if (checkBoxRGB.Checked)
                {
                    createRGBPreviewLines(rgb_slide);
                    selectedRGBColor = rgb_slide;
                    showColorCircle = false;
                    checkBoxHSL.Enabled = false;
                }
                else
                {
                    showColorCircle = true;
                    checkBoxHSL.Enabled = true;
                }

                createSelectedColorCircleVBO(yxy.x, yxy.y, 0.01f, 36); // computes color circle position
            }
            glControl1.Invalidate();
        }
Exemple #3
0
        /// <summary>
        /// </summary>
        /// <author> Birthe Anne Wiegand</author>
        private void KonvertierenButton_Click(object sender, EventArgs e)
        {
            RadioButton checkedButton = this.tabFarbRechner.Controls.OfType<RadioButton>().FirstOrDefault(radioButton => radioButton.Checked);

            switch (checkedButton.Name)
            {
                case "customRGB":
                    // parse input to internal customRGBvalue
                    customRGBvalue.R = float.Parse(customRGB_R.Text, CultureInfo.InvariantCulture);
                    customRGBvalue.G = float.Parse(customRGB_G.Text, CultureInfo.InvariantCulture);
                    customRGBvalue.B = float.Parse(customRGB_B.Text, CultureInfo.InvariantCulture);

                    // update other internal values
                    XYZvalue = customRGBvalue.asXYZ();
                    RGBvalue = XYZvalue.asRGB();
                    sRGBvalue = RGBvalue.as_sRGB();
                    HSLvalue = RGBvalue.asHSL();
                    HSVvalue = RGBvalue.asHSV();
                    LUVvalue = XYZvalue.asLUV();
                    LABvalue = XYZvalue.asLAB();
                    break;
                case "sRGB":
                    // parse input to internal customRGBvalue
                    sRGBvalue.R = float.Parse(sRGB_R.Text, CultureInfo.InvariantCulture);
                    sRGBvalue.G = float.Parse(sRGB_G.Text, CultureInfo.InvariantCulture);
                    sRGBvalue.B = float.Parse(sRGB_B.Text, CultureInfo.InvariantCulture);

                    // update other internal values
                    RGBvalue = sRGBvalue.asRGB();
                    XYZvalue = RGBvalue.asXYZ();
                    customRGBvalue = XYZvalue.as_customRGB();
                    HSLvalue = RGBvalue.asHSL();
                    HSVvalue = RGBvalue.asHSV();
                    LUVvalue = XYZvalue.asLUV();
                    LABvalue = XYZvalue.asLAB();
                    break;
                case "HSL":
                    // parse input to internal HSLvalue
                    HSLvalue.H = float.Parse(HSL_H.Text, CultureInfo.InvariantCulture);
                    HSLvalue.S = float.Parse(HSL_S.Text, CultureInfo.InvariantCulture);
                    HSLvalue.L = float.Parse(HSL_L.Text, CultureInfo.InvariantCulture);

                    // update other internal values
                    RGBvalue = HSLvalue.asRGB();
                    XYZvalue = RGBvalue.asXYZ();
                    customRGBvalue = XYZvalue.as_customRGB();
                    sRGBvalue = RGBvalue.as_sRGB();
                    HSVvalue = RGBvalue.asHSV();
                    LUVvalue = XYZvalue.asLUV();
                    LABvalue = XYZvalue.asLAB();
                    break;
                case "HSV":
                    // parse input to internal HSVvalue
                    HSVvalue.H = float.Parse(HSV_H.Text, CultureInfo.InvariantCulture);
                    HSVvalue.S = float.Parse(HSV_S.Text, CultureInfo.InvariantCulture);
                    HSVvalue.V = float.Parse(HSV_V.Text, CultureInfo.InvariantCulture);

                    // update other internal values
                    RGBvalue = HSVvalue.asRGB();
                    XYZvalue = RGBvalue.asXYZ();
                    customRGBvalue = XYZvalue.as_customRGB();
                    sRGBvalue = RGBvalue.as_sRGB();
                    HSLvalue = RGBvalue.asHSL();
                    LUVvalue = XYZvalue.asLUV();
                    LABvalue = XYZvalue.asLAB();
                    break;
                case "XYZ":
                    // parse input to internal HSVvalue
                    XYZvalue.X = float.Parse(XYZ_X.Text, CultureInfo.InvariantCulture);
                    XYZvalue.Y = float.Parse(XYZ_Y.Text, CultureInfo.InvariantCulture);
                    XYZvalue.Z = float.Parse(XYZ_Z.Text, CultureInfo.InvariantCulture);

                    // update other internal values
                    RGBvalue = XYZvalue.asRGB();
                    customRGBvalue = XYZvalue.as_customRGB();
                    sRGBvalue = RGBvalue.as_sRGB();
                    HSLvalue = RGBvalue.asHSL();
                    HSVvalue = RGBvalue.asHSV();
                    LUVvalue = XYZvalue.asLUV(ColorHelper.WP_used);
                    LABvalue = XYZvalue.asLAB(ColorHelper.WP_used);
                    break;
                case "LUV":
                    // parse input to internal LUVvalue
                    LUVvalue.L = float.Parse(LUV_L.Text, CultureInfo.InvariantCulture);
                    LUVvalue.U = float.Parse(LUV_U.Text, CultureInfo.InvariantCulture);
                    LUVvalue.V = float.Parse(LUV_V.Text, CultureInfo.InvariantCulture);

                    // update other internal values
                    XYZvalue = LUVvalue.asXYZ(ColorHelper.WP_used);
                    RGBvalue = XYZvalue.asRGB();
                    customRGBvalue = XYZvalue.as_customRGB();
                    sRGBvalue = RGBvalue.as_sRGB();
                    HSLvalue = RGBvalue.asHSL();
                    HSVvalue = RGBvalue.asHSV();
                    LABvalue = XYZvalue.asLAB(ColorHelper.WP_used);
                    break;
                case "LAB":
                    // parse input to internal LABvalue
                    LABvalue.L = float.Parse(LAB_L.Text, CultureInfo.InvariantCulture);
                    LABvalue.A = float.Parse(LAB_A.Text, CultureInfo.InvariantCulture);
                    LABvalue.B = float.Parse(LAB_B.Text, CultureInfo.InvariantCulture);

                    // update other internal values
                    XYZvalue = LABvalue.asXYZ(ColorHelper.WP_used);
                    RGBvalue = XYZvalue.asRGB();
                    customRGBvalue = XYZvalue.as_customRGB();
                    sRGBvalue = RGBvalue.as_sRGB();
                    HSLvalue = RGBvalue.asHSL();
                    HSVvalue = RGBvalue.asHSV();
                    LUVvalue = XYZvalue.asLUV(ColorHelper.WP_used);
                    break;
            }

            UpdateBoxes();
        }