Map<Integer, String> map = new HashMap<Integer, String>();
for (Field f : Color.class.getFields()) {
if (f.getType() == Color.class) {
Color c = (Color) f.get(null);
map.put(c.getRGB(), f.getName());
}
}
//array of known aliases and rgb values
ArrayList colorList = new ArrayList();
colorList.add(new String[] {"255", "0", "0", "Red"});
//etc...
Color c = new Color(255, 0, 0); //test color
String name = "Unknown";
for (String[] color : colorList)
{
int r = Integer.parseInt(color[0]) //red value
int g = Integer.parseInt(color[1]) //green value
int b = Integer.parseInt(color[2]) //blue value
String alias = color[3];
if ((c.getRed() == r) && (c.getGreen() == g) && (c.getBlue() == b))
{
name = alias; //found it
break;
}
}
public static String getColourName(int c) {
String name = "UNKNOWN";
int colour = Color.BLACK;
if(Color.red(c) > 127) { colour |= Color.RED; }
if(Color.green(c) > 127) { colour |= Color.GREEN; }
if(Color.blue(c) > 127) { colour |= Color.BLUE; }
switch (colour) {
case Color.BLACK:
name = "BLACK";
break;
case Color.BLUE:
name = "BLUE";
break;
case Color.GREEN:
name = "GREEN";
break;
case Color.CYAN:
name = "CYAN";
break;
case Color.RED:
name = "RED";
break;
case Color.MAGENTA:
name = "MAGENTA";
break;
case Color.YELLOW:
name = "YELLOW";
break;
case Color.WHITE:
name = "WHITE";
break;
}
return name;
}
8条答案
按热度按时间wfypjpf41#
下面是a working sample code,它将rgb/hex值/awt颜色转换为最接近的颜色名称。
rjzwgtxy2#
1.填充“已知”颜色的列表。
1.对于每个已知颜色计算:
1.返回
rgbDistance
最小的colorI
的名称。2cmtqfgy3#
嗯,这是个有趣的问题。我能想到几个解决办法:
1.您可以根据R-G-B值之间的关系进行一些猜测(例如,如果一种颜色非常占主导地位,则猜测该颜色,但如果存在一点其他颜色,则越来越有可能猜测这两种发射颜色的组合,如果所有三种颜色接近相等,则根据三个值的平均值的高低猜测白色、灰色或黑色,如果两个是高的,另一个是低的,猜测这两个的组合,等等。
1.你可以采用一种更学习的方法,你可以设置一些初始猜测(如上所述),然后根据用户的反馈进行改进。
不幸的是,这个问题是相对主观的(尽管问题不是!),因为人们对颜色的感知在文化甚至性别之间差异很大(见Randall Munroe's "study" on it)。
如果你想要RGB值的一个特定子集(比如在Java或C#中给定常量的那些,你可以迭代每个值并进行比较,如果它不等于任何一个值,最后返回一些默认值)。
[编辑]
啊!色盲用户啊?你有没有考虑过创建一个设置,让用户指定他们难以区分的颜色?如果你这样做了,你可以让他们知道某个东西“比绿色红20%”(如果,例如,他们有红绿色盲,这是最常见的)。这将是非常简单的。他们选择一个像素,你遵循以下伪代码:
这可能是一个更简单,更有用的解决方案。
bd1hkmkf4#
您可以简单地构建一个查找表,例如使用Color类本身的常量:
如果你想要所有的HTML颜色或者所有那些由@evan链接的维基百科,你还有一点功课要做。
编辑结果图:
jecbmhm35#
并非所有RGB值都有别名。您可能需要创建一个包含Red、绿色、Blue和Alias值的数组。然后您将迭代该数组以比较RGB值。
http://en.wikipedia.org/wiki/List_of_colors
编辑:
样品:
wvt8vs2t6#
首先将像素从RGB转换为HSV。在HSV中定义颜色范围比在RGB中容易得多。
zu0ti5jz7#
31moq8wy8#
在我的情况下,我正在寻找一种快速的方法来获得所有打开或所有关闭LED上显示的原色名称,因此以下函数适用于我。希望它对某人有帮助。