Вероятно, лучшим способом было бы перебрать каждую константу и сравнить их соответствующие каналы RGB (getRed
, getGreen
, getBlue
). Следите за ближайшим.
Color color = new Color(...);
Color[] constantColors = new Color[] { Color.black, Color.blue, Color.cyan, Color.darkGray, Color.gray, Color.green, Color.lightGray, Color.magenta, Color.orange, Color.pink, Color.red, Color.white, Color.yellow };
Color nearestColor = null;
Integer nearestDistance = new Integer(Integer.MAX_VALUE);
for (Color constantColor : constantColors) {
if (nearestDistance > Math.sqrt(
Math.pow(color.getRed() - constantColor.getRed(), 2)
- Math.pow(color.getGreen() - constantColor.getGreen(), 2)
- Math.pow(color.getBlue() - constantColor.getBlue(), 2)
)
) {
nearestColor = color;
}
}
Нет, вы не можете добавить цветовые константы в класс, но вы можете создать собственный класс для хранения констант.
class MyColors {
public static final Color heliotrope = new Color(...);
}
Редактировать: добавлен алгоритм различий, благодаря ссылке @ Теда.