Нарисуйте цвет CMYK из RGB

Привет. У меня скрин как выше. С помощью ползунков я получаю красный, зеленый, синий. Кроме того, я рассчитываю голубой, пурпурный, желтый и красный, зеленый, синий для CMYK. Мой вопрос в том, есть ли способ показать цвет CMYK в java, как светло-фиолетовый на картинке.

private void stateChanged() {
      red= sliderRed.getValue();
      green= sliderGreen.getValue();
      blue= sliderBlue.getValue();
      txt_background.setBackground(new Color(red, green, blue));
}

person Ms.Sahin    schedule 27.03.2017    source источник
comment
Ваш вопрос непонятен. Все мониторы RGB. Не существует четкого сопоставления 1: 1 с CMYK, поскольку это сопоставление зависит от многих факторов, таких как размер точки рендеринга, спектр поглощения чернил и целый ряд других факторов, влияющих на рендеринг. Даже в этом случае может быть несколько способов сопоставить RGB с CMYK, а также необходимо учитывать гамму. Непонятно даже, чем ты хочешь заниматься. Если под показать цвет CMYK в java как светло-фиолетовый вы имеете в виду показать, как будет выглядеть цвет CMYK, но на экране это совершенно невозможно сделать с какой-либо надеждой на точность.   -  person Jim Garrison    schedule 27.03.2017
comment
@JimGarrison, но моя задача - разрешить преобразование цветового пространства из RGB в CMYK и CMYK в RGB. Дополнительно реализовать представление выбранного пользователем цвета.   -  person Ms.Sahin    schedule 27.03.2017
comment
По сути, дубликат stackoverflow.com/questions/ 4858131 / Ответом будет преобразование туда и обратно, как это сделано в принятом ответе на связанный вопрос (который также находится в списке справа в разделе «Связанные»). Однако обратите внимание на комментарий от @JimGarrison и внимательно обдумайте его.   -  person Loduwijk    schedule 27.03.2017


Ответы (2)


Мне кажется, что класс цвета java имеет конструктор для создания объекта цвета в cmyk

https://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#Color(java.awt.color.ColorSpace,%20float[],%20float)

а также

https://docs.oracle.com/javase/7/docs/api/java/awt/color/ColorSpace.html

Таким образом, вы получите что-то вроде

Color cmykColorValue = new Color(TYPE_CMYK, [cValue, mValue, yValue, kValue], alpha)

Где альфа - это форма от 0 до 1, а cValue, mValue, yValue, kValue - соответствующие значения cmyk.

Это должно создать новый цветной объект CMYK, который можно использовать везде, где можно использовать цветной объект.

person Derek Hunter    schedule 27.03.2017
comment
Но не ожидайте, что визуализированный цвет CMYK на экране будет похож на напечатанный цвет. CMYK не имеет смысла на дисплее RGB и в лучшем случае лишь в некоторой степени близок к реальному цвету. - person Jim Garrison; 27.03.2017
comment
@JimGarrison Вы правы, в конечном итоге все будет преобразовано в RGB для рендеринга на экране. Мне показалось, что эта задача заключалась в преобразовании между ними, и он в основном просто отрисовывает ее обратно на экран, чтобы убедиться, что преобразование было правильным. - person Derek Hunter; 27.03.2017
comment
Я уверен, что вы правы, но выводить его обратно на экран, чтобы убедиться, что преобразование было правильным, бессмысленно из-за проблем с отображением и гаммой. Это может выглядеть правильно на экране, но ужасно плохо на светоотражающих материалах. - person Jim Garrison; 27.03.2017
comment
Я имею в виду .. это должно быть достаточно близко для быстрого визуального осмотра. Если у него есть синий цвет в rgb от ползунков, и он запускает это преобразование, он не должен получить ярко-розовый цвет при рисовании его версии CMYK. Мол, вы правы, что в конверсии есть неточности, но вполне вероятно, что она будет «достаточно близкой» - person Derek Hunter; 27.03.2017

Правильное использование конструктора цвета для CMYK выглядит следующим образом:

java.awt.Color cmyk = new Color(ColorSpace.getInstance(ColorSpace.TYPE_CMYK), new float [] {cyan,magenta,yellow}, key/alpha);
person Lonzak    schedule 14.12.2018