Для приложения, над которым я работаю, я пытаюсь создать и сравнить (расстояние между) CIE Lab профилированных цветов.
Я знаю, что есть способов преобразования от типичной RGB до Lab с некоторой математикой, но я бы хотел сделать это более элегантным способом, если это возможно.
Создание цветов CIE LAB
До сих пор я пробовал следующее… (Белые / черные точки и номера диапазонов взяты из здесь )
const CGFloat *components = CGColorGetComponents([UIColor colorWithRed:.11 green:.33 blue:.55 alpha:1.0].CGColor);
float whitePoint[3] = {0.95, 1.0, 1.09};
float blackPoint[3] = {0.0,0.0,0.0};
float range[4] = {-127.0,127.0,-127.0,127.0};
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateLab(whitePoint, blackPoint, range);
[self.someArray addObject:[UIColor colorWithCGColor:CGColorCreate(colorSpaceRef, components)]];
IЯ не уверен, что это правильный способ создания цветов в этом пространстве, тем более что пространство RGB, используемое UIColor, более ограничено, чем Lab в первую очередь!Кроме того, при преобразовании из CGColor в UIColor я теряю свое цветовое пространство в процессе?( самое большое цветовое пространство на изображении - LAB )
Еще нужно подумать о том, могут ли экраны iDevice правильно отображать цвета Lab (поскольку их пиксели используют RGB)?
По сути то, что я ищу, это правильный способ генерировать случайные цвета внутри пространства Lab.
Сравнение CIELAB Colors
Затем, получив эти лабораторные цвета, я могу получить три значения ( L , a и b ) длявычислить расстояние между одним цветом и другим?После того, как я создал цвет и инкапсулировал его в UIColor, будет ли чтение и сравнение CGComponents UIColor поддерживать точность, которую я ищу?(Я делал это раньше в пространстве RGB, взяв евклидово расстояние, и здесь должно быть то же самое понятие, , за исключением того, что расстояние будет учитывать человеческие восприятия , чтоэто то, к чему я стремлюсь.)
Если вы прочитали это далеко, я благодарю вас и благодарю за любой вклад, который вы можете получить, или за аналогичный опыт, которым вы можете поделиться!