Есть ли способ Cocoa Touch для преобразования цветов из одного цветового пространства в другое?
В конце этого кода:
UIColor *grey = [UIColor colorWithWhite: 0.5 alpha: 1.0];
CGColorRef greyRef = [grey CGColor];
int x = CGColorGetNumberOfComponents(greyRef);
... x
равно 2.
Причина, по которой мне это нужно, я пытаюсь скопировать цвета в список цветных компонентов для CGGradientCreateWithColorComponents
, которым нужны все цвета в одном цветовом пространстве. Проблема в том, что серый цвет находится в оттенке серого, а не в RGB. (В настоящее время имя ускользает от меня, но это не важно.)
CGGradientRef createGradient(NSInteger inCount, NSArray* inColors, CGFloat* inLocations) {
CGColorSpaceRef theColorspace = CGColorSpaceCreateDeviceRGB( );
size_t numberOfComponents = 4;
NSInteger colorSize = numberOfComponents * sizeof( CGFloat );
CGFloat *theComponents = malloc( inCount * colorSize );
CGFloat *temp = theComponents;
for ( NSInteger i = 0; i < inCount; i++ ) {
UIColor *theColor = [inColors objectAtIndex: i];
CGColorRef cgColor = [theColor CGColor];
const CGFloat *components = CGColorGetComponents( cgColor );
memmove( temp, components, colorSize );
temp += numberOfComponents;
}
CGGradientRef gradient = CGGradientCreateWithColorComponents( theColorspace,
theComponents, inLocations, inCount );
CGColorSpaceRelease( theColorspace );
free( theComponents );
return gradient;
}
Я знаю, что я могу искать цвета в цветовом пространстве оттенков серого и преобразовывать их. Но это решает только один случай. От поиска по этому вопросу, я думаю, HSB также обрабатывается. Но я хотел бы написать здесь какой-нибудь код и никогда больше не думать об этом, а значит, поддерживать не только цветовые пространства, которые есть сейчас, но и все, что Apple может добавить в будущем. Мне повезло?