カラーブレンディングはチャンネルごとの線形補間ですよね?したがって、数学は非常に簡単です。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)
これらが異なる値を与える場合、正確に一致させることはできませんが、アルファを平均して可能な限り近づけることはできます。たとえば、世界には、赤の上に緑を置いて青にする不透明度はありません。