Mi sembra abbastanza lineare. Tuttavia, è necessario comprendere un po 'di teoria dei colori.
Spero che non ti dispiaccia che includo un semplice aggiornamento della teoria dei colori qui prima di rispondere alla tua domanda. Ma aiuta a capire o formulare qualsiasi soluzione.
In primo luogo, sono sicuro che la maggior parte si ricorderà la ruota dei colori che hanno imparato a scuola:
Red
Red Orange | Purple
| \_|_/
_o_ ----------> _o_
/ \ /| \
Yellow Blue Yellow | Blue
Green
Beh, abbiamo bisogno di modificarlo un po '. Perché si scopre che il Rosso e il Blu non sono i colori primari in quanto puoi ottenere il rosso mescolando Magenta con Giallo e puoi ottenere Blu mescolando il Ciano con un po 'di Rosso. Così La ruota dei colori modificato utilizza stampa colori: CMY:
Magenta
Red | Blue
\_|_/
_o_
/| \
Yellow | Cyan
Green
Questo è fondamentalmente lo spazio colore HSV (con S solito tracciata che va dal centro verso il bordo della ruota e V non tracciati a tutti, ma di solito può essere cambiato da un cursore). Deriva dalla stampa di colori CMY. Quindi, come può aiutarci con i colori dello schermo RGB?
Bene, se lo guardi attentamente noterai che si tratta in realtà di una combinazione di spazio stampa e schermo. In realtà raffigura il rapporto tra CMY e RGB:
Magenta Magenta
Red | Blue | Red Blue
\_|_/ | \_ _/
_o_ == _o_ + o
/| \ / \ |
Yellow | Cyan Yellow Cyan |
Green Green
Quindi, qualsiasi colore RGB può essere compreso da comprendere questo ruota dei colori. Ad esempio, non c'è il giallo in RGB. Ma notate che Yellow è l'opposto di Blue. Quindi, per ottenere gialla si sottrarre blu da un colore:
rgb(100,80,10) is a "yellowish" version of rgb(100,80,120)
^ ^
Una volta capito questo ruota dei colori a lavorare con i valori RGB ha più senso. Con una pratica sufficiente puoi comporre e modificare i colori direttamente nella sintassi #rrggbb
senza consultare una tabella di colori.
Quindi, per rispondere alla tua domanda. Dite la vostra tonalità obiettivo di rosa è:
rgb(255,182,193)
Sappiamo due cose circa il colore "rosa":
Noi percepiamo come una sorta di rosso. Quindi ha senso che il colore target abbia un alto valore Rosso (in effetti è massimo).
Lo percepiamo come un rosso molto leggero. Quindi ha senso che anche i componenti non-rossi siano piuttosto alti (entrambi sopra i 150).
Quindi, per ottenere sfumature vicino al vostro colore di destinazione abbiamo bisogno:
- valore di R significativamente più alto rispetto G o B.
- Tutti i valori ad essere molto elevato (superiore a 150 o giù di lì) .
Con questa definizione possiamo identificare rosa come:
// Pseudo code:
is_pink (R,G,B) {
return R > 200 && // make sure R is high
G > 150 && // make sure G & B are relatively high
B > 150 &&
R > G && // make sure G & B are not higher than R
R > B;
}
Possiamo aggiungere un'altra condizione di rifiutare "rosa" che è leggermente bluastra o verdastra facendo in modo che G & B sono abbastanza simili:
// Pseudo code:
is_pink (R,G,B) {
return R > 200 &&
G > 150 &&
B > 150 &&
R > G &&
R > B &&
abs(G-B) < 20; // make sure it's neither bluish or greenish
}
È possibile modificare i valori di 200, 150 e 20 secondo i propri gusti di pinkishness ma vedrete che se applichiamo la funzione di cui sopra a entrambi i colori di prova (255,182,193)
e 012.384.425,449 milasaranno entrambi identificati come "rosa".
Prova a convertire in HSV e fai il tuo confronto lì. –
leggere attentamente prima di contrassegnare questo un tipo dupe ... – goat