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); }
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); }
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); } }
public RGBColor ToRGBColor() => RGBColor.FromRGB8Bit(Red, Green, Blue);