public static System.Drawing.Color GetColour(ColorLab c1, ColorLab c2, double countup, int speed = 7, int fadespeed = 15)
        {
            speed = 21 - speed;
            double alpha_seed = countup * fadespeed;
            if (alpha_seed > 255) alpha_seed = 255;
            int alpha = (int)Math.Max(0, 255 - alpha_seed);

            double step = 1.0 / speed;
            double ratio = (countup - 1) * step;
            if (ratio > 1) ratio = 1;
            if (ratio < 0) ratio = 0;
            double ratio2 = 1 - ratio;

            double L = ((c1.L * ratio2) + (c2.L * ratio));
            double a = ((c1.a * ratio2) + (c2.a * ratio));
            double b = ((c1.b * ratio2) + (c2.b * ratio));

            //Console.WriteLine("Lab = " + L.ToString() + "," + a.ToString() + "," + b.ToString());
            ColorManagment.ColorConverter Converter = new ColorManagment.ColorConverter();    //create a new instance of a ColorConverter
            ColorLab lab = new ColorLab(L, a, b); //create new Lab color
            ColorRGB rgb = Converter.ToRGB(lab); //convert to rgb
            ColorHSV hsv = Converter.ToHSV(rgb);  //conver to HSL
            //Console.WriteLine("hsl.l = " + hsv.V.ToString());
            hsv.V *= alpha / 255.0; //darken
            rgb = Converter.ToRGB(hsv); //convert to rgb
            //Console.WriteLine("RGB + " + rgb.R.ToString() + "," + rgb.G.ToString() + "," + rgb.B.ToString());
            return System.Drawing.Color.FromArgb(255, (int)(rgb.R * 255), (int)(rgb.G * 255), (int)(rgb.B * 255));
        }
示例#2
0
        private static System.Drawing.Color getColour(ColorLab c1, ColorLab c2, double ratio)
        {
            double ratio2 = 1 - ratio;

            double L = ((c1.L * ratio2) + (c2.L * ratio));
            double a = ((c1.a * ratio2) + (c2.a * ratio));
            double b = ((c1.b * ratio2) + (c2.b * ratio));

            double alpha = 255 * (1 - (ratio * ratio));

            //Console.WriteLine("Lab = " + L.ToString() + "," + a.ToString() + "," + b.ToString());
            ColorManagment.ColorConverter Converter = new ColorManagment.ColorConverter(); //create a new instance of a ColorConverter
            ColorLab lab = new ColorLab(L, a, b);                                          //create new Lab color
            ColorRGB rgb = Converter.ToRGB(lab);                                           //convert to rgb
            ColorHSV hsv = Converter.ToHSV(rgb);                                           //conver to HSL

            //Console.WriteLine("hsl.l = " + hsv.V.ToString());
            hsv.V *= alpha / 255.0;        //darken
            rgb    = Converter.ToRGB(hsv); //convert to rgb
            //Console.WriteLine("RGB + " + rgb.R.ToString() + "," + rgb.G.ToString() + "," + rgb.B.ToString());
            if (ratio2 == 1.0)
            {
                breatheTopPause = true;
            }
            if (alpha < 0.02)
            {
                return(System.Drawing.Color.FromArgb(0, (int)(rgb.R * 255), (int)(rgb.G * 255), (int)(rgb.B * 255)));
            }
            return(System.Drawing.Color.FromArgb(255, (int)(rgb.R * 255), (int)(rgb.G * 255), (int)(rgb.B * 255)));
        }
示例#3
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);
 }
示例#4
0
        private static System.Drawing.Color getColour(ColorLab c1, ColorLab c2, double countup, int speed = 7, int fadespeed = 15)
        {
            speed = 21 - speed;
            double alpha_seed = Math.Sqrt(countup) * fadespeed;

            if (alpha_seed > 255)
            {
                alpha_seed = 255;
            }
            int alpha = (int)Math.Max(0, 255 - alpha_seed);

            double step  = 1.0 / speed;
            double ratio = (countup - 1) * step;

            if (ratio > 1)
            {
                ratio = 1;
            }
            if (ratio < 0)
            {
                ratio = 0;
            }
            double ratio2 = 1 - ratio;

            double L = ((c1.L * ratio2) + (c2.L * ratio));
            double a = ((c1.a * ratio2) + (c2.a * ratio));
            double b = ((c1.b * ratio2) + (c2.b * ratio));

            //Console.WriteLine("Lab = " + L.ToString() + "," + a.ToString() + "," + b.ToString());
            ColorManagment.ColorConverter Converter = new ColorManagment.ColorConverter(); //create a new instance of a ColorConverter
            ColorLab lab = new ColorLab(L, a, b);                                          //create new Lab color
            ColorRGB rgb = Converter.ToRGB(lab);                                           //convert to rgb
            ColorHSV hsv = Converter.ToHSV(rgb);                                           //conver to HSL

            //Console.WriteLine("hsl.l = " + hsv.V.ToString());
            hsv.V *= alpha / 255.0;        //darken
            rgb    = Converter.ToRGB(hsv); //convert to rgb
            //Console.WriteLine("RGB + " + rgb.R.ToString() + "," + rgb.G.ToString() + "," + rgb.B.ToString());
            return(System.Drawing.Color.FromArgb(255, (int)(rgb.R * 255), (int)(rgb.G * 255), (int)(rgb.B * 255)));
        }
        public static System.Drawing.Color GetColour(ColorLab c1, ColorLab c2, double ratio)
        {
            double ratio2 = 1 - ratio;

            double L = ((c1.L * ratio2) + (c2.L * ratio));
            double a = ((c1.a * ratio2) + (c2.a * ratio));
            double b = ((c1.b * ratio2) + (c2.b * ratio));

            double alpha = 255 * (1 - (ratio * ratio));
            //Console.WriteLine("Lab = " + L.ToString() + "," + a.ToString() + "," + b.ToString());
            ColorManagment.ColorConverter Converter = new ColorManagment.ColorConverter();    //create a new instance of a ColorConverter
            ColorLab lab = new ColorLab(L, a, b); //create new Lab color
            ColorRGB rgb = Converter.ToRGB(lab); //convert to rgb
            ColorHSV hsv = Converter.ToHSV(rgb);  //conver to HSL
            //Console.WriteLine("hsl.l = " + hsv.V.ToString());
            hsv.V *= alpha / 255.0; //darken
            rgb = Converter.ToRGB(hsv); //convert to rgb
            //Console.WriteLine("RGB + " + rgb.R.ToString() + "," + rgb.G.ToString() + "," + rgb.B.ToString());
            if (ratio2 == 1.0)
                Animations.breatheTopPause = true;
            if (alpha < 0.02)
                return System.Drawing.Color.FromArgb(0, (int)(rgb.R * 255), (int)(rgb.G * 255), (int)(rgb.B * 255));
            return System.Drawing.Color.FromArgb(255, (int)(rgb.R * 255), (int)(rgb.G * 255), (int)(rgb.B * 255));
        }
示例#6
0
        private void Measure(object Data)
        {
            int end = (int)((object[])Data)[0];
            Color FromColor = (Color)((object[])Data)[1];
            Color ToColor = (Color)((object[])Data)[2];
            bool DoFast = (bool)((object[])Data)[3];
            Stopwatch watch = new Stopwatch();
            Color From2Color = FromColor;
            ColorConverter conv = new ColorConverter();

            if (DoFast)
            {
                RGBSpaceName n = ColorConverter.StandardColorspace;
                YCbCrSpaceName m = ColorConverter.StandardYCbCrSpace;
                if (ToColor.Model == ColorModel.YCbCr)
                {
                    n = ((ColorYCbCr)ToColor).BaseSpaceName;
                    m = ((ColorYCbCr)ToColor).SpaceName;
                }
                else if (ToColor.Model == ColorModel.RGB) n = ((ColorRGB)ToColor).SpaceName;
                else if (ToColor.Model == ColorModel.HSV) n = ((ColorRGB)ToColor).SpaceName;
                else if (ToColor.Model == ColorModel.HSL) n = ((ColorRGB)ToColor).SpaceName;

                if (n != ColorConverter.StandardColorspace) conv.SetFast(FromColor, ToColor.Model, n, m);
                else conv.SetFast(FromColor, ToColor.Model, ToColor.ReferenceWhite);
            }

            for (int i = 0; i < end / Threadcount && !MainWorker.CancellationPending; i++)
            {
                if (DoFast)
                {
                    watch.Start();
                    conv.ConvertFast(FromColor);
                    watch.Stop();
                }
                else
                {
                    if (FromColor.IsICCcolor && !FromColor.IsPCScolor)
                    {
                        watch.Start();
                        From2Color = conv.ToICC(FromColor);
                        watch.Stop();
                    }

                    switch (ToColor.Model)
                    {
                        case ColorModel.CIELab:
                            watch.Start();
                            conv.ToLab(From2Color, ToColor.ReferenceWhite);
                            watch.Stop();
                            break;
                        case ColorModel.CIELCHab:
                            watch.Start();
                            conv.ToLCHab(From2Color, ToColor.ReferenceWhite);
                            watch.Stop();
                            break;
                        case ColorModel.CIELCHuv:
                            watch.Start();
                            conv.ToLCHuv(From2Color, ToColor.ReferenceWhite);
                            watch.Stop();
                            break;
                        case ColorModel.CIELuv:
                            watch.Start();
                            conv.ToLuv(From2Color, ToColor.ReferenceWhite);
                            watch.Stop();
                            break;
                        case ColorModel.CIEXYZ:
                            watch.Start();
                            conv.ToXYZ(From2Color, ToColor.ReferenceWhite);
                            watch.Stop();
                            break;
                        case ColorModel.CIEYxy:
                            watch.Start();
                            conv.ToYxy(From2Color, ToColor.ReferenceWhite);
                            watch.Stop();
                            break;
                        case ColorModel.Gray:
                            watch.Start();
                            conv.ToGray(From2Color, ToColor.ReferenceWhite);
                            watch.Stop();
                            break;
                        case ColorModel.HSL:
                            RGBSpaceName n = ((ColorHSL)ToColor).SpaceName;
                            if (n == RGBSpaceName.ICC) goto default;
                            watch.Start();
                            conv.ToHSL(From2Color, n);
                            watch.Stop();
                            break;
                        case ColorModel.HSV:
                            n = ((ColorHSV)ToColor).SpaceName;
                            if (n == RGBSpaceName.ICC) goto default;
                            watch.Start();
                            conv.ToHSV(From2Color, n);
                            watch.Stop();
                            break;
                        case ColorModel.RGB:
                            n = ((ColorRGB)ToColor).SpaceName;
                            if (n == RGBSpaceName.ICC) goto default;
                            watch.Start();
                            conv.ToRGB(From2Color, n);
                            watch.Stop();
                            break;
                        case ColorModel.YCbCr:
                            n = ((ColorYCbCr)ToColor).BaseSpaceName;
                            YCbCrSpaceName m = ((ColorYCbCr)ToColor).SpaceName;
                            if (m == YCbCrSpaceName.ICC) goto default;
                            watch.Start();
                            conv.ToYCbCr(From2Color, n, m);
                            watch.Stop();
                            break;
                        case ColorModel.LCH99:
                            watch.Start();
                            conv.ToLCH99(From2Color);
                            watch.Stop();
                            break;
                        case ColorModel.LCH99b:
                            watch.Start();
                            conv.ToLCH99b(From2Color);
                            watch.Stop();
                            break;
                        case ColorModel.LCH99c:
                            watch.Start();
                            conv.ToLCH99c(From2Color);
                            watch.Stop();
                            break;
                        case ColorModel.LCH99d:
                            watch.Start();
                            conv.ToLCH99d(From2Color);
                            watch.Stop();
                            break;

                        default:
                            watch.Start();
                            conv.ToICC(conv.ToICC_PCS(From2Color, ToICC), ToICC);
                            watch.Stop();
                            break;
                    }
                }

                progress++;
                time += watch.ElapsedTicks;
                if (progress % 100 == 0) MainWorker.ReportProgress(progress * 100 / (end - 1));
            }
        }
示例#7
0
文件: Dye.cs 项目: RedGlow/ColorWars
 private ColorHSV getColorHSV()
 {
     var colorSRGB = GetColor(parent.CurrentMaterial);
     var colorHSV = new ColorConverter().ToHSV(colorSRGB);
     return colorHSV;
 }
示例#8
0
文件: Dye.cs 项目: RedGlow/ColorWars
        /* DISTANCE */
        public double Distance(System.Windows.Media.Color otherColor)
        {
            // var the LAB colors
            var cc = new ColorConverter();
            var color1 = cc.ToLab(GetColor(parent.CurrentMaterial));
            var color2 = cc.ToLab(new ColorRGB(otherColor.R, otherColor.G, otherColor.B));

            // computer the difference using the CIEDE2000 algorithm
            // http://en.wikipedia.org/wiki/Color_difference#CIEDE2000
            const double kC = 1.0, kH = 1.0, kL = 1.0;
            var dLp = color2.L - color1.L;
            var Ls = (color1.L + color2.L) / 2;
            var C1s = Math.Sqrt(color1.a * color1.a + color1.b * color1.b);
            var C2s = Math.Sqrt(color2.a * color2.a + color2.b * color2.b);
            var Cs = (C1s + C2s) / 2;
            var p7 = 1 - Math.Sqrt(Math.Pow(Cs, 7) / (Math.Pow(Cs, 7) + Math.Pow(25, 7)));
            var a1p = color1.a + color1.a / 2 * p7;
            var a2p = color2.a + color2.a / 2 * p7;
            var C1p = Math.Sqrt(a1p * a1p + color1.b * color1.b);
            var C2p = Math.Sqrt(a2p * a2p + color2.b * color2.b);
            var Cps = (C1p + C2p) / 2;
            var dCp = C2p - C1p;
            var h1p = color1.b == 0 && a1p == 0 ? 0 : normalize(Math.Atan2(color1.b, a1p) * 180 / Math.PI);
            var h2p = color2.b == 0 && a2p == 0 ? 0 : normalize(Math.Atan2(color2.b, a2p) * 180 / Math.PI);
            var dhp = Math.Abs(h1p - h2p) <= 180 ? h2p - h1p :
                h2p <= h1p ? h2p - h1p + 360 :
                h2p - h1p - 360;
            var dHp = 2 * Math.Sqrt(C1p * C2p) * Math.Sin(dhp * Math.PI / 180 / 2);
            var Hps = C1p == 0 || C2p == 0 ? h1p + h2p : Math.Abs(h1p - h2p) > 180 ? (h1p + h2p + 360) / 2 : (h1p + h2p) / 2;
            var T = 1 - 0.17 * Math.Cos((Hps - 30) * Math.PI / 180) +
                0.24 * Math.Cos(2 * Hps * Math.PI / 180) +
                0.32 * Math.Cos((3 * Hps + 6) * Math.PI / 180) -
                0.20 * Math.Cos((4 * Hps - 63) * Math.PI / 180);
            var Lsm50sq = Sqr(Ls - 50);
            var SL = 1 + 0.015 * Lsm50sq / Math.Sqrt(20 + Lsm50sq);
            var SC = 1 + 0.045 * Cps;
            var SH = 1 + 0.015 * Cps * T;
            var RT = -1 * Math.Sqrt(Math.Pow(Cps, 7) / (Math.Pow(Cps, 7) + Math.Pow(25, 7))) *
                Math.Sin((60 * Math.Exp(- Sqr((Hps - 275) / 25))) * Math.PI / 180);
            var DEs00 = Math.Sqrt(
                Sqr(dLp / (kL * SL)) +
                Sqr(dCp / (kC * SC)) +
                Sqr(dHp / (kH * SH)) +
                RT * dCp * dHp / (kC * SC * kH * SH));

            return DEs00;
        }
示例#9
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);
            }
        }
示例#10
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);
            }
        }
示例#11
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));
            }
        }
示例#12
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);
            }
        }
示例#13
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 == null)
                {
                    return;
                }
                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));
            }
        }
示例#14
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();

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

            while (true)
            {
                if (bw_Keysave.CancellationPending)
                {
                    timerKeySaver.Start();
                    return;
                }
                TimeSpan elapsed = DateTime.Now - inittime;
                if (elapsed.TotalMilliseconds > Form1.m_KeysaveNewRippleInterval) //change this namber to change speed new stars appear
                {
                    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));
                    }

                    //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;

                    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 > 40)
                        {
                            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);
            }
            timerKeySaver.Start();
        }