Mieszanie kolorów to tylko liniowa interpolacja na kanał, prawda? Więc matematyka jest dość prosta. Jeśli masz RGBA1 nad RGB2, efektywnym efektem wizualnym RGB3 będzie:
r3 = r2 + (r1-r2)*a1
g3 = g2 + (g1-g2)*a1
b3 = b2 + (b1-b2)*a1
… Gdzie kanał alfa wynosi od 0,0 do 1,0.
Kontrola poczytalności: jeśli alfa wynosi 0, czy RGB3 to to samo co RGB2? Tak. Jeśli alfa wynosi 1, to czy RGB3 to to samo co RGB1? Tak.
Jeśli zablokowałeś tylko kolor tła i kolor końcowy, istnieje duża liczba kolorów RGBA (nieskończona, w przestrzeni zmiennoprzecinkowej), które mogą spełnić wymagania. Musisz więc wybrać kolor paska lub żądany poziom krycia i sprawdzić wartość drugiego.
Wybór koloru na podstawie alfa
Jeśli znasz RGB3 (ostateczny pożądany kolor), RGB2 (kolor tła) i A1 (ile chcesz krycia) i szukasz tylko RGB1, możemy ponownie ułożyć równania w ten sposób:
r1 = (r3 - r2 + r2*a1)/a1
g1 = (g3 - g2 + g2*a1)/a1
b1 = (b3 - b2 + b2*a1)/a1
Istnieje kilka kombinacji kolorów, które są teoretycznie możliwe, ale niemożliwe, biorąc pod uwagę standardowy zakres RGBA. Na przykład, jeśli tło jest czysto czarne, pożądany postrzegany kolor to czysta biel, a pożądana wartość alfa wynosi 1%, wtedy potrzebujesz:
r1 = g1 = b1 = 255/0.01 = 25500
… Superjasna biel 100 razy jaśniejsza niż wszystkie dostępne.
Wybór alfy na podstawie kolorów
Jeśli znasz RGB3 (ostateczny pożądany kolor), RGB2 (kolor tła) i RGB1 (kolor, który chcesz zmienić krycie), i szukasz tylko A1, możemy ponownie zaaranżować równania w ten sposób:
a1 = (r3-r2) / (r1-r2)
a1 = (g3-g2) / (g1-g2)
a1 = (b3-b2) / (b1-b2)
Jeśli dają one różne wartości, nie możesz dopasować ich dokładnie, ale możesz uśrednić alfy, aby zbliżyć się jak najbliżej. Na przykład nie ma na świecie przezroczystości, która pozwoliłaby umieścić zielony na czerwonym, aby uzyskać niebieski.