예제 #1
0
파일: Dye.cs 프로젝트: RedGlow/ColorWars
 /// <summary>
 /// Create a new dye.
 /// </summary>
 /// <param name="name"></param>
 /// <param name="baseColor"></param>
 /// <param name="clothColor"></param>
 /// <param name="leatherColor"></param>
 /// <param name="metalColor"></param>
 public Dye(DyeSet parent, string name, int code, ColorRGB baseColor, ColorRGB clothColor, ColorRGB leatherColor, ColorRGB metalColor)
 {
     this.parent = parent;
     Name = name;
     Code = code;
     BaseColor = baseColor;
     ClothColor = clothColor;
     LeatherColor = leatherColor;
     MetalColor = metalColor;
     var cc = new ColorConverter();
     var lab = cc.ToLab(MetalColor);
 }
예제 #2
0
        private void Convert_Button_Click(object sender, EventArgs e)
        {
            switch (((Button)sender).Name)
            {
                case "RGB_Button":
                    try
                    {
                        if (RGBSpace != RGBSpaceName.ICC) ColRGB = new ColorRGB(RGBSpace, RGB[0], RGB[1], RGB[2]);
                        else ColRGB = new ColorRGB(RGB_ICC, RGB[0], RGB[1], RGB[2]);
                        Conversion(ColRGB);
                    }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "XYZ_Button":
                    try { ColXYZ = new ColorXYZ(XYZwp, XYZ[0], XYZ[1], XYZ[2]); Conversion(ColXYZ); }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "Lab_Button":
                    try { ColLab = new ColorLab(Labwp, Lab[0], Lab[1], Lab[2]); Conversion(ColLab); }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "Luv_Button":
                    try { ColLuv = new ColorLuv(Luvwp, Luv[0], Luv[1], Luv[2]); Conversion(ColLuv); }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "Yxy_Button":
                    try { ColYxy = new ColorYxy(Yxywp, Yxy[0], Yxy[1], Yxy[2]); Conversion(ColYxy); }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "LCHab_Button":
                    try { ColLCHab = new ColorLCHab(LCHabwp, LCHab[0], LCHab[1], LCHab[2]); Conversion(ColLCHab); }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "LCHuv_Button":
                    try { ColLCHuv = new ColorLCHuv(LCHuvwp, LCHuv[0], LCHuv[1], LCHuv[2]); Conversion(ColLCHuv); }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "LCH99_Button":
                    try { ColLCH99 = new ColorLCH99(LCH99[0], LCH99[1], LCH99[2]); Conversion(ColLCH99); }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "LCH99b_Button":
                    try { ColLCH99b = new ColorLCH99b(LCH99b[0], LCH99b[1], LCH99b[2]); Conversion(ColLCH99b); }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "LCH99c_Button":
                    try { ColLCH99c = new ColorLCH99c(LCH99c[0], LCH99c[1], LCH99c[2]); Conversion(ColLCH99c); }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "LCH99d_Button":
                    try { ColLCH99d = new ColorLCH99d(LCH99d[0], LCH99d[1], LCH99d[2]); Conversion(ColLCH99d); }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "HSV_Button":
                    try
                    {
                        if (HSVSpace != RGBSpaceName.ICC) ColHSV = new ColorHSV(HSVSpace, HSV[0], HSV[1], HSV[2]);
                        else ColHSV = new ColorHSV(HSV_ICC, HSV[0], HSV[1], HSV[2]);
                        Conversion(ColHSV);
                    }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "HSL_Button":
                    try
                    {
                        if (HSLSpace != RGBSpaceName.ICC) ColHSL = new ColorHSL(HSLSpace, HSL[0], HSL[1], HSL[2]);
                        else ColHSL = new ColorHSL(HSL_ICC, HSL[0], HSL[1], HSL[2]);
                        Conversion(ColHSL);
                    }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "CMY_Button":
                    try { ColCMY = new ColorCMY(CMY_ICC, CMY[0], CMY[1], CMY[2]); Conversion(ColCMY); }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "CMYK_Button":
                    try { ColCMYK = new ColorCMYK(CMYK_ICC, CMYK[0], CMYK[1], CMYK[2], CMYK[3]); Conversion(ColCMYK); }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "Gray_Button":
                    try
                    {
                        if (Gray_ICC != null) ColGray = new ColorGray(Gray_ICC, Gray[0]);
                        else ColGray = new ColorGray(Gray[0]);
                        Conversion(ColGray);
                    }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "YCbCr_Button":
                    try
                    {
                        if (YCbCrSpace == YCbCrSpaceName.ICC) ColYCbCr = new ColorYCbCr(YCbCr_ICC, YCbCr[0], YCbCr[1], YCbCr[2]);
                        else ColYCbCr = new ColorYCbCr(YCbCrSpace, YCbCr[0], YCbCr[1], YCbCr[2]);
                        Conversion(ColYCbCr);
                    }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "XColor_Button":
                    try { ColX = new ColorX(XColor_ICC, XColor.Take(XColor_Channels).ToArray()); Conversion(ColX); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "DEF_Button":
                    try { ColDEF = new ColorDEF(DEFwp, DEF[0], DEF[1], DEF[2]); Conversion(ColDEF); }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "Bef_Button":
                    try { ColBef = new ColorBef(Befwp, Bef[0], Bef[1], Bef[2]); Conversion(ColBef); }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;

                case "BCH_Button":
                    try { ColBCH = new ColorBCH(BCHwp, BCH[0], BCH[1], BCH[2]); Conversion(ColBCH); }
                    catch (FormatException) { MessageBox.Show("Not a number!"); }
                    catch (Exception ex) { MessageBox.Show("Error:" + Environment.NewLine + ex.Message); }
                    break;
            }
        }
예제 #3
0
        private void Conversion(Color inColor)
        {
            Color inColor2 = inColor;
            if (inColor.IsICCcolor && !inColor.IsPCScolor) { inColor2 = Converter.ToICC(inColor); }

            if (inColor.Model != ColorModel.CIEXYZ) ColXYZ = Converter.ToXYZ(inColor2, XYZwp);
            if (inColor.Model != ColorModel.CIELab) ColLab = Converter.ToLab(inColor2, Labwp);
            if (inColor.Model != ColorModel.CIELuv) ColLuv = Converter.ToLuv(inColor2, Luvwp);
            if (inColor.Model != ColorModel.CIELCHab) ColLCHab = Converter.ToLCHab(inColor2, LCHabwp);
            if (inColor.Model != ColorModel.CIELCHuv) ColLCHuv = Converter.ToLCHuv(inColor2, LCHuvwp);
            if (inColor.Model != ColorModel.CIEYxy) ColYxy = Converter.ToYxy(inColor2, Yxywp);
            if (inColor.Model != ColorModel.LCH99) ColLCH99 = Converter.ToLCH99(inColor2);
            if (inColor.Model != ColorModel.LCH99b) ColLCH99b = Converter.ToLCH99b(inColor2);
            if (inColor.Model != ColorModel.LCH99c) ColLCH99c = Converter.ToLCH99c(inColor2);
            if (inColor.Model != ColorModel.LCH99d) ColLCH99d = Converter.ToLCH99d(inColor2);
            if (inColor.Model != ColorModel.DEF) ColDEF = Converter.ToDEF(inColor2);
            if (inColor.Model != ColorModel.Bef) ColBef = Converter.ToBef(inColor2);
            if (inColor.Model != ColorModel.BCH) ColBCH = Converter.ToBCH(inColor2);

            if (inColor.Model != ColorModel.RGB)
            {
                if (RGBSpace != RGBSpaceName.ICC) ColRGB = Converter.ToRGB(inColor2, RGBSpace);
                else ColRGB = (ColorRGB)Converter.ToICC(Converter.ToICC_PCS(inColor2, RGB_ICC), RGB_ICC);
            }
            if (inColor.Model != ColorModel.HSV)
            {
                if (HSVSpace != RGBSpaceName.ICC) ColHSV = Converter.ToHSV(inColor2, HSVSpace);
                else ColHSV = (ColorHSV)Converter.ToICC(Converter.ToICC_PCS(inColor2, HSV_ICC), HSV_ICC);
            }
            if (inColor.Model != ColorModel.HSL)
            {
                if (HSLSpace != RGBSpaceName.ICC) ColHSL = Converter.ToHSL(inColor2, HSLSpace);
                else ColHSL = (ColorHSL)Converter.ToICC(Converter.ToICC_PCS(inColor2, HSL_ICC), HSL_ICC);
            }
            if (inColor.Model != ColorModel.CMY && CMY_ICC != null) ColCMY = (ColorCMY)Converter.ToICC(Converter.ToICC_PCS(inColor2, CMY_ICC), CMY_ICC);
            if (inColor.Model != ColorModel.CMYK && CMYK_ICC != null) ColCMYK = (ColorCMYK)Converter.ToICC(Converter.ToICC_PCS(inColor2, CMYK_ICC), CMYK_ICC);
            if (inColor.Model != ColorModel.YCbCr)
            {
                if (YCbCrSpace != YCbCrSpaceName.ICC) ColYCbCr = Converter.ToYCbCr(inColor2, YCbCrSpace);
                else ColYCbCr = (ColorYCbCr)Converter.ToICC(Converter.ToICC_PCS(inColor2, YCbCr_ICC), YCbCr_ICC);
            }
            if (inColor.Model != ColorModel.Gray)
            {
                if (CMY_ICC != null) ColGray = (ColorGray)Converter.ToICC(Converter.ToICC_PCS(inColor2, Gray_ICC), Gray_ICC);
                else ColGray = Converter.ToGray(inColor2);
            }
            if (!IsXColor(inColor.Model) && XColor_ICC != null) ColX = (ColorX)Converter.ToICC(Converter.ToICC_PCS(inColor2, XColor_ICC), XColor_ICC);

            FillFields();
        }
예제 #4
0
 private void ColorPanel_MouseClick(object sender, MouseEventArgs e)
 {
     if (ColorSelectDialog.ShowDialog() == DialogResult.OK)
     {
         if (ColRGB == null)
         {
             if (RGBSpace != RGBSpaceName.ICC) ColRGB = new ColorRGB(RGBSpace);
             else ColRGB = new ColorRGB(RGB_ICC);
         }
         ColRGB.R = ColorSelectDialog.Color.R / 255d;
         ColRGB.G = ColorSelectDialog.Color.G / 255d;
         ColRGB.B = ColorSelectDialog.Color.B / 255d;
         RGB_R.Text = ColRGB.R.ToString("n4");
         RGB_G.Text = ColRGB.G.ToString("n4");
         RGB_B.Text = ColRGB.B.ToString("n4");
         ColorPanel.BackColor = ColorSelectDialog.Color;
         Hex_Label.Text = "Hex: #" + Convert.ToString(ColorSelectDialog.Color.R, 16).PadLeft(2, '0') + Convert.ToString(ColorSelectDialog.Color.G, 16).PadLeft(2, '0') + Convert.ToString(ColorSelectDialog.Color.B, 16).PadLeft(2, '0');
         RGB_Label.Text = "R: " + ColorSelectDialog.Color.R + " G: " + ColorSelectDialog.Color.G + " B: " + ColorSelectDialog.Color.B;
     }
 }
예제 #5
0
        private static void AddKeyPress(int vkCode)
        {
            Debug.WriteLine("AddKeyPress at " + DateTime.Now.Minute.ToString() + ":" + DateTime.Now.Minute.ToString() + ":" + DateTime.Now.Second.ToString() + ":" + DateTime.Now.Millisecond.ToString());

            KeysConverter kc = new KeysConverter();
            string keyChar = kc.ConvertToString(vkCode).ToUpper();

            string keyOut = "";
            switch (keyChar)
            {
                case "1":
                    keyOut = "ONE";
                    break;
                case "2":
                    keyOut = "TWO";
                    break;
                case "3":
                    keyOut = "THREE";
                    break;
                case "4":
                    keyOut = "FOUR";
                    break;
                case "5":
                    keyOut = "FIVE";
                    break;
                case "6":
                    keyOut = "SIX";
                    break;
                case "7":
                    keyOut = "SEVEN";
                    break;
                case "8":
                    keyOut = "EIGHT";
                    break;
                case "9":
                    keyOut = "NINE";
                    break;
                case "0":
                    keyOut = "ZERO";
                    break;
                default:
                    keyOut = keyChar;
                    break;
            }

            try
            {
                //KeyCodes.ScanCode code = (KeyCodes.ScanCode)Enum.Parse(typeof(KeyCodes.ScanCode), keyOut);
                var query = from KeyCodes.keyPosition k in KeyCodes.keypositions
                            where k.keyname == keyOut //(int)code
                            select k;

                centroid c = new centroid();
                c.point = new Point((int)query.First().x, (int)query.First().y);
                c.countup = 1;

                System.Drawing.Color c1 = Form1.m_startColour;
                System.Drawing.Color c2 = Form1.m_endColour;

                if (Form1.randomColours)
                {
                    Random rndcol = new Random();
                    c1 = System.Drawing.Color.FromArgb(rndcol.Next(30, 255), rndcol.Next(30, 255), rndcol.Next(30, 255));
                    c2 = System.Drawing.Color.FromArgb(rndcol.Next(30, 255), rndcol.Next(30, 255), rndcol.Next(30, 255));
                }

                ColorManagment.ColorConverter Converter = new ColorManagment.ColorConverter();    //create a new instance of a ColorConverter
                ColorRGB rgb1 = new ColorRGB(RGBSpaceName.sRGB, c1.R, c1.G, c1.B);  //create an RGB color
                c.lab1 = Converter.ToLab(rgb1);
                ColorRGB rgb2 = new ColorRGB(RGBSpaceName.sRGB, c2.R, c2.G, c2.B);  //create an RGB color
                c.lab2 = Converter.ToLab(rgb2);

                if (centroids.Count > 0)
                {
                    for (int i = centroids.Count-1; i > -1; i--)
                    {
                        Debug.WriteLine(i);
                        if (centroids[i].point == c.point)
                        {
                            centroids.RemoveAt(i);
                            break;
                        }
                    }
                }
                centroids.Add(c);
                //DoAnimation();
            }
            catch (Exception ex)
            {
                Debug.WriteLine("AddKeyPress: handled exception: " + ex.Message);
            }
        }
예제 #6
0
        void bw_Keysave_DoWork(object sender, DoWorkEventArgs e)
        {
            LogitechGSDK.LogiLedSetLighting(0, 0, 0);
            DateTime inittime = DateTime.Now;
            int counter = 0;
            List<keysavePoint> points = new List<keysavePoint> { };
            Random rnd = new Random();
            while (true)
            {
                if (bw_Keysave.CancellationPending) return;
                TimeSpan elapsed = DateTime.Now - inittime;
                if (elapsed.TotalMilliseconds > 500) //change this namber to change speed new stars appear
                {
                    //for (int c = 0; c < 2; c++)
                    //{
                        int newx = rnd.Next(0,20);
                        int newy = rnd.Next(0, 5);
                        keysavePoint kp = new keysavePoint();
                        kp.point = new Point(newx, newy);
                        kp.counter = 0;
                        points.Add(kp);
                    //}
                    //Console.Write(".");
                    inittime = DateTime.Now;
                }
                if (counter > 4) //change this number to change speed stars change
                {
                    counter = 0;

                    System.Drawing.Color c1 = Form1.m_startColour;
                    System.Drawing.Color c2 = Form1.m_endColour;

                    int fadespeed = Form1.m_fadespeed;
                    int gradientspeed = Form1.m_gradientspeed;

                    ColorManagment.ColorConverter Converter = new ColorManagment.ColorConverter();    //create a new instance of a ColorConverter
                    ColorRGB rgb1 = new ColorRGB(RGBSpaceName.sRGB, c1.R, c1.G, c1.B);  //create an RGB color
                    ColorLab lab1 = Converter.ToLab(rgb1);
                    ColorRGB rgb2 = new ColorRGB(RGBSpaceName.sRGB, c2.R, c2.G, c2.B);  //create an RGB color
                    ColorLab lab2 = Converter.ToLab(rgb2);

                    bmp = new Bitmap(21, 6);
                    LockBitmap lockBitmap = new LockBitmap(bmp);
                    lockBitmap.LockBits();

                    for (int x = 0; x < 21; x++)
                        for (int y = 0; y < 6; y++)
                        {
                            distances[x, y] = double.MaxValue;
                            times[x, y] = int.MaxValue;
                        }

                    for (int i = 0; i < points.Count; i++)
                    {
                        keysavePoint c = points[i];

                        for (int x = 0; x < 21; x++)
                            for (int y = 0; y < 6; y++)
                            {
                                double distance = Math.Sqrt(((x - c.point.X) * (x - c.point.X) + (y - c.point.Y) * (y - c.point.Y)));
                                distance = Math.Abs(distance) / (Form1.m_distanceFalloff / 2);
                                if (Form1.m_Wave)
                                {
                                    distance -= c.counter;
                                    distance = Math.Abs(distance);
                                }
                                if (distance < Math.Abs(distances[x, y]))
                                {
                                    distances[x, y] = distance;
                                }
                                if (c.counter < times[x, y])
                                    times[x, y] = c.counter;
                            }
                        c.counter++;
                        points[i] = c;
                    }

                    for (int x = 0; x < 21; x++)
                        for (int y = 0; y < 6; y++)
                        {
                            double distance = distances[x, y];
                            System.Drawing.Color colour = System.Drawing.Color.White;
                            if (Form1.m_Wave == true)
                                colour = getColour(lab1, lab2, distance + times[x, y] + Math.Pow(distance, Form1.m_WaveSpeed), gradientspeed, fadespeed);
                            else
                                colour = getColour(lab1, lab2, distance + times[x, y], gradientspeed, fadespeed);
                            lockBitmap.SetPixel(x, y, colour);
                        }
                    for (int k = points.Count - 1; k >= 0; k--)
                    {
                        if (points[k].counter > 20) points.RemoveAt(k);
                    }
                    lockBitmap.UnlockBits();

                    byte[] b = Form1.getLEDGridFromBitmap(bmp);
                    //((Form1)Application.OpenForms[0]).pic1.Image = bmp;
                    //bmp.Save(@"C:\temp\heatmap.png");
                    LogitechGSDK.LogiLedSetLightingFromBitmap(b);
                }
                counter++;
                System.Threading.Thread.Sleep(10);
            }
        }
예제 #7
0
        void bw_Breathe_DoWork(object sender, DoWorkEventArgs e)
        {
            System.Drawing.Color c1 = Form1.m_startColour;
            System.Drawing.Color c2 = Form1.m_endColour; //System.Drawing.Color.Black;// Form1.m_endColour;

            bool donePause = false;
            int gradientspeed = Form1.m_gradientspeed;

            DateTime inittime = DateTime.Now;
            int counter = 1;// (int)(Math.PI * 2);
            List<keysavePoint> points = new List<keysavePoint> { };
            Random rnd = new Random();
            while (true)
            {
                if (bw_Breathe.CancellationPending) return;

                ColorManagment.ColorConverter Converter = new ColorManagment.ColorConverter();    //create a new instance of a ColorConverter
                ColorRGB rgb1 = new ColorRGB(RGBSpaceName.sRGB, c1.R, c1.G, c1.B);  //create an RGB color
                ColorLab lab1 = Converter.ToLab(rgb1);
                ColorRGB rgb2 = new ColorRGB(RGBSpaceName.sRGB, c2.R, c2.G, c2.B);  //create an RGB color
                ColorLab lab2 = Converter.ToLab(rgb2);

                System.Drawing.Color colour = System.Drawing.Color.White;
                colour = getColour(lab1, lab2, pulse(counter / 2000.0, 10, 5));//Form1.m_fadespeed));

                LogitechGSDK.LogiLedSetLighting((int)(colour.R / 255.0 * 100.0), (int)(colour.G / 255.0 * 100.0), (int)(colour.B / 255.0 * 100.0));

                double val = 2 * Math.PI * counter / 2000 * 10;
                if (breatheTopPause)
                {
                    for (int i = 0; i < 50; i++)
                    {
                        if (bw_Breathe.CancellationPending) return;
                        System.Threading.Thread.Sleep(28);
                    }
                    counter = (int)(Math.PI * 2);
                    donePause = false;
                    breatheTopPause = false;
                }
                else if (colour.A == 0 && !donePause)
                {
                    donePause = true;
                    for (int i = 0; i < 50; i++)
                    {
                        if (bw_Breathe.CancellationPending) return;
                        System.Threading.Thread.Sleep(28);
                    }
                }

                counter++;
                System.Threading.Thread.Sleep((int)(55));
            }
        }