2010-08-17 26 views
6

Je cherche une formule pour les convertir.Calculer le résultat RVB à partir de 2 couleurs, l'une est transparente

Je sais convertir une transparence générale, il est

alpha * nouveau + (1 - alpha) * vieux

je:

Color A : RGB(85, 113, 135) 
Color B : RGB(43, 169, 225) 

Couleur A a 90% d'opacité et posé sur le dessus de la couleur B, résultant en

Color C : RGB(65, 119, 145) 

Ma question est, comment obtient-il la couleur C? Si je substitue la couleur B pour autre chose, comment puis-je obtenir la couleur C?

Voici un autre exemple, la même couleur de base:

Color A : RGB(85, 113, 135) 
Color B : RGB(45, 67, 82) 
-------- 
Color C : RGB(65, 109, 131) 

Ce sont des exemples de travail fait avec des images - je suis en train de calculer maintenant la couleur C reste donc peut-il affecter une couleur d'arrière-plan.


MISE À JOUR, veuillez voir la réponse acceptée. Le red dans les exemples ci-dessus est étrange - la réponse acceptée a la bonne formule pour toutes les couleurs, je l'ai testé dans Photoshop.

+0

Vous avez taper dans la question? –

+0

D'où tirez-vous vos exemples? Quel programme les a créés? Utilise-t-il une sorte de correction de couleur? –

+0

exemples proviennent d'une page Web sur laquelle je travaille, photoshop a créé les images, mais elles sont mises en œuvre sur le web. –

Répondre

5

Il semble que votre formule soit précisément la formule utilisée dans vos exemples, calculée par composant et arrondie à la valeur supérieure.

Rc: = plafond (R_A * alpha) + plafond (R_b * (1 - alpha))

G_c := ceiling(G_a * alpha) + ceiling (G_b * (1 - alpha)) 
B_c := ceiling(B_a * alpha) + ceiling (B_b * (1 - alpha)) 

étrange, cependant, le composant de R ne semble pas suivre les règles. J'ai tendance à me demander pourquoi.

+0

'plafond (85 * 0,9) = 77' (R-a * alpha) supérieur à 65, est-ce que je mets quelque chose en erreur? –

+0

@Kerry: Je ne suis pas sûr. J'ai écrit un petit programme pour tester l'équation et observé que dans votre cas de test, les valeurs vertes et bleues adhéraient à la formule, mais pas R. – kbrimington

+0

Votre solution est correcte - je l'ai vérifié dans Photoshop, et cela fonctionne très bien. Cela a quelque chose à voir avec Firefox. –