public static LightCommand SetColor(this LightCommand lightCommand, RGBColor color) { if (lightCommand == null) throw new ArgumentNullException(nameof(lightCommand)); var hsb = color.GetHSB(); lightCommand.Brightness = (byte)hsb.Brightness; lightCommand.Hue = hsb.Hue; lightCommand.Saturation = hsb.Saturation; return lightCommand; }
public void ColorConversionDarkSeaGreenPoint() { string color = "8FBC8B"; RGBColor rgbColor = new RGBColor(color); var hsb = rgbColor.GetHSB(); State state = new State() { Hue = hsb.Hue, Brightness = (byte)hsb.Brightness, Saturation = hsb.Saturation }; var rgb = state.ToRgb(); }
public static LightCommand SetColor(this LightCommand lightCommand, RGBColor color) { if (lightCommand == null) { throw new ArgumentNullException(nameof(lightCommand)); } var hsb = color.GetHSB(); lightCommand.Brightness = (byte)hsb.Brightness; lightCommand.Hue = hsb.Hue; lightCommand.Saturation = hsb.Saturation; return(lightCommand); }
public void ColorConversionRedPoint() { string color = "FF0000"; RGBColor rgbColor = new RGBColor(color); var hsb = rgbColor.GetHSB(); State state = new State() { Hue = hsb.Hue, Brightness = (byte)hsb.Brightness, Saturation = hsb.Saturation }; var rgb = state.ToRgb(); Assert.AreEqual(1, rgb.R); Assert.AreEqual(0, rgb.G); Assert.AreEqual(0, rgb.B); }
public void ColorConversionDarkSeaGreenPoint() { string color = "8FBC8B"; RGBColor rgbColor = new RGBColor(color); var hsb = rgbColor.GetHSB(); State state = new State() { Hue = hsb.Hue, Brightness = (byte)hsb.Brightness, Saturation = hsb.Saturation }; var rgb = state.ToRgb(); Assert.AreEqual(143d / 255d, rgb.R, 0.002d); Assert.AreEqual(188d / 255d, rgb.G, 0.002d); Assert.AreEqual(139d / 255d, rgb.B, 0.002d); }
public async Task Run(CancellationToken token, string ip = null) { try { if (ip == null) { ip = await FindBridge(); } token.ThrowIfCancellationRequested(); var appKey = prefs.GetString("HueSaber", "appKey"); var clientKey = prefs.GetString("HueSaber", "clientKey"); log.Info("Connecting to bridge..."); var client = new StreamingHueClient(ip, appKey, clientKey); token.ThrowIfCancellationRequested(); log.Info("Connected! Getting entertainment group..."); var group = (await client.LocalHueClient.GetEntertainmentGroups()).ElementAtOrDefault(prefs.GetInt("HueSaber", "overrideRoom", 0)); if (group == null) { log.Error("Group is missing!"); return; } token.ThrowIfCancellationRequested(); var entGroup = new StreamingGroup(group.Locations); log.Info("Found group! Connecting to lightbulbs..."); await client.Connect(group.Id); token.ThrowIfCancellationRequested(); log.Info("Connected to bulbs! Tracking background color..."); _ = client.AutoUpdate(entGroup, token); var layer = entGroup.GetNewLayer(true); while (!token.IsCancellationRequested) { //log.Info($"Color is {currentColor}"); var color = (Color)currentColor; var miss = DateTimeOffset.UtcNow - (DateTimeOffset)missTime; var cut = DateTimeOffset.UtcNow - (DateTimeOffset)cutTime; var rgbColor = new RGBColor(color.r, color.g, color.b); var hsbColor = rgbColor.GetHSB(); if (hsbColor.Saturation > 35) { hsbColor.Saturation = 200; } var brightness = 0.7; if (miss < TimeSpan.FromMilliseconds(100)) { brightness = 0.5; } else if (cut < TimeSpan.FromMilliseconds(100)) { brightness = 1; } layer.SetState(token, hsbColor.GetRGB(), brightness, TimeSpan.FromMilliseconds(50)); await Task.Delay(TimeSpan.FromMilliseconds(1000.0 / 30.0), token); } } catch (Exception ex) { log.Error(ex); throw; } }
public static async Task ProcessEvent(BeatmapEventData data, Color?raw = null, dynamic gradientObject = null) { double r = 0; double g = 0; double b = 0; double ir = 0; double ig = 0; double ib = 0; double er = 0; double eg = 0; double eb = 0; double brightness; float duration = 0; bool gradient = false; Color initcolor; Color endcolor; var initrgbColor = new RGBColor(ir, ig, ib); var inithsbColor = initrgbColor.GetHSB(); var endrgbColor = new RGBColor(er, eg, eb); var endhsbColor = endrgbColor.GetHSB(); if (gradientObject != null) { duration = (float)Trees.at(gradientObject, DURATION); initcolor = Utils.ChromaUtils.GetColorFromData(gradientObject, STARTCOLOR); endcolor = Utils.ChromaUtils.GetColorFromData(gradientObject, ENDCOLOR); ir = initcolor.r; ig = initcolor.g; ib = initcolor.b; er = endcolor.r; eg = endcolor.g; eb = endcolor.b; initrgbColor = new RGBColor(ir, ig, ib); inithsbColor = initrgbColor.GetHSB(); endrgbColor = new RGBColor(er, eg, eb); endhsbColor = endrgbColor.GetHSB(); if (Settings.ChromaConfig.Instance.LowLight == true) { if (inithsbColor.Brightness < 127) { inithsbColor.Brightness = 127; } if (endhsbColor.Brightness < 127) { endhsbColor.Brightness = 127; } } else { } gradient = true; } if (raw.HasValue) { Color color = (Color)raw; r = color.r; g = color.g; b = color.b; } else if (data.value == 5 || data.value == 6 || data.value == 7) { r = origLeft.r; g = origLeft.g; b = origLeft.b; } else { r = origRight.r; g = origRight.g; b = origRight.b; } var rgbColor = new RGBColor(r, g, b); var hsbColor = rgbColor.GetHSB(); if (Settings.ChromaConfig.Instance.LowLight == true) { brightness = 0.5f; if (hsbColor.Brightness < 127) { hsbColor.Brightness = 127; } } else { brightness = 0; } if (data.type == BeatmapEventType.Event0) { if (Settings.ChromaConfig.Instance.BackLaserGroup == BackLaserGroup.NONE) { } if (Settings.ChromaConfig.Instance.BackLaserGroup == BackLaserGroup.LEFT) { await SendCommandL(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.BackLaserGroup == BackLaserGroup.RIGHT) { await SendCommandR(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.BackLaserGroup == BackLaserGroup.FRONT) { await SendCommandF(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.BackLaserGroup == BackLaserGroup.BACK) { await SendCommandB(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.BackLaserGroup == BackLaserGroup.CENTER) { await SendCommandC(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.BackLaserGroup == BackLaserGroup.ALL) { await SendCommandA(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } } if (data.type == BeatmapEventType.Event1) { if (Settings.ChromaConfig.Instance.BigRingsGroup == BigRingsGroup.NONE) { } if (Settings.ChromaConfig.Instance.BigRingsGroup == BigRingsGroup.LEFT) { await SendCommandL(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.BigRingsGroup == BigRingsGroup.RIGHT) { await SendCommandR(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.BigRingsGroup == BigRingsGroup.FRONT) { await SendCommandF(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.BigRingsGroup == BigRingsGroup.BACK) { await SendCommandB(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.BigRingsGroup == BigRingsGroup.CENTER) { await SendCommandC(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.BigRingsGroup == BigRingsGroup.ALL) { await SendCommandA(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } } if (data.type == BeatmapEventType.Event2) { if (Settings.ChromaConfig.Instance.LeftRotatingLaserGroup == LeftRotatingLaserGroup.NONE) { } if (Settings.ChromaConfig.Instance.LeftRotatingLaserGroup == LeftRotatingLaserGroup.LEFT) { await SendCommandL(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.LeftRotatingLaserGroup == LeftRotatingLaserGroup.RIGHT) { await SendCommandR(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.LeftRotatingLaserGroup == LeftRotatingLaserGroup.FRONT) { await SendCommandF(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.LeftRotatingLaserGroup == LeftRotatingLaserGroup.BACK) { await SendCommandB(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.LeftRotatingLaserGroup == LeftRotatingLaserGroup.CENTER) { await SendCommandC(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.LeftRotatingLaserGroup == LeftRotatingLaserGroup.ALL) { await SendCommandA(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } } if (data.type == BeatmapEventType.Event3) { if (Settings.ChromaConfig.Instance.RightRotatingLaserGroup == RightRotatingLaserGroup.NONE) { } if (Settings.ChromaConfig.Instance.RightRotatingLaserGroup == RightRotatingLaserGroup.LEFT) { await SendCommandL(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.RightRotatingLaserGroup == RightRotatingLaserGroup.RIGHT) { await SendCommandR(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.RightRotatingLaserGroup == RightRotatingLaserGroup.FRONT) { await SendCommandF(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.RightRotatingLaserGroup == RightRotatingLaserGroup.BACK) { await SendCommandB(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.RightRotatingLaserGroup == RightRotatingLaserGroup.CENTER) { await SendCommandC(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.RightRotatingLaserGroup == RightRotatingLaserGroup.ALL) { await SendCommandA(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } } if (data.type == BeatmapEventType.Event4) { if (Settings.ChromaConfig.Instance.CenterLightGroup == CenterLightGroup.NONE) { } if (Settings.ChromaConfig.Instance.CenterLightGroup == CenterLightGroup.LEFT) { await SendCommandL(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.CenterLightGroup == CenterLightGroup.RIGHT) { await SendCommandR(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.CenterLightGroup == CenterLightGroup.FRONT) { await SendCommandF(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.CenterLightGroup == CenterLightGroup.BACK) { await SendCommandB(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.CenterLightGroup == CenterLightGroup.CENTER) { await SendCommandC(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } if (Settings.ChromaConfig.Instance.CenterLightGroup == CenterLightGroup.ALL) { await SendCommandA(data, hsbColor, brightness, inithsbColor, endhsbColor, duration, gradient); } } }
static void Main(string[] args) { #region Startup var versionInfo = FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location); var attribute = Assembly.GetExecutingAssembly() .GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false) .Cast <AssemblyDescriptionAttribute>().FirstOrDefault(); var appName = string.Format("{0} v{1}", typeof(Program).Assembly.GetName().Name, versionInfo.ProductVersion); Console.Title = appName; Console.WindowWidth = 81; Console.BufferWidth = 81; Console.WindowHeight = 36; Console.WriteLine(); Console.BackgroundColor = ConsoleColor.Gray; Console.ForegroundColor = ConsoleColor.Black; Console.WriteLine(appName); Console.ResetColor(); if (attribute != null) { Console.WriteLine(attribute.Description); } Console.WriteLine(); Console.WriteLine(versionInfo.LegalCopyright); Console.WriteLine(String.Empty.PadLeft(80, '-')); Console.WriteLine(); #endregion Start: Console.WriteLine("Converters:"); Console.WriteLine("1. RGB hexvalue to HSB (hue, sat, bri)"); Console.WriteLine("2. RGB (red, green, blue) to HSB (hue, sat, bri)"); Console.WriteLine("3. HSB (hue, sat, bri) to RGB hexvalue"); Console.WriteLine(); Console.Write("Enter number of converter you wan't to use: "); var converterSelection = Console.ReadKey(); Console.WriteLine(); Console.WriteLine(String.Empty.PadLeft(80, '-')); Console.WriteLine(); switch (converterSelection.KeyChar) { case '1': Console.WriteLine("Convert RGB hexvalue to HSB (hue, sat, bri)"); Console.WriteLine(String.Empty.PadLeft(80, '-')); Console.WriteLine("Enter RGB hexcode (6 digits):"); Console.Write("#"); var input = Console.ReadLine(); Console.WriteLine(); var rgbInput = new RGBColor(); try { rgbInput = new RGBColor(input); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Invalid input!"); Console.WriteLine(ex.Message); Console.ReadKey(); return; } var hsb = rgbInput.GetHSB(); Console.WriteLine("Hue: {0}", hsb.Hue); Console.WriteLine("Sat: {0}", hsb.Saturation); Console.WriteLine("Bri: {0}", hsb.Brightness); break; case '2': Console.WriteLine("Convert RGB (red, green, blue) to HSB (hue, sat, bri)"); Console.WriteLine(String.Empty.PadLeft(80, '-')); Console.WriteLine("Enter the RGB values (0-255):"); Console.Write("R: "); var r = Console.ReadLine().ToByte(); Console.Write("G: "); var g = Console.ReadLine().ToByte(); Console.Write("B: "); var b = Console.ReadLine().ToByte(); Console.WriteLine(); var rgbInput2 = new RGBColor(r, g, b); var hsb2 = rgbInput2.GetHSB(); Console.WriteLine("Hue: {0}", hsb2.Hue); Console.WriteLine("Sat: {0}", hsb2.Saturation); Console.WriteLine("Bri: {0}", hsb2.Brightness); break; case '3': Console.WriteLine("Convert HSB (hue, sat, bri) to RGB hexvalue"); Console.WriteLine(String.Empty.PadLeft(80, '-')); Console.WriteLine("Enter the HSB values:"); Console.Write("Hue: "); var hue = Console.ReadLine().ToUInt16(); //This is a wrapping value between 0 and 65535 Console.Write("Sat: "); var sat = Console.ReadLine().ToByte(); Console.Write("Bri: "); var bri = Console.ReadLine().ToByte(); Console.WriteLine(); var hsbInput = new HSB(hue, sat, bri); Console.WriteLine("RGB: #{0}", hsbInput.GetRGB().ToHex()); break; default: Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Invalid input!"); break; } Console.WriteLine(); Console.WriteLine(String.Empty.PadLeft(80, '-')); Console.Write("Press [Space] for next conversion or any key for exit "); switch (Console.ReadKey().Key) { case ConsoleKey.Spacebar: Console.WriteLine(); Console.WriteLine(); goto Start; default: return; } }