Question

Je souhaite rechercher une plage de couleurs à partir de la valeur d'une valeur RVB

Si on me donnait rgb (0,100,200) par exemple, cela me donnerait tout entre rgb (0,0255) et rgb (0,255,255). Cependant pas rgb (255,0255).

De même rgb (150,50,0). Retour: rgb (255,0,0) et rgb (255,255,0). Non rgb (255,0,255).

Donner du sens?

J'utilise PHP

Était-ce utile?

La solution

L’algorithme que vous expliquez est le suivant: "Une couleur est constituée de deux composants RVB. Supposons que le composant RVB le plus puissant soit S et l’autre composant O. Créez 255 variations dans lesquelles vous laissez S (255) et O s’échelonne de 0 à 255. "

E.g. tous les exemples ci-dessous donnent le même résultat:

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)

Cela signifie que vous n’avez que 6 variations.

  1. Le rouge est le composant le plus important, le vert suivant le plus grand = > rgb (255, [0-255], 0)
  2. Le rouge est le composant le plus important, le bleu suivant le plus grand = > rgb (255,0, [0-255])
  3. Le vert est le composant le plus important, le rouge suivant le plus grand = > rgb ([0-255], 255,0)
  4. Le vert est le composant le plus important, le bleu suivant le plus grand = > rgb ([0-255], 0,255)
  5. Le bleu est le composant le plus important, le rouge suivant le plus grand = > rgb ([0-255], 0,255)
  6. Le bleu est le composant le plus important, le vert suivant le plus grand = > rgb (0, [0-255], 255)

L'intention de votre algorithme n'est pas claire. Je suppose donc que votre cas d'utilisation est en réalité différent de ce que vous expliquez. Il ne gère pas les couleurs avec 1 ou 3 composants (la plupart des couleurs en fait).

Si votre objectif est de trouver des couleurs similaires (par exemple une couleur à une certaine distance), il existe de meilleures approches. Par exemple, vous pouvez convertir vos couleurs en un espace colorimétrique HSV (Teinte, Saturation, Valeur), puis dire que la couleur est similaire si l’un des composants H, S ou V est à +/- 10 pas de votre original.

Exemple:

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

Votre plage est alors hsv ([14-34], [90-110], [90-110])

Autres conseils

Hm, je ne suis pas sûr de bien comprendre cela, mais je pense que vous dites qu'un des nombres est plus élevé que les deux autres et que l'une des valeurs est toujours zéro. Si tel est le cas, vous devriez pouvoir utiliser une simple instruction if-else semblable à

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) {
   .
   .
   .
}

J'espère que cela vous aidera à résoudre votre problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top