Algorithme Additif Mélange de Couleurs pour les Valeurs RVB
Je suis à la recherche d'un algorithme pour faire additif mélange de couleur de RVB.
Est-il aussi simple que d'ajouter les valeurs RVB ensemble pour un maximum de 256?
(r1, g1, b1) + (r2, g2, b2) =
(min(r1+r2, 256), min(g1+g2, 256), min(b1+b2, 256))
- Pourquoi avez-vous besoin de cela? La Simple addition ne donne pas toujours les résultats que vous voulez.
- Idéalement, il représenterait le mélange de couleurs comme si c'était de la couleur et de la lumière. J'ai peut-être faux, mais j'ai pensé que c'est ce que l'additif de mélange de couleur représente. Peut-être que je me trompe.
- Vous avez absolument le droit, il doit être min.
- En général, le canal de couleur de la gamme de valeurs de 0 à 255, pas de 1 à 256.
- Pour info, je suis en train de travailler hors de cela, et il se réfère à 256: pythonware.com/library/tkinter/introduction/...
Vous devez vous connecter pour publier un commentaire.
Cela dépend de ce que vous voulez, et il peut aider à voir ce que les résultats sont de différentes méthodes.
Si vous voulez
puis l'ajouter avec une pince (par exemple
min(r1 + r2, 255)
) C'est plus comme la lumière du modèle que vous avez mentionné.Si vous voulez
ensuite, vous aurez besoin de calculer la moyenne des valeurs (par exemple,
(r1 + r2) /2
) Cela fonctionne mieux pour l'éclaircissement/assombrissement des couleurs et la création de dégradés.À se mélanger à l'aide des canaux alpha, vous pouvez utiliser ces formules:
fg
est la couleur de la peinture.bg
est l'arrière-plan.r
est la couleur résultante.1.0e-6
est juste un très petit nombre, pour compenser les erreurs d'arrondi.REMARQUE: Toutes les variables utilisées ici sont dans l'intervalle [0.0, 1.0]. Vous devez diviser ou multiplier par 255 si vous souhaitez utiliser des valeurs dans l'intervalle [0, 255].
Par exemple, 50% de rouge sur le dessus de 50% vert:
De couleurs qui en résulte est:
(0.67, 0.33, 0.00, 0.75)
, ou 75% brun (ou orange foncé).Vous pouvez également inverser ces formules:
ou
Les formules permet de calculer que l'arrière-plan ou la couleur de la peinture devrait être de produire de la donnée de couleurs qui en résulte.
Si votre fond est opaque, le résultat serait aussi opaque. La couleur de premier plan pourrait alors prendre une fourchette de valeurs avec différentes valeurs alpha. Pour chaque canal (rouge, vert et bleu), vous avez pour vérifier la gamme des alphas résultats dans les valeurs valides (0 - 1).
Fait amusant: RVB de l'Ordinateur valeurs sont issues de la racine carrée de flux de photons. De manière générale fonction, calcul doit prendre en compte. La fonction générale pour ce pour un canal donné est:
Où a et b sont les couleurs de mélange, et t est un nombre entre 0 et 1 représentant le point dans le mélange que vous voulez entre a et b.
Le canal alpha est différent; il ne représente pas de photon intensité, juste le pourcentage de fond qui devrait montrer à travers, de sorte lorsque le mélange alpha valeurs, la moyenne linéaire est assez:
Donc, pour gérer le mélange de deux couleurs, à l'aide de ces deux fonctions, le pseudo-code suivant devrait vous faire du bien:
D'ailleurs, j'ai un langage de programmation et un clavier qui permet à la fois représentant de mathématiques (ou plus) proprement (la combinaison de surligner un caractère unicode ne fonctionne pas pour les exposants, les symboles, et un vaste éventail d'autres caractères) et de les interpréter correctement. sqrt((1-t)*pow(a, 2) + t * pow(b, 2)) n'a tout simplement pas lire comme propre.
Quelques points:
Cela donnera:
(r1, g1, b1) + (r2, g2, b2) = (min(r1+r2, 255), min(g1+g2, 255), min(b1+b2, 255))
Cependant, La façon "naturelle" de couleurs de mélange consiste à utiliser la moyenne, et puis vous n'avez pas besoin de le min:
(r1, g1, b1) + (r2, g2, b2) = ((r1+r2)/2, (g1+g2)/2, (b1+b2)/2)
Fonction Javascript pour mélanger les couleurs rgba
c1,c2 et JSON est comme
c1={r:0.5,g:1,b:0,a:0.33}
rgbaSum(rgbaSum(c1,c2),rgbaSum(c3,c4))
. Serait-ce exact?PYTHON COULEUR MÉLANGE PAR PLUS DANS CMJN ESPACE
Une façon de le faire est d'abord de convertir les couleurs en CMJN format, ajoutez-les, puis il se reconvertir à RVB.
Voici un exemple de code en Python:
Le résultat à votre question serait alors (en supposant que la moitié de la moitié du mélange de vos deux couleurs:
où les 0.5 s sont là pour dire que nous mélanger 50% de la première couleur, avec 50% de la deuxième couleur.
Oui, c'est aussi simple que cela. Une autre option est de trouver le moyen (pour la création de dégradés).
En réalité, tout dépend de l'effet que vous voulez atteindre.
Cependant, quand l'Alpha est ajouté, il devient compliqué. Il y a un certain nombre de méthodes différentes pour se mélanger à l'aide d'un alpha.
Un exemple simple de l'alpha blending:
http://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending
Ont écrit/utilisé quelque chose comme @Markus Jarderot's
sRGB
mélange de réponse (qui n'est pas gamma corrigé puisque c'est la valeur par défaut héritage) à l'aide de C++plus d'infos: qu'est-ce-tous-codeur-devez-savoir-sur-gamma
Quand je suis arrivé ici, je n'ai pas trouvé le "additif mélange des couleurs" de l'algorithme en fait j'ai été à la recherche pour, qui est également disponible dans Photoshop et est décrit comme "Écran" sur Wikipédia. (Aka "égayer" ou "inverser multipliez-vous".) Il produit un résultat semblable à deux sources de lumière combiné.
Ici, il est:
Voici un très optimisé, autonome, classe c++, le domaine public, avec virgule flottante et les deux différemment optimisé 8 bits mélange de mécanismes à la fois la fonction de macro et de formats, ainsi qu'une discussion technique à la fois le problème et comment, et de l'importance de l'optimisation de cette question:
https://github.com/fyngyrz/colorblending
Merci Markus Jarderot, Andras Zoltan et hkurabko; voici le code Python pour la fusion d'une liste d'images RVB.
À l'aide de Markus Jarderot du code, nous pouvons générer de couleur RVBA, puis-je utiliser Andras Zoltan et hkurabko de l' méthode de trans LED RVB.
Merci!
Test