色の値は単に加算されるだけではありません。
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)。
浮動小数点計算を避けるために最適化できます。
それが役に立つかどうかはわかりませんが、それがあなたにできるすべてです。