Farbmischung ist nur eine lineare Interpolation pro Kanal, oder? Die Mathematik ist also ziemlich einfach. Wenn Sie RGBA1 über RGB2 haben, ist das effektive visuelle Ergebnis RGB3:
r3 = r2 + (r1-r2)*a1
g3 = g2 + (g1-g2)*a1
b3 = b2 + (b1-b2)*a1
… Wo der Alpha-Kanal zwischen 0,0 und 1,0 liegt.
Sanity Check: Wenn das Alpha 0 ist, ist RGB3 dasselbe wie RGB2? Ja. Wenn das Alpha 1 ist, ist RGB3 dasselbe wie RGB1? Ja.
Wenn Sie nur die Hintergrundfarbe und die endgültige Farbe gesperrt haben, gibt es eine große Anzahl von RGBA-Farben (unendlich, im Gleitkommaraum), die die Anforderungen erfüllen könnten. Sie müssen also entweder die Farbe des Balkens oder die gewünschte Deckkraft auswählen und den Wert des anderen ermitteln.
Auswahl der Farbe basierend auf Alpha
Wenn Sie RGB3 (die endgültige gewünschte Farbe), RGB2 (die Hintergrundfarbe) und A1 (wie viel Deckkraft Sie möchten) kennen und nur nach RGB1 suchen, können wir die Gleichungen folgendermaßen neu anordnen:
r1 = (r3 - r2 + r2*a1)/a1
g1 = (g3 - g2 + g2*a1)/a1
b1 = (b3 - b2 + b2*a1)/a1
Es gibt einige Farbkombinationen, die theoretisch möglich, aber angesichts des Standard-RGBA-Bereichs unmöglich sind. Wenn der Hintergrund beispielsweise rein schwarz ist, die gewünschte wahrgenommene Farbe rein weiß ist und das gewünschte Alpha 1% beträgt, benötigen Sie:
r1 = g1 = b1 = 255/0.01 = 25500
… Ein superhelles Weiß 100 × heller als jedes andere.
Auswahl des Alphas anhand der Farben
Wenn Sie RGB3 (die endgültige gewünschte Farbe), RGB2 (die Hintergrundfarbe) und RGB1 (die Farbe, deren Deckkraft Sie variieren möchten) kennen und Sie nur nach A1 suchen, können wir die neu anordnen Gleichungen also:
a1 = (r3-r2) / (r1-r2)
a1 = (g3-g2) / (g1-g2)
a1 = (b3-b2) / (b1-b2)
Wenn diese unterschiedliche Werte ergeben, können Sie die Übereinstimmung nicht genau festlegen, aber Sie können die Alphas mitteln, um so nah wie möglich zu kommen. Zum Beispiel gibt es keine Deckkraft auf der Welt, mit der Sie Grün über Rot setzen können, um Blau zu erhalten.