半透明ブラシ重ね塗りのアルゴリズム
オリジナルのグラフィックツールを開発しようと思っているのですが、透過レイヤー上で半透明のブラシで重ね塗りしたときの画素値を算出する計算方法がわからず、悩んでいます。
たとえば、市販ペイントツールのPaint Shop Proであるならば
CA = (192, 63) [Cは明度(0で黒)、Aはアルファ値(0で完全透明)]
の画素値をもつピクセルに
CA = (64, 191)
の画素値をもつブラシで重ね塗りをすると、その部分は
CA = (74, 207)
の値になります。
重ね塗り後の画素におけるアルファ値の計算方法は
a = (a1 + a2) - a1 * a2 / 255;
[上のパターンであれば (191 + 63) - 191 * 63 / 255 = 207 となる]
であることまではわかったのですが、アルファ値の重みを考慮した、重ね塗り後の明度部分の算出方法(例えば[192]と[64]で、どのように計算すれば[74]が求まるのか)をご存じの方はいませんでしょうか。
Paint Shop Proでほかのブラシによる演算結果も参考に記述しておきます
(既存のレイヤー上にある画素値[C, A], 重ね塗りするブラシの画素値 -> 塗りつぶし結果)
(64, 63), (192, 192) -> (182, 207)
(128, 63), (63, 191) -> (69, 207)
(255, 127), (0, 255) -> (0, 255)
(0, 127), (255, 63) -> (101, 159)