В Quartz 2D функция CGColorSpaceCreateLab()
принимает параметр range
, определенный следующим образом:
CGFloat range [4]: Массив из 4 чисел, которые задают диапазон допустимых значений для компонентов a * и b * цветового пространства. Компонент a * представляет значения от зеленого до красного, а компонент b * представляет значения от синего до желтого.
Вопрос в том, что этот параметр на самом деле делает ?
Я могу вспомнить как минимум три возможных сценария.
Вариант 1: возможно, он масштабирует значения компонентов
Допустим, у меня есть два цветовых пространства с разными диапазонами:
CGFloat range1[] = { -10, 10, -10, 10 };
CGFloat range2[] = { -100, 100, -100, 100 };
CGColorSpaceRef space1 = CGColorSpaceCreateLab(whitePoint, blackPoint, range1);
CGColorSpaceRef space2 = CGColorSpaceCreateLab(whitePoint, blackPoint, range2);
Я создаю цвета с одинаковыми значениями компонентов и в пределах указанного диапазона каждого пробела:
CGFloat components[] = { 50, 10, 10, 1 };
CGColorRef color1 = CGColorCreate(space1, components);
CGColorRef color2 = CGColorCreate(space2, components);
color1
и color2
представляют один и тот же цвет? Или параметр range
каким-то образом масштабирует компоненты, делая эти два разных цвета? (Если последнее, какое значение для range
соответствует стандартному CIELAB масштабированию координат?
Вариант 2: возможно, он обрезает значения компонентов
Учитывая два пробела, определенных выше, скажем, я вместо этого создаю следующие цвета:
CGFloat components[] = { 50, 50, 50, 1 };
CGColorRef color1 = CGColorCreate(space1, components);
CGColorRef color2 = CGColorCreate(space2, components);
Теперь color1
и color2
представляют один и тот же цвет? Или параметр range
обрезает компоненты color1
до {50, 10, 10, 1}? (Если последнее, в чем смысл? Чрезвычайно грубое приближение определения гаммы? Обеспечение того, чтобы значения оставались в пределах диапазона, совместимого с другим типом данных?)
Вариант 3: Возможно, он используется в другом месте, например, при отображении гаммы с целью восприятия рендеринга
Наличие некоторого представления о диапазоне ожидаемых значений L * a * b * может помочь с отображением гаммы, особенно в случае восприятия, но, опять же, это кажется таким грубым приближением, что я не понимаю, почему быть особенно полезным.
Вариант 4: что-то еще?