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

È stato utile?

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.

  1. Il rosso è il componente più grande, il verde è il più grande = > rgb (255, [0-255], 0)
  2. Il rosso è il componente più grande, il blu è il più grande = > rgb (255,0, [0-255])
  3. Il verde è il componente più grande, il rosso è il più grande = > rgb ([0-255], 255,0)
  4. Il verde è il componente più grande, il blu è il più grande = > rgb ([0-255], 0255)
  5. Il blu è il componente più grande, il rosso è il più grande = > rgb ([0-255], 0255)
  6. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top