• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:半透明ブラシ重ね塗りのアルゴリズム)

半透明ブラシ重ね塗りのアルゴリズム

このQ&Aのポイント
  • オリジナルのグラフィックツールを開発しようと思っているのですが、透過レイヤー上で半透明のブラシで重ね塗りしたときの画素値を算出する計算方法がわからず、悩んでいます。
  • 重ね塗り後の画素におけるアルファ値の計算方法は (a1 + a2) - a1 * a2 / 255; であることまではわかったのですが、アルファ値の重みを考慮した、重ね塗り後の明度部分の算出方法をご存じの方はいませんでしょうか。
  • Paint Shop Proでほかのブラシによる演算結果も参考に記述しておきます。

質問者が選んだベストアンサー

  • ベストアンサー
  • hofuhofu
  • ベストアンサー率70% (336/476)
回答No.1

質問文にある数字だけなら大体これで一致しました(一部少しずれるものもあります)。 C3 = (C2 * A2 + C1 * A1 * (255 - A2) / 255) / A3 ・1=既存のレイヤー上にある画素値 ・2=重ね塗りするブラシの画素値 ・3=塗りつぶし結果

Tank2005
質問者

お礼

おかげさまで満足いく結果が得られました。私一人では1週間かかっても得られなかった公式が1日以内で導き出させるなんて驚きです。ありがとうございます。

その他の回答 (1)

  • hofuhofu
  • ベストアンサー率70% (336/476)
回答No.2

どうやらアルファ値を0~1の値に変換(255で割る)して、 a = (a1 + a2) - a1 * a2 = a1 + a2 * (1 - a1)  1:前面, 2:背面 と解釈してやるのがよさそうです。 たとえばa1=40%, a2=50%としてやると、1層目で40%の光が吸収されるわけですから2層目に届くのは全部の60%。 さらに2層目で60%の50%、つまり30%が吸収され、トータルのアルファ値は40%+30%=70%になります。 これを数式にしたのが上の式になり、a1が1層目の重み(トータルの光の量に対して吸収される率)、a2 * (1 - a1) = 30%が2層目の重みとなります。 さらにこれの両辺にcをかけるようにすると、 (ここがちょっと怪しいですが) c * a = c1 * a1 + c2 * a2 * (1 - a1) よって、 c = (c1 * a1 + c2 * a2 * (1 - a1)) / a となり、No.1の式と等価になります。 1,2が入れ替わってるのは1を前面に持ってきたため、255が消えたのはアルファ値を0~1に変換したためです。 この考えを拡張してやれば、3層以上にも対応できるようになるはずです。

Tank2005
質問者

お礼

よくわかりました。アルゴリズムまで解析してくださり、ありがとうございます。

関連するQ&A