2009-08-05 10 views
1

Je veux trouver une gamme de couleurs de la valeur d'une valeur RGBTrouver Gamme de couleurs

Si on m'a donné rgb (0.100.200) par exemple, il me donnerait tout entre rgb (0,0,255) 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). Pas rgb (255,0255).

Avoir du sens?

Im en utilisant PHP

+4

Vous allez devoir être plus précis sur la façon dont les extrémités de la gamme doivent être déterminées. – Amber

Répondre

4

L'algorithme que vous expliquez est fondamentalement: "Une couleur se compose de deux composants RVB Laisser le composant RVB le plus fort être S et l'autre composant O. Créer 255 variations où S soit (255) et O va 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) 

Ceci signifie que vous avez seulement 6 variations.

  1. Red est la principale composante, vert suivant le plus grand => rgb (255, [0-255], 0)
  2. Red est la principale composante, bleu suivant le plus grand => rgb (255,0, [
  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 plus grand composant, le bleu le plus grand suivant => rgb ([0- 255], 0,255)
  5. Le bleu est le composant le plus important, Rouge suivant le plus grand => rgb ([0-255], 0,255)
  6. Le bleu est le composant le plus important, Vert suivant larger => rgb (0, [0-255], 255)

L'intention de votre algorithme n'est pas claire, donc je devine que votre cas d'utilisation est réellement 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 de couleur HSV (Teinte, Saturation, Valeur) et ensuite dire que la couleur est similaire si l'un des composants H, S ou V est à +/- 10 pas de votre original.

Par exemple:

rgb (255,100,0) => TSV (24100100)

Votre gamme est alors TSV ([14-34], [90-110], [90-110])

0

Hm, pas sûr que je comprends bien, mais je pense que vous dites que l'un des numéros est plus élevé que les deux autres, et l'une des valeurs est toujours égale à zéro. Si tel est le cas, vous devriez être en mesure d'utiliser un simple if-else instruction similaire à

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

Espoir qui vous aidera avec votre problème.