我有十六进制格式的颜色列表(例如#000000),我想检测颜色类型(蓝色,红色,绿色等),然后将颜色类型更改为另一种颜色类型。这是可能的,是否有任何框架/库用于此任务?
示例:
我有颜色#EB1369(红色)然后我将其转换为蓝色,它变为例如#1313EB(蓝色)。
答案 0 :(得分:1)
尝试将RGB值转换为HSV(准确地说是HSB) - 它是适合人类使用的颜色的格式。转换后,您需要做的就是更改H V(可能)并将其转换回RGB。
答案 1 :(得分:1)
这是一个可以让你在色调圈周围移动颜色的功能。您应该阅读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中),而天真的方法(例如逐个通道的差异)可能会产生令人惊讶的糟糕结果。比色法是一个复杂的主题,您可以在此页面找到好的方法:http://en.wikipedia.org/wiki/Color_difference
答案 2 :(得分:0)
我猜您想将RGB颜色转换为HSB。你可以做到这一点:
java.awt.Color.RGBtoHSB(...)
然后您可以轻松确定H值是否适合您的蓝色定义,并将其修改为您喜欢的任何内容。在此之后,您可以通过以下方式轻松将其转换回RGB:
java.awt.Color.getHSBColor(...)
如果你不喜欢jawa.awt.color只是通过transofrmation矩阵乘以颜色矢量。
答案 3 :(得分:0)
每个HEX Color中有三个部分,红色,绿色和蓝色#
标识HEX颜色,以下两个字母是红色;接下来的两个是绿色,接下来的两个是蓝色。即:RGB
这两个字母的最大十六进制值FF
为255,最小值为00
为零。
所以你可以这样说,我想要一个带有2个红色部分,7个绿色部分和零蓝色部分的颜色,它们会给你#020700
这就是#FFFFFF
为白色(所有颜色在一起)和#000000
为黑色(根本没有颜色)的原因
使用此逻辑,您可以以任何方式修改颜色; Color
课程也可以提供很多帮助。