色の値は単に加算されるだけではありません。
X
色の上に色をプロットするY
と、結果の色 の各カラー チャネルの値は次のC
式で与えられます。
C = X * a + Y * (a-1)
浮動小数点表現を使用する (各チャネルは 0 から 1 の値です)。はa
のアルファ チャネルですX
。(0 ~ 255 に簡単に変換できます)。
白の場合、Y
すべてのチャネルで 1 になるため、次のようになります。
C = X * a + (a-1)
したがって、a
が 0 の場合、明らかに X を見つけることができません。これは理にかなっています。色が完全に透明である場合、結合された色に違いはありません。
同様に、色が白 ( X
=1) の場合、アルファを決定できません (組み合わせた色は、アルファに関係なく白になります)。
また、どちらX
かを見つけるa
ことも、もう一方を知らずして見つけることもできません。
色のアルファがわかっている場合は、色が何であるかを判断できますが、組み合わせた色 ( C
) が離散値 (0 から 255 の整数など) である場合は、丸められるため、取得できるのはプロットされた色の近似値 ( X
)。精度はアルファに依存します (プロットされた色が透明であるほど、色を正確に判断できなくなります)。
したがって、Xについて解く:
X * a = C - a - 1
Therefore: X = (C - a - 1 ) / a
8 ビット カラー チャネル (24 ビット カラー) の場合:
X = 255 * ( C/255 - a/255 - 1 ) / (a/255)
(6 桁の 16 進数値が与えられた場合、これを数字の各ペアに適用しますC
)。
浮動小数点計算を避けるために最適化できます。
それが役に立つかどうかはわかりませんが、それがあなたにできるすべてです。