示例#1
0
    public void BlendRgbColors()
    {
        var color1 = RGBColor.FromRGB8Bit(255, 0, 0);
        var color2 = RGBColor.FromRGB8Bit(0, 0, 255);

        var rgbToLinear = new ConverterBuilder().FromRGB().ToLinearRGB().Build();

        var linear1 = rgbToLinear.Convert(color1);
        var linear2 = rgbToLinear.Convert(color2);

        var linearBlend = new LinearRGBColor(
            (linear1.R + linear2.R) / 2,
            (linear1.G + linear2.G) / 2,
            (linear1.B + linear2.B) / 2);

        var linearToRgb = new ConverterBuilder().FromLinearRGB().ToRGB().Build();

        var blend = linearToRgb.Convert(linearBlend);

        blend.ToRGB8Bit(out var r, out var g, out var b);

        Assert.Equal(188, r);
        Assert.Equal(0, g);
        Assert.Equal(188, b);
    }
示例#2
0
    public void HowToComputeTemperatureOfAColor()
    {
        RGBColor color = RGBColor.FromRGB8Bit(255, 121, 0);
        IColorConverter <RGBColor, xyChromaticity> converter = new ConverterBuilder().FromRGB(RGBWorkingSpaces.sRGB).Toxy(Illuminants.D65).Build();
        xyChromaticity chromaticity = converter.Convert(color); // xy [x=0.55, y=0.4]

        // asserts
        Assert.Equal(0.55117772083302841, chromaticity.x, DoubleComparer);
        Assert.Equal(0.40053533933847751, chromaticity.y, DoubleComparer);

        double temperature = CCTConverter.GetCCTOfChromaticity(chromaticity); // 1293 K

        // asserts
        Assert.Equal(1293.0206041090441, temperature, DoubleComparer);
    }
示例#3
0
    public void SamplesRgb()
    {
        // red
        var c1 = new RGBColor(0.937, 0.2, 0.251);
        var c2 = RGBColor.FromRGB8Bit(239, 51, 64);
        var c3 = RGBColor.FromColor(Color.FromArgb(239, 51, 64));

        // gray
        var c4 = new RGBColor(0.5, 0.5, 0.5);
        var c5 = RGBColor.FromGray(0.5);

        // white
        var c6 = new RGBColor(1, 1, 1);

        // black
        var c7 = new RGBColor(0, 0, 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);
                }
            }
示例#5
0
 public RGBColor ToRGBColor()
 => RGBColor.FromRGB8Bit(Red, Green, Blue);