public async Task UserRoleColor(SocketRole role, HexColor color) { if (_uow.UserRoleColorBindings.HasBinding(Context.User.Id, role)) { var allowedRoleColors = (Context.User as IGuildUser).GetRoles().Select(r => r.Color).ToArray(); var forbiddenRoleColors = Context.Guild.Roles.Where(r => r.IsHoisted && r.Id != role.Id); var converter = new ConverterBuilder().FromRGB().ToLab().Build(); var colorDifference = new CIEDE2000ColorDifference(); var requestedColor = converter.Convert(color.ToRGBColor()); var similarityRadius = _uow.GuildConfigs.For(Context.Guild.Id).ColorMetricSimilarityRadius; var similarlyColoredRole = forbiddenRoleColors.FirstOrDefault(c => colorDifference.ComputeDifference(requestedColor, converter.Convert(RGBColor.FromRGB8Bit(c.Color.R, c.Color.G, c.Color.B))) < similarityRadius); if (similarlyColoredRole == null || allowedRoleColors.Any(c => colorDifference.ComputeDifference(requestedColor, converter.Convert(RGBColor.FromRGB8Bit(c.R, c.G, c.B))) < similarityRadius)) { await role.ModifyAsync(rp => rp.Color = color).ConfigureAwait(false); await ReplyConfirmLocalized("userrolecolor_changed", role.Name, color).ConfigureAwait(false); } else { await ReplyErrorLocalized("userrolecolor_color_too_similar", color, similarlyColoredRole.Name).ConfigureAwait(false); } } else { await ReplyErrorLocalized("userrolecolor_no_binding", role.Name).ConfigureAwait(false); } }
private async Task <DrinkStats> GetDrinkStats() { /** http://www.colorwiki.com/wiki/Delta_E:_The_Color_Difference */ float promR = 0, promG = 0, promB = 0; HashSet <Color> differentColors = new HashSet <Color>(); DynamicParticle[] allObjects = (DynamicParticle[])FindObjectsOfType(typeof(DynamicParticle)); int count = 0; int quantity = allObjects.Length; if (quantity < 10) { return(null); } foreach (DynamicParticle obj in allObjects) { count++; Color color = obj.currentImage.gameObject.GetComponent <MeshRenderer>().materials[0].GetColor("_Color"); promR += color.r; promG += color.g; promB += color.b; differentColors.Add(color); } promR = promR / allObjects.Length; promG = promG / allObjects.Length; promB = promB / allObjects.Length; Color promColor = new Color(promR, promG, promB); foreach (DynamicParticle obj in allObjects) { //Destroy(obj.gameObject); obj.SetColor(promColor); await Task.Delay(10); /** Simula que se toma la wea*/ } var color1 = new LabColor(promR, promG, promB); var color2 = new LabColor(customer.wantedColor.r, customer.wantedColor.g, customer.wantedColor.b); double deltaE = new CIEDE2000ColorDifference().ComputeDifference(color1, color2); drinkStats = new DrinkStats() { preparationTime = Time.time - initialTime, mixture = (differentColors.Count * 100) / quantity, colorSimilarity = (float)deltaE, quantity = quantity, promColor = promColor }; return(drinkStats); }
public void CIEDE2000ColorDifference(double l1, double a1, double b1, double l2, double a2, double b2, double expectedDeltaE) { // arrange var x = new LabColor(l1, a1, b1); var y = new LabColor(l2, a2, b2); // act var deltaE = new CIEDE2000ColorDifference().ComputeDifference(x, y); // assert Assert.Equal(deltaE, expectedDeltaE, DoubleComparerLabRounding); }
private Color CollapseColor(Color color, int colorEqualityDeltaE) { var differ = new CIEDE2000ColorDifference(); var similarColors = _collapsedColors.Where(x => differ.ComputeDifference(ToLabColor(x), ToLabColor(color)) < colorEqualityDeltaE); if (similarColors.Any()) { return(similarColors.First()); } _collapsedColors.Add(color); return(color); }
public void ComputeDifference(double l1, double a1, double b1, double l2, double a2, double b2, double expectedDeltaE) { // arrange var x = new LabColor(in l1, in a1, in b1); var y = new LabColor(in l2, in a2, in b2); // act var deltaE = new CIEDE2000ColorDifference().ComputeDifference(in x, in y); // assert Assert.Equal(expectedDeltaE, deltaE, DoubleComparerLabRounding); }
public void ComputingColorDifference() { // CIE Delta-E 1976 { var differenceCalculator = new CIE76ColorDifference(); var labColor1 = new LabColor(55, 80, 50); var labColor2 = new LabColor(18, 36, -60); var difference = differenceCalculator.ComputeDifference(in labColor1, in labColor2); // 124.1169 Assert.Equal(124.11688039908189, difference); } // CMC l:c 1984 { var differenceThreshold = CMCColorDifferenceThreshold.Acceptability; // or "Imperceptibility" var differenceCalculator = new CMCColorDifference(differenceThreshold); var labColor1 = new LabColor(55, 80, 50); var labColor2 = new LabColor(18, 36, -60); var difference = differenceCalculator.ComputeDifference(in labColor1, in labColor2); // 69.7388 Assert.Equal(69.7387994508022, difference); } // CIE Delta-E 1994 { var application = CIE94ColorDifferenceApplication.GraphicArts; // or "Textiles" var differenceCalculator = new CIE94ColorDifference(application); var labColor1 = new LabColor(55, 80, 50); var labColor2 = new LabColor(18, 36, -60); var difference = differenceCalculator.ComputeDifference(in labColor1, in labColor2); // 60.7882 Assert.Equal(60.78823549707133, difference); } // CIE Delta-E 2000 { var differenceCalculator = new CIEDE2000ColorDifference(); var labColor1 = new LabColor(55, 80, 50); var labColor2 = new LabColor(18, 36, -60); var difference = differenceCalculator.ComputeDifference(in labColor1, in labColor2); // 52.2320 Assert.Equal(52.23202852556586, difference); } // Delta Ez { var differenceCalculator = new JzCzhzDEzColorDifference(); var color1 = new JzCzhzColor(0.3, 0.4, 165); var color2 = new JzCzhzColor(0.8, 0.6, 25); var difference = differenceCalculator.ComputeDifference(in color1, in color2); // 1.0666 Assert.Equal(1.066630832433185, difference); } // Euclidean distance { // example for euclidean distance in the XYZ color space var differenceCalculator = new EuclideanDistanceColorDifference <XYZColor>(); var color1 = new XYZColor(0.5, 0.5, 0.5); var color2 = new XYZColor(0.2, 0.4, 0.6); var difference = differenceCalculator.ComputeDifference(in color1, in color2); // 0.3317 Assert.Equal(0.33166247903553997, difference); } }
public void CIEDE2000ColorDifference(double l1, double a1, double b1, double l2, double a2, double b2, double expectedDeltaE) { // arrange var x = new LabColor(l1, a1, b1); var y = new LabColor(l2, a2, b2); // act double deltaE = new CIEDE2000ColorDifference().ComputeDifference(x, y); // assert Assert.That(deltaE, Is.EqualTo(expectedDeltaE).Using(DoubleComparerLabRounding)); }
static ColorDifferenceAnalyzer() { Ciede2000ColorDifference = new CIEDE2000ColorDifference(); }