可可中是否有任何方法可以帮助通过所有NScolor值(R,G,B,B,Alpha未接触)进行迭代?

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

  •  05-10-2019
  •  | 
  •  

我需要一个函数,对于给定的R,G,B值返回下一种颜色。

通过说下一种颜色,我的意思是其中一个组件变化1的颜色(假设R,G,B值为范围为0-255)。

必须以这种方式构造它,从白色开始(或黑色)您可以通过所有颜色(计数为255*255*255)进行局限。这是很好的,但是不需要在所有颜色迭代后,从一开始就会重复。

有帮助吗?

解决方案

您可以基于颜色检索 颜色列表, ,要么使用自定义或苹果 “网络安全颜色”:

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

如果您需要更多并且订单无关紧要,则可以使用EG +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