La fusione dei colori è solo un'interpolazione lineare per canale, giusto? Quindi la matematica è piuttosto semplice. Se hai RGBA1 su RGB2, il risultato visivo effettivo RGB3 sarà:
r3 = r2 + (r1-r2)*a1
g3 = g2 + (g1-g2)*a1
b3 = b2 + (b1-b2)*a1
... dove il canale alfa è compreso tra 0,0 e 1,0.
Controllo di integrità: se l'alfa è 0, RGB3 è uguale a RGB2? Sì. Se l'alfa è 1, RGB3 è uguale a RGB1? Sì.
Se hai bloccato solo il colore di sfondo e il colore finale, ci sono un gran numero di colori RGBA (infiniti, nello spazio in virgola mobile) che potrebbero soddisfare i requisiti. Quindi devi scegliere il colore della barra o il livello di opacità che desideri e scoprire il valore dell'altro.
Scegliere il colore in base all'alfa
Se conosci RGB3 (il colore finale desiderato), RGB2 (il colore di sfondo) e A1 (quanta opacità vuoi) e stai solo cercando RGB1, allora possiamo riorganizzare le equazioni in questo modo:
r1 = (r3 - r2 + r2*a1)/a1
g1 = (g3 - g2 + g2*a1)/a1
b1 = (b3 - b2 + b2*a1)/a1
Ci sono alcune combinazioni di colori che sono teoricamente possibili, ma impossibili data la gamma RGBA standard. Ad esempio, se lo sfondo è nero puro, il colore percepito desiderato è bianco puro e l'alfa desiderato è 1%, allora avresti bisogno di:
r1 = g1 = b1 = 255/0.01 = 25500
... un bianco super luminoso 100 volte più luminoso di qualsiasi altro disponibile.
Scegliere l'alfa in base ai colori
Se conosci RGB3 (il colore finale desiderato), RGB2 (il colore di sfondo) e RGB1 (il colore di cui vuoi variare l'opacità) e stai solo cercando A1, allora possiamo riorganizzare il equazioni così:
a1 = (r3-r2) / (r1-r2)
a1 = (g3-g2) / (g1-g2)
a1 = (b3-b2) / (b1-b2)
Se questi danno valori diversi, non puoi farlo corrispondere esattamente, ma puoi fare la media degli alfa per avvicinarti il più possibile. Ad esempio, non c'è opacità al mondo che ti consenta di mettere il verde sul rosso per ottenere il blu.