カラーブレンディングは、チャネルごとの線形補間ですよね?したがって、計算は非常に簡単です。RGB2よりもRGBA1を使用している場合、RGB3の効果的な視覚的結果は次のようになります。
r3 = r2 + (r1-r2)*a1
g3 = g2 + (g1-g2)*a1
b3 = b2 + (b1-b2)*a1
…ここで、アルファチャネルは0.0から1.0です。
サニティチェック:アルファが0の場合、RGB3はRGB2と同じですか?はい。アルファが1の場合、RGB3はRGB1と同じですか?はい。
背景色と最終色のみをロックダウンした場合、要件を満たすことができるRGBA色(無限、浮動小数点空間内)が多数あります。したがって、バーの色または必要な不透明度レベルのいずれかを選択し、もう一方の値を見つける必要があります。
アルファに基づいて色を選ぶ
RGB3(最終的に必要な色)、RGB2(背景色)、およびA1(必要な不透明度)がわかっていて、RGB1を探しているだけの場合は、次のように方程式を再配置できます。
r1 = (r3 - r2 + r2*a1)/a1
g1 = (g3 - g2 + g2*a1)/a1
b1 = (b3 - b2 + b2*a1)/a1
理論的には可能ですが、標準のRGBA範囲では不可能な色の組み合わせがいくつかあります。たとえば、背景が真っ黒で、知覚される色が真っ白で、アルファが1%の場合、次のことが必要になります。
r1 = g1 = b1 = 255/0.01 = 25500
…他のどの製品よりも100倍明るい超高輝度の白。
色に基づいてアルファを選ぶ
RGB3(最終的に必要な色)、RGB2(背景色)、およびRGB1(不透明度を変更したい色)がわかっていて、A1を探しているだけの場合は、を再配置できます。したがって、方程式:
a1 = (r3-r2) / (r1-r2)
a1 = (g3-g2) / (g1-g2)
a1 = (b3-b2) / (b1-b2)
これらが異なる値を与える場合、それを正確に一致させることはできませんが、アルファを平均して可能な限り近づけることができます。たとえば、赤の上に緑を重ねて青にする不透明度は世界にはありません。