Question

Considérons le scénario suivant:. Une fonction qui peut générer des couleurs de code du blanc au rouge, du blanc au bleu, du blanc au rose, du blanc à l'orange, etc

Le code de couleurs est en format RGB avec des valeurs de 0 à 255.

Toutes les idées? Pouvez-vous me donner le pseudo-code ou un lien vers cet algorithme?

Était-ce utile?

La solution

On dirait que vous êtes après interpolation linéaire - dans votre cas, interpoler du blanc au la couleur spécifiée. Par exemple, en C #:

public IEnumerable<Color> Interpolate(Color from, Color to, int steps)
{
    int range = steps-1; // Makes things a bit easier
    for (int i=0; i < steps; i++)
    {
        // i is the proportion of the "to" colour to use.
        // j is the proportion of the "from" colour to use.

        int j = range - i;
        int r = ((from.R * j) + (to.R * i)) / range;
        int g = ((from.G * j) + (to.G * i)) / range;
        int b = ((from.B * j) + (to.B * i)) / range;
        yield return new Color(r, g, b);
    }
}

Bien sûr, il y a d'autres façons de le faire d'ailleurs une interpolation linéaire, mais qui est susceptible d'être la plus simple. Notez que cela devient délicat si vous avez beaucoup d'étapes ou des valeurs plus grandes, parce que vous devez envisager la possibilité de débordement. Dans ce cas, vous devriez être bien si -. Vous avez peu de chances de vouloir plus de 256 étapes, et la valeur maximale est de 255, de sorte que vous ne serez pas près des limites de ints

EDIT: Comme il est indiqué dans les commentaires, RGB pourrait bien ne pas être le meilleur domaine dans lequel utiliser une interpolation linéaire. Vous pouvez être mieux loti convertir le de / vers les valeurs RVB en , et faire interpolation ceux. Cela peut être facile ou difficile en fonction de votre plate-forme. Le lien wikipedia dans la phrase précédente donne des formules pour les calculs appropriés si elles ne sont pas fournis pour vous.

Autres conseils

Algorithme:

  1. Trouvez la valeur RVB pour le blanc
  2. Trouvez la valeur RVB pour l'autre couleur (par exemple, vous parlez rouge, bleu, rose, orange)
  3. Calculer les valeurs RVB dont les composantes RGB sont arithmétiquement entre les composants RVB des deux extrêmes

Par exemple, si un extrême est (0,0,0) et l'autre extrémité est (0.255.255), la valeur à mi-chemin entre ces deux couleurs est (0128128) ... et la valeur qui est un quart de la chemin entre ces deux valeurs est (0,64,64).

Commencez par les deux couleurs que vous voulez gradients entre, et les diviser en R, parties G et B.

Déterminez le nombre de « étapes » vous voulez Fondu.

Diviser la différence entre les parties R, V et B avec le nombre d'étapes. Vous avez maintenant une « différence étape » pour chaque couleur.

boucle à chaque étape et ajoutez la différence de pas à la valeur de couleur une fois pour chaque itération. Round aux entiers dernière chose vous faites.

Quelles couleurs voulez-vous changer pour? blanc au rouge serait juste un cas de 255 à partir de 255 255 et décrémenter les deux secondes jusqu'à ce que vous avez 255 0 0 bleu serait de conserver la dernière valeur et décrémenter finir avec 0 0 255, etc

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