【问题标题】:Get color name from hex code in java从java中的十六进制代码获取颜色名称
【发布时间】:2012-06-21 04:40:33
【问题描述】:

我正在使用 java 来找出图像中对象的颜色。 我从 imgae 获得了一个像素,然后能够获得该像素的 r,g,b 值。

现在,我想知道这个像素属于哪个颜色。所以我创建了一个映射十六进制代码到颜色名称的映射。现在,我遍历地图并找出地图中所有条目的最短距离,以及与像素距离最小的一个条目,我将该颜色分配给像素。

这是我的一些代码:-

private static String getColorName(int[] rgb) {
    Map<String, String> data = new HashMap<String, String>();
    data.put("00ff00", "GREEN");
    data.put("ff0000", "RED");
    data.put("0000ff", "BLUE");

    data.put("00ffff", "CYAN");
    data.put("ffff00", "YELLOW");
    data.put("ff00ff", "PINK");

    data.put("c8c8c8", "LIGHT GREY");
    //data.put("808080", "GREY");
    data.put("ffc800", "ORANGE");
    data.put("4F3E86", "PURPLE");

    data.put("000000", "BLACK");
    data.put("ffffff", "WHITE");

    String hex = "0123456789abcdef";

    int minD = 256*256*256;
    String res = "";

    for (String key : data.keySet()) {
        int r = hex.indexOf(key.charAt(0))*16 + hex.indexOf(key.charAt(1));
        int g = hex.indexOf(key.charAt(2))*16 + hex.indexOf(key.charAt(3));
        int b = hex.indexOf(key.charAt(4))*16 + hex.indexOf(key.charAt(5));

        int distance = (Math.abs(rgb[0] - r)) + 
                (Math.abs(rgb[1] - g)) + 
                (Math.abs(rgb[2] - b));

        if (distance < minD) {
            res = data.get(key);
            minD = distance;
        }
    }
    return res;
}

现在问题来了,

如您所见,距离函数是:- D = |r1-r2| + |g1-g2| + |b1-b2|其中 |x|表示 abs(x) 函数 我的黄色被映射到灰色。经过一番调试,我发现了这个。 我应该选择什么距离函数或如何改进我的映射?

在 java 中是否有任何内置的东西可以做到这一点? 感谢您的建议

【问题讨论】:

  • 你只是想得到web-safe colors吗?
  • 如需尽快获得更好的帮助,请发帖SSCCE。热链接到一个小(以字节为单位)图像或在内存中生成一个。
  • 我只想命名一个像素,它看起来是红色的或看起来是黄色的。我只想用常用的10-15种颜色..
  • 那么.. 有机会很快看到 SSCCE 吗?

标签: java colors


【解决方案1】:

Color 有一个接受 rgb 值的构造函数,所以:

g.setColor( new Color(0x00, 0x00, 0xff) );

来源是:Class Color

【讨论】:

  • g 可能代表一个 Graphics 实例 - 这意味着这个答案错过了您问题的重点,即如何确定颜色子集,无论是表示为整数还是十六进制.
猜你喜欢
  • 2017-01-26
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 2015-04-12
  • 2011-10-25
  • 2015-04-12
  • 1970-01-01
相关资源
最近更新 更多