La combinación de colores es solo una interpolación lineal por canal, ¿verdad? Entonces las matemáticas son bastante simples. Si tiene RGBA1 sobre RGB2, el resultado visual efectivo RGB3 será:
r3 = r2 + (r1-r2)*a1
g3 = g2 + (g1-g2)*a1
b3 = b2 + (b1-b2)*a1
… Donde el canal alfa es de 0.0 a 1.0.
Comprobación de cordura: si el alfa es 0, ¿RGB3 es lo mismo que RGB2? Si. Si el alfa es 1, ¿RGB3 es lo mismo que RGB1? Si.
Si bloqueó solo el color de fondo y el color final, hay una gran cantidad de colores RGBA (infinitos, en el espacio de punto flotante) que podrían satisfacer los requisitos. Por lo tanto, debe elegir el color de la barra o el nivel de opacidad que desee y averiguar el valor de la otra.
Elegir el color basado en Alpha
Si conoce RGB3 (el color final deseado), RGB2 (el color de fondo) y A1 (cuánta opacidad desea), y solo está buscando RGB1, entonces podemos reorganizar las ecuaciones de la siguiente manera:
r1 = (r3 - r2 + r2*a1)/a1
g1 = (g3 - g2 + g2*a1)/a1
b1 = (b3 - b2 + b2*a1)/a1
Hay algunas combinaciones de colores que son teóricamente posibles, pero imposibles dado el rango estándar de RGBA. Por ejemplo, si el fondo es negro puro, el color percibido deseado es blanco puro y el alfa deseado es 1%, entonces necesitaría:
r1 = g1 = b1 = 255/0.01 = 25500
… Un blanco superbrillante 100 veces más brillante que cualquier otro disponible.
Elegir el Alfa en función de los colores
Si conoce RGB3 (el color final deseado), RGB2 (el color de fondo) y RGB1 (el color que tiene del que desea variar la opacidad), y solo está buscando A1, entonces podemos reorganizar el ecuaciones así:
a1 = (r3-r2) / (r1-r2)
a1 = (g3-g2) / (g1-g2)
a1 = (b3-b2) / (b1-b2)
Si estos dan valores diferentes, entonces no puede hacer que coincida exactamente, pero puede promediar los valores alfa para acercarse lo más posible. Por ejemplo, no hay opacidad en el mundo que le permita poner verde sobre rojo para obtener azul.