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

StackOverflow https://stackoverflow.com/questions/2940002

  •  05-10-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

Вы можете основывать цветное извлечение на Цветные списки, либо используя пользовательский или Apple, как "Веб безопасные цвета":

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top