作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想输入一个 6 位数字(RGB 十六进制),然后单击按钮以显示颜色的名称。我没有在java中找到颜色库来给我任意颜色的名称。
所以我所做的是:我在 javascript this is the ntc js lib 中找到了这个库并尝试在 java 中重新实现它,因此我定义了一个 HashMap 并将每个值与名称一起放置,例如:
sColorNameMap.put("B43332", "读得好");
当给定与我放入 HashMap 中的相同键时,代码运行正常,例如,当我写入值 B43332 时,我会得到 Well Read 作为颜色名称。
我的问题:当我输入的值不等于我按下的键时,我无法获取颜色名称。
我需要什么:我需要一个函数来返回最接近匹配颜色的名称。我试图理解 ntc 是如何做到的,但我做不到。
例如,值 B23634
未在 ntc js lib 中预定义,但它解析为名称 Well Read ,如下所示图片 : 因此,任何有助于实现返回某种颜色最接近值(6 位数字)的函数的帮助都是值得赞赏的。
最佳答案
如果您认为最接近的匹配颜色是 3 维 RGB 空间中最接近的颜色,则可以使用如下内容:
(查看this以获取有关如何计算该距离的信息)
public static void main(String[] args) {
Map<String, String> sColorNameMap = new HashMap<>();
String rgbCode = "B23634";
String colorName;
if (sColorNameMap.containsKey(rgbCode)) {
colorName = sColorNameMap.get(rgbCode);
} else {
colorName = nearestColor(rgbCode, sColorNameMap);
}
System.out.println("colorName = " + colorName);
}
private static String nearestColor(String code, Map<String, String> sColorNameMap) {
int[] rgb = getRgb(code);
double nearestDistance = Double.MAX_VALUE;
String nearestNamedColorCode = null;
for (String namedColorCode : sColorNameMap.keySet()) {
int[] namedColorRgb = getRgb(namedColorCode);
double distance = calculateDistance(rgb, namedColorRgb);
if (distance < nearestDistance) {
nearestDistance = distance;
nearestNamedColorCode = namedColorCode;
}
}
return sColorNameMap.get(nearestNamedColorCode);
}
private static int[] getRgb(String code) {
int r = Integer.parseInt(code.substring(0, 2), 16);
int g = Integer.parseInt(code.substring(2, 4), 16);
int b = Integer.parseInt(code.substring(4, 6), 16);
return new int[]{r, g, b};
}
private static double calculateDistance(int[] rgb1, int[] rgb2) {
double sum = 0.0;
for (int i = 0; i < 3; i++) {
sum += Math.pow(rgb2[i] - rgb1[i], 2);
}
return Math.sqrt(sum);
}
如果您有一些其他最接近匹配颜色的指标,只需更改 calculateDistance()
方法中的实现即可。
关于javascript - 如何在java中为颜色设置范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48127353/
我是一名优秀的程序员,十分优秀!