Моя конечная цель - преобразовать RGB в CIELAB, выполнить некоторое усреднение цвета, а затем преобразовать обратно.Таким образом, я предполагаю, что если из-за обстоятельств во время выполнения есть только один входной сигнал цвета, то есть без усреднения , то выходной сигнал преобразования должен быть точно таким же, как входной сигнал RGB, но это недело.
Цветовое пространство CIELAB использует промежуточное преобразование в цветовое пространство CIEXYZ (которое является частью JDK).Это преобразование кажется необратимым или с потерями?Это правильно?Или что-то не так с моими предположениями или реализацией?Должен ли я использовать другой метод для работы с этими цветами?
Тест и вывод ниже.Почему rgb и rgb2 не одного цвета?
private static final ColorSpace CIEXYZ =ColorSpace.getInstance(ColorSpace.CS_CIEXYZ);
@Test
public void testCiexyz() {
float[] rgb = new float[] {0.15686275f, 0.2f, 0.20784314f};
LOGGER.debug("rbg: {}",rgb);
float[] xyz = CIEXYZ.fromRGB(rgb);
LOGGER.debug("xyz: {}",xyz);
float[] rgb2 = CIEXYZ.toRGB(xyz);
LOGGER.debug("rbg2: {}",rgb2);
}
Вывод
09:46:59.762 [main] DEBUG org.phomos.sampler.ColorTest - rbg: [0.15686275, 0.2, 0.20784314]
09:46:59.875 [main] DEBUG org.phomos.sampler.ColorTest - xyz: [0.02709961, 0.030670166, 0.0289917]
09:46:59.911 [main] DEBUG org.phomos.sampler.ColorTest - rbg2: [0.12155337, 0.1400473, 0.1430228]