コード例 #1
0
            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);
                }
            }
コード例 #2
0
    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);
    }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
    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);
    }
コード例 #6
0
    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);
        }
    }
コード例 #7
0
        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));
        }
コード例 #8
0
 static ColorDifferenceAnalyzer()
 {
     Ciede2000ColorDifference = new CIEDE2000ColorDifference();
 }