Есть несколько вопросов, которые задают вопрос о преобразовании цветов между цветами на платформах Apple. К сожалению, ответы довольно часто включают классы NSColor
или UIColor
- не переносимые Objective-C, которые не могут быть взаимозаменяемы для OS X и iOS.
Поэтому я хотел бы спросить очень конкретную вещь, что я уверен, там должен быть хороший ответ. Я просто не могу поверить, что Apple не предвидит необходимости в этом.
Как преобразовать CGColor
из одного цветового пространства (например, монохромного) в другой (например, RGB) общим способом, поддерживая все типы CGColorSpace
, используя только переносимые функции Core Graphics?
В некотором контексте. Мне нужно умножить значение, предоставляемое онлайн-службой, со значением, хранящимся в UIColor
. Правильный способ извлечения компонентов RGB до iOS5, который, наконец, ввел метод -[UIColor getRed:green:blue:alpha:]
, заключается в использовании CGColorGetComponents()
. Затем я умножу этот цвет на цвет, полученный из онлайн-сервиса. Это не удается, если +[UIColor grayColor]
был использован для генерации UIColor
. Смысл, мне нужно преобразовать цвет из цветового пространства оттенков серого в RGB. В этом случае это легко. Как насчет другого цветового пространства? Или что, если в теоретическом будущем сценарии я просто хочу обработать один пиксельный цвет?
Есть предположение, что я рисую пиксель в контексте растрового изображения, а затем читаю этот пиксель. Это безумие, и я надеюсь, что это не единственный способ сделать это. Очевидно, что метод рисования может определить, как выполнить преобразование; как мы можем использовать это без создания растрового контекста исключительно для рисования пикселя?
Дополнительные исследования:
- В этой статье о преобразовании цвета, кроме
UIColor
недокументированного/приватного метода-styleString
, более интересно упоминается также недокументированныйCGColorTransform
s. - ColorCG.cpp из WebKit предполагает наличие заголовка с именем
CoreGraphics/CGColorTransform.h
. К сожалению, этот заголовок не существует, по крайней мере, не для Mountain Lion. Почему Apple скрывает эти API? - Единственным другим разумным ресурсом, который я нашел упоминанием
CGColorTransform
, является FreeQuartz, повторная реализация Core Graphics без свободного/открытого источника.
Подал радар с Apple, № 12141580, чтобы открыть и занести документ CGColorTransform
. Я не задерживаю дыхание, поэтому, если есть другие разумные предложения, я все уши.