Domanda
Voglio trovare una gamma di colori dal valore di un valore RGB
Se mi venisse dato rgb (0,100.200) per esempio, mi darebbe tutto tra rgb (0,0.255) e rgb (0,255,255). Tuttavia non rgb (255,0,255).
Allo stesso modo rgb (150,50,0). Ritorno: rgb (255,0,0) e rgb (255,255,0). Non rgb (255,0,255).
Ha senso?
Sto usando PHP
Soluzione
L'algoritmo che spieghi è sostanzialmente: "Un colore è costituito da due componenti RGB. Lascia che il componente RGB più forte sia S e l'altro componente O. Crea 255 varianti in cui si lascia S (255) e O va da 0 a 255. "
es. tutti gli esempi seguenti danno lo stesso risultato:
a) rgb(0,100,200)
b) rgb(0,199,200)
c) rgb(0,254,255)
d) rgb(0,1,2)
Result: rgb(0,[0-255],255)
Ciò significa che hai solo 6 varianti.
- Il rosso è il componente più grande, il verde è il più grande = > rgb (255, [0-255], 0)
- Il rosso è il componente più grande, il blu è il più grande = > rgb (255,0, [0-255])
- Il verde è il componente più grande, il rosso è il più grande = > rgb ([0-255], 255,0)
- Il verde è il componente più grande, il blu è il più grande = > rgb ([0-255], 0255)
- Il blu è il componente più grande, il rosso è il più grande = > rgb ([0-255], 0255)
- Il blu è il componente più grande, il verde è il successivo più grande = > rgb (0, [0-255], 255)
L'intenzione del tuo algoritmo non è chiara, quindi immagino che il tuo caso d'uso sia effettivamente diverso da quello che spieghi. Non gestisce i colori con 1 o 3 componenti (la maggior parte dei colori in realtà).
Se il tuo obiettivo è trovare colori simili (ad es. un colore a una certa distanza) ci sono approcci migliori. Ad esempio, potresti convertire i tuoi colori in uno spazio colore HSV (Tonalità, Saturazione, Valore) e poi dire che il colore è simile se uno dei componenti H, S o V sono +/- 10 passi dall'originale.
Esempio:
rgb (255.100,0) = > HSV (24.100.100)
Il tuo intervallo è quindi hsv ([14-34], [90-110], [90-110])
Altri suggerimenti
Hm, non sono sicuro di aver capito bene, ma penso che tu stia dicendo che uno dei numeri è più alto degli altri due e uno dei valori è sempre zero. In tal caso, dovresti essere in grado di utilizzare una semplice istruzione if-else simile a
if (r > g && r > b) {
if (g > 0) {
color1 = rgb(255, 0, 0);
color2 = rgb(255, 255, 0);
}
else {
color1 = rgb(255, 0, 0);
color2 = rgb(255, 0, 255);
}
}
else if (r < g && g > b) {
.
.
.
}
Spero che ti possa aiutare con il tuo problema.