我试图创建一个方法,接受一个随机的颜色值,然后检查它最接近的原色。
我想我必须比较它的RGB值,看看它在那些原色的范围内,然后将它设置为红色、黄色或蓝色等。
最好的方法是什么?谢谢
编辑此问题标记为重复,但我检查了上述重复问题的其他答案,但它没有提供我想要的答案。
使用公式
d = sqrt((r2-r1)^2 + (g2-g1)^2 + (b2-b1)^2)
有时,不同的颜色会产生相同的值。例如,输入颜色为R170:G0:B255
。白色R255:G255:B255
和红色R255:G0:B0
之间的距离使用公式生成(int)269。那么哪个颜色更接近,红色还是白色?我从列表中删除了黑色和白色,但其他一些颜色仍然存在问题。
我正在比较几种颜色,例如:黑、白、红、青柠。蓝色,黄色,青色。此处RGB颜色表中列出的洋红色和灰色rapidtables。com/web/color/RGB_color。htm
如果你想在两种颜色之间进行真正的比较,你不应该使用RGB颜色空间。它不适合计算颜色。
您最好的选择是将其转换为LAB颜色空间。实验室空间
要实现这一点,您需要将RGB值转换为XYZ值,然后将其转换为实验室值。您可以在以下网站上找到相关计算:Bruce Lindbloom
当你有实验室的颜色,你可以选择一个不同的公式。最简单的是CIE74,但是如果你想要最准确的结果,你需要使用CIEDE2000。差异公式
我在过去5个月的一个项目中使用了这些公式,所以如果你需要任何帮助,请告诉我。
我面前没有IDE,但这里是我的伪评论(如有必要,可以稍后更新)
var closestColor
Get vector magnitude of( myR + 255, myG, myB)
set closestColor to Red
Get vector magnitude of( myR , myG+ 255, myB)
If(Green is closer than red)
set closestColor to Green
Get vector magnitude of( myR , myG, myB + 255)
If(Blue is closer than closestColor)
set closestColor to Blue
Return closest color
使现代化
我用扩展做了一个快速的linq示例
public static double VectorMagnitude(this Color c, Color otherC)
{
return Math.Sqrt(((int)(c.R + otherC.R))^2 +
((int)(c.G + otherC.G))^2 +
((int)(c.B + otherC.B))^2);
}
private static List<Color> Colors()
{
return new List<Color>()
{
Color.Red,
Color.Blue,
Color.FromArgb(0,255,0)
};
}
var l = Colors().OrderBy(x => x.VectorMagnitude(
Color.FromArgb(255, R, G, B))).FirstOrDefault();
我需要一个javafx程序来设置文本的随机颜色和不透明度,我不知道该怎么做?下面是我的代码示例
我已经使用nvd3很长时间了。在nvd3中,我们可以选择指定自动图形填充颜色。 如何在Chart.js图形中填充随机颜色,而不在数据集中定义每种颜色? 我不想使用JavaScript函数生成并从中获取随机颜色。我需要类似nvd3的东西 如果有可能的话,请帮助我。
问题内容: 鉴于此功能,我想更换 颜色 与颜色随机发生器。 我该怎么做? 问题答案: 使用代替:
有没有一种方法可以轻松地将给定的十六进制颜色代码分配给更一般的类别(红色、绿色、蓝色、黄色、橙色、粉色、黑色、白色、灰色...)? 比如- 编辑:甚至与adobe photoshop类似,找到最接近的网络安全颜色,这样可以将颜色数量减少到256种,这已经是一个很好的解决方案了!
本文向大家介绍JavaScript随机生成颜色的方法,包括了JavaScript随机生成颜色的方法的使用技巧和注意事项,需要的朋友参考一下 废话不多说了直接给大家贴js代码了,具体代码如下所述: 以上所述是小编给大家介绍的JavaScript随机生成颜色的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对呐喊教程网站的支持!
生成一个随机的十六进制颜色代码。 使用 Math.random 生成一个随机的24位(6x4位)十六进制数。 使用位操作符,然后使用 toString(16) 将其转换为十六进制字符串。 const randomHexColorCode = () => { let n = ((Math.random() * 0xfffff) | 0).toString(16); return '#' +