java - Java 中的颜色检测器

标签 java colors

我有十六进制格式的颜色列表(例如#000000),我想检测颜色类型(蓝色、红色、绿色等),然后将颜色类型更改为另一种颜色类型。这可能吗?是否有任何框架/库可以完成此任务?

示例:

我有颜色#EB1369(红色),然后将其转换为蓝色,例如变成#1313EB(蓝色)。

最佳答案

这是一个可以让您围绕色相环移动颜色的函数。您应该阅读有关 HSB(或 HSV)颜色系统的维基百科页面,以真正了解正在发生的事情:http://en.wikipedia.org/wiki/HSV_color_space

/** Converts an input color given as a String such as "ab451e" to
 * the HSB color space. Shifts its hue from the given angle in degrees. 
 * Then returns the new color in the same format it was given.
 * 
 *  For example shift("ff0000", 180); returns "80ff00" (green is the opposite of red).*/
public static String shift(String rgbS, int angle) {        
    // Convert String to integer value
    int value = Integer.parseInt(rgbS, 16);

    // Separate red green and blue
    int r = value >> 16;
    int g = (value >> 8) & 0xff;
    int b = value & 0xff;

    // Convert to hsb
    float[] hsb = Color.RGBtoHSB(r, g, b, null);

    // Convert angle to floating point between 0 and 1.0
    float angleF = (float)(angle/360.0);

    // Shift the hue using the angle.
    float newAngle = hsb[0] + angleF;
    if(newAngle > 1.0)
        newAngle = newAngle - 1.0f;
    hsb[0] = newAngle;

    // Convert back to RGB, removing the alpha component
    int rgb = Color.HSBtoRGB(hsb[0], hsb[1], hsb[2]);
    rgb = rgb & 0xffffff;

    // Build a new String
    return Integer.toHexString(rgb);
}

检测颜色可能很复杂,这取决于您真正期望的结果。

如果您想要的只是一个近似值(红色、绿色、蓝色、黄色等),那么您可以查看 HSB 颜色空间的色相环,为您想要定义的每种颜色选择一个色相值,然后将输入中获得的颜色映射到您选择的最接近的颜色。

您还可以依赖诸如命名 HTML 颜色之类的东西:http://www.w3schools.com/html/html_colornames.asp 。获取此列表,在程序中创建一个映射,然后您所要做的就是将获得的颜色映射到映射中最接近的颜色,并返回其名称。但要小心:计算两种颜色之间的距离可能很棘手(尤其是在 RGB 中),而简单的方法(例如逐 channel 差异)可能会产生令人惊讶的糟糕结果。比色法是一个复杂的主题,您可以在此页面上找到很好的方法:http://en.wikipedia.org/wiki/Color_difference

关于java - Java 中的颜色检测器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9394400/

相关文章:

java - 无法使用 IP 地址连接到 MySQL 服务器

java - Rhino:原型(prototype)链接不适用于宿主对象?

Java - 更改使用 Graphics2D 创建的一些正方形的颜色

java - 从传入对象构造函数的 lambda 访问对象

java - 如何使用从 JSON 文件中提取的数据更新主页小部件

java - 使用 Dropwizard 提供静态资源

python - 如何使用 python 和 win32 api 将彩色文本写入文本框?

css - 使用纯 CSS(无 javascript)生成随机颜色?

css - 为什么 CSS hsl 分配需要后备颜色?

java - 如何更改 Java 小程序的背景颜色?