Pregunta

Quiero encontrar un rango de colores a partir del valor de un valor RGB

Si me dieran rgb (0,100,200), por ejemplo, me daría todo entre rgb (0,0,255) y rgb (0,255,255). Sin embargo, no rgb (255,0,255).

Del mismo modo rgb (150,50,0). Retorno: rgb (255,0,0) y rgb (255,255,0). No rgb (255,0,255).

¿Tiene sentido?

Estoy usando PHP

¿Fue útil?

Solución

El algoritmo que explica es básicamente: " Un color consta de dos componentes RGB. Deje que el componente RGB más fuerte sea S y el otro componente O. Cree 255 variaciones donde deje que S sea (255) y O varíe de 0 a 255. "

Por ejemplo. todos los ejemplos a continuación producen el mismo resultado:

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)

Esto significa que solo tienes 6 variaciones.

  1. El rojo es el componente más grande, el verde es el siguiente más grande = > rgb (255, [0-255], 0)
  2. El rojo es el componente más grande, el azul es el siguiente más grande = > rgb (255,0, [0-255])
  3. El verde es el componente más grande, el rojo es el siguiente más grande = > rgb ([0-255], 255,0)
  4. Verde es el componente más grande, Azul siguiente más grande = > rgb ([0-255], 0,255)
  5. El azul es el componente más grande, el rojo es el siguiente más grande = > rgb ([0-255], 0,255)
  6. Azul es el componente más grande, Verde siguiente más grande = > rgb (0, [0-255], 255)

La intención de su algoritmo no está clara, así que supongo que su caso de uso es realmente diferente de lo que explica. No maneja colores con 1 o 3 componentes (la mayoría de los colores en realidad).

Si su objetivo es encontrar colores similares (por ejemplo, un color en una cierta distancia), hay mejores enfoques. Por ejemplo, podría convertir sus colores en un espacio de color HSV (Tono, Saturación, Valor) y luego decir que el color es similar si cualquiera de los componentes H, S o V están a +/- 10 pasos de su original.

Ej .:

rgb (255,100,0) = > hsv (24,100,100)

Su rango es entonces hsv ([14-34], [90-110], [90-110])

Otros consejos

Hm, no estoy seguro de entender esto correctamente, pero creo que estás diciendo que uno de los números es más alto que los otros dos, y uno de los valores siempre es cero. Si este es el caso, debería poder usar una simple instrucción if-else similar 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) {
   .
   .
   .
}

Espero que te ayude con tu problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top