ココアには、すべてのnscolor値(r、g、bのみ、アルファに触れられていない)を反復するのに役立つ方法はありますか?
質問
特定のr、g、bの値に対して次の色を返す関数が必要です。
次の色を言うことで、コンポーネントの1つが変化する色を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
.
所属していません StackOverflow