Есть ли какой-нибудь метод в Какао, который помогает перебирать все значения NSColor (только R,G,B, альфа не затрагивается)?

Мне нужна функция, которая для заданных значений R,G,B возвращает следующий цвет.

Говоря следующий цвет, я имею в виду цвет, который один из компонентов меняет на 1(при условии, что значения R,G,B находятся в диапазоне 0-255).

Он должен быть построен таким образом, чтобы, начиная с белого цвета (или, альтернативно, черного), вы могли перебирать все цвета (число которых составляет 255*255*255). Было бы неплохо, но не обязательно, чтобы после перебора всех цветов они повторялись с самого начала.

2 ответа

Решение

Вы можете использовать поиск цветов в списках цветов, используя пользовательский или Apple, например "Web Safe Colors":

NSColorList* cl = [NSColorList colorListNamed:@"Web Safe Colors"];
NSLog(@"%@", cl);
for (NSString *key in [cl allKeys]) { 
    NSLog(@" * %@ - %@", key, [cl colorWithKey:key]);
}

Если вам нужно больше и порядок не имеет значения, вы можете использовать, например, +colorWithColorSpace:components:count::

uint32_t c = 0;
// increment c whenever a color is requested ...

CGFloat components[4] = { 
    ((c & 0xFF0000) >> 16) / 256.0, 
    ((c & 0x00FF00) >> 8 ) / 256.0,
    ((c & 0x0000FF) >> 0 ) / 256.0,
    0.0 
};
NSColor *color = [NSColor colorWithColorSpace:[NSColorSpace genericRGBColorSpace] 
                                   components:components 
                                        count:4];

Непонятно, что вы имеете в виду под "следующим цветом", но вы можете легко иметь счетчик, из которого вы извлекаете компоненты:

uint32 color = 0;

uint8 r = color%256;
uint8 g = (color/256) % 256;
uint8 b = (color/(256*256)) % 256;

// use color

++color;

в противном случае вы можете просто генерировать случайные цвета и отслеживать уже использованные с помощью NSSet, Конечно, вы собираетесь упаковать 3 компонента в один объект, как int,

Другие вопросы по тегам