A mistura de cores é apenas uma interpolação linear por canal, certo? Portanto, a matemática é muito simples. Se você tiver RGBA1 sobre RGB2, o resultado visual efetivo RGB3 será:
r3 = r2 + (r1-r2)*a1
g3 = g2 + (g1-g2)*a1
b3 = b2 + (b1-b2)*a1
… Onde o canal alfa é de 0,0 a 1,0.
Verificação de sanidade: se o alfa for 0, RGB3 é o mesmo que RGB2? Sim. Se o alfa for 1, RGB3 é o mesmo que RGB1? Sim.
Se você bloqueou apenas a cor de fundo e a cor final, há um grande número de cores RGBA (infinitas, em espaço de ponto flutuante) que podem atender aos requisitos. Portanto, você precisa escolher a cor da barra ou o nível de opacidade desejado e descobrir o valor do outro.
Escolhendo a cor com base no alfa
Se você conhece RGB3 (a cor final desejada), RGB2 (a cor de fundo) e A1 (quanta opacidade você deseja), e está apenas procurando RGB1, então podemos reorganizar as equações da seguinte maneira:
r1 = (r3 - r2 + r2*a1)/a1
g1 = (g3 - g2 + g2*a1)/a1
b1 = (b3 - b2 + b2*a1)/a1
Existem algumas combinações de cores que são teoricamente possíveis, mas impossíveis dada a faixa RGBA padrão. Por exemplo, se o fundo for preto puro, a cor percebida desejada é branco puro e o alfa desejado é 1%, então você precisa:
r1 = g1 = b1 = 255/0.01 = 25500
… Um branco superclaro 100 × mais brilhante do que qualquer disponível.
Escolhendo o alfa com base nas cores
Se você conhece RGB3 (a cor final desejada), RGB2 (a cor de fundo) e RGB1 (a cor que você tem e deseja variar a opacidade), e está apenas procurando A1, então podemos reorganizar o equações assim:
a1 = (r3-r2) / (r1-r2)
a1 = (g3-g2) / (g1-g2)
a1 = (b3-b2) / (b1-b2)
Se eles fornecerem valores diferentes, você não poderá fazer uma correspondência exata, mas pode calcular a média dos alfas para chegar o mais próximo possível. Por exemplo, não há opacidade no mundo que permita colocar o verde sobre o vermelho para ficar azul.