JColorChooser представляет Hue, Saturation и Value в виде целых чисел. Как получить эти значения из объекта Color?
Я использую Java Swing JColorChooser в цветовом пространстве HSV. Этот виджет использует счетчики для настройки цвета. Оттенок 0-360, насыщенность 0-100 и значение 0-100. Я могу только вернуть значения с плавающей точкой, хотя для значений компонентов. Я хочу отобразить значения компонентов в метке после того, как пользователь выберет цвет, но я не могу понять, как получить те же значения, что и в JColorChooser. Мой код:
private String getColorString(Color color)
{
float[] comp = color.getColorComponents(chooser.getColorModel().getColorSpace(),
null);
return comp[0] + ", " + comp[1] + ", " + comp[2];
}
Когда мой инструмент выбора цвета показывает HSV 180,50,50, мои значения компонентов равны 0,24938,0,49749,0,49793.
Я понимаю, что запрашиваю массив float из цвета, но нет таких методов, как getHue().
2 ответа
Чтобы получить HSB (такой же, как HSV) из jColorChooser, вы можете использовать Color.RGBtoHSB() следующим образом.
Color c = jColorChooser1.getColor();
float[] comp = new float[3];
Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(), comp);
comp[0]*= 360;
comp[1]*= 100;
comp[2]*= 100;
return comp[0]+", "+comp[1]+", "+comp[2];
или в вашем методе вы можете реализовать это так
private String getColorString(Color color)
{
float[] comp = new float[3];
Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), comp);
comp[0]*= 360;
comp[1]*= 100;
comp[2]*= 100;
return comp[0]+", "+comp[1]+", "+comp[2];
}
Я знаю, что есть небольшая разница в значении, которое мы даем, и в значении, которое мы возвращаем, но вы не можете быть более точными, чем это!
Вызов Color.RGBtoHSB()
используя компоненты RGB Color
Получено от выбора, как показано здесь.