Question

Mon objectif avec cet algorithme sur lequel je travaille est de produire une progression de couleur à partir de certaines couleurs fournies. Par progression des couleurs, je veux dire créer l'effet "fondu" entre deux couleurs (couleur A, couleur b) et stocker chaque valeur de couleur ((r, g, b) tuple) entre les deux.

Par exemple, si ce qui est fourni est le noir total A = (0,0,0) et le blanc total B = (255,255,255) La progression résultant serait:

P = ((0,0,0),(1,1,1),(2,2,2), .... ,(253,253,253),(254,254,254),(255,255,255)

Pour que nous devenons blancs au début et qu'il se transforme progressivement en noir. Il est, bien sûr, très facile avec le blanc et le noir (augmentez simplement le RVB de une étape à chaque étape pendant 255 fois). Mais que se passe-t-il si je veux faire cette procédure avec deux couleurs arbitraires, comme a = (180,69,1) et b = (233,153,0) ??

Remarque importante: si avec l'hexadécimal (ou toute autre notation de couleur), ce serait plus facile à réaliser, je pourrais aussi travailler avec cela, spécifiez le type (prenez en compte que je travaille sur PIL (Python Imaging Library) , donc si c'est compatible avec ça je vais bien)

De toute évidence, il doit être une distribution aussi que possible, la progression doit être homogène.

J'ai besoin de déterminer cet algorithme afin que je puisse l'utiliser dans mon générateur fractal (ensemble Mandelbrot, Google si vous le souhaitez), il est donc important que la progression soit aussi douce que possible, pas de hoquet.

Merci d'avance.

Était-ce utile?

La solution

Convertissez vos coordonnées RVB en HSL ou HSV et passez-les à travers eux, en vous transformant en RVB en cours de route.

Autres conseils

J'interpolerais simplement les valeurs RVB indépendamment. Regarde ça fil de discussion.

Je recommande la même question que Jim Clay mais je lis à partir de haut. ou voir wikipedia concernant interpolation.

Ma réponse à la question donc intitulée Valeurs de plage au pseudocolor Cela peut vous être utile car il montre une façon de générer un gradient de couleur spécifique (le nom commun de ce que vous avez appelé une progression de couleur).

Généralement, vous pouvez interpoler entre deux couleurs dans n'importe quel espace de couleurs en calculant la différence ou la valeur delta, entre les composants de chaque couleur, puis les diviser par le nombre d'étapes intermédiaires souhaitées pour obtenir une quantité de delta fractionnée par composant pour appliquer après chaque marcher.

Ensuite, à partir de la valeur de chacun des composants de la première couleur, la quantité fractionnaire correspondante peut être ajoutée à elle sur et sur la détermination de chaque couleur de pas intermédiaire. Alternativement, l'erreur arithmétique inhérente à cette approche peut être réduite en ajoutant plutôt (step_number/total_steps) * fractional_delta aux valeurs des composants de couleur initiale de la couleur de départ.

Je crois que c'est ce que dit @jim argile dans sa réponse. Si vous souhaitez un exemple de code, dites-le dans un commentaire.

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