Gibt es eine Methode in Cocoa, das Iterieren durch alle NSColor Werte hilft (R, G, B nur, alpha berührt nicht)?

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

  •  05-10-2019
  •  | 
  •  

Frage

Ich brauche eine Funktion, die für eine gegebene R, G, B-Werte die nächste Farbe zurück.

Indem man sagt die nächste Farbe I die Farbe verstanden, die eine der Komponenten um 1 zu ändern (dh unter der Annahme, R, G, B-Werte des Bereichs 0-255).

Es muss so konstruiert sein, dass Art und Weise, dass von der weißen Farbe beginnend (oder schwarz alternativ) können Sie Iterierte alle Farben Throught (die Zählung 255 * 255 * 255). Es wäre schön, aber nicht erforderlich, dass nach Durchlaufen aller Farben Throught, werden sie von Anfang an wiederholt.

War es hilfreich?

Lösung

Sie können Farbe Retrieval auf Farblisten , entweder ein benutzerdefinierten oder Apple ein wie mit "Web-Safe-Farben":

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

Wenn Sie mehr benötigen und die Reihenfolge spielt keine Rolle, könnten Sie zum Beispiel +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];

Andere Tipps

Es ist nicht klar, was Sie mit „nächste Farbe“ bedeuten, aber Sie können leicht einen Zähler haben, von dem Sie die Komponenten extrahieren:

uint32 color = 0;

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

// use color

++color;

sonst kann man nur zufällige Farben erzeugen und mit einem NSSet Spur von bereits verwendet diejenigen zu halten. Natürlich sind Sie in einem einzigen Objekt 3 Komponenten Gonna zu packen, wie ein int.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top