

オリジナルのグラフィックツールを開発しようと思っているのですが、透過レイヤー上で半透明のブラシで重ね塗りしたときの画素値を算出する計算方法がわからず、悩んでいます。
たとえば、市販ペイントツールの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)
No.1ベストアンサー
- 回答日時:
質問文にある数字だけなら大体これで一致しました(一部少しずれるものもあります)。
C3 = (C2 * A2 + C1 * A1 * (255 - A2) / 255) / A3
・1=既存のレイヤー上にある画素値
・2=重ね塗りするブラシの画素値
・3=塗りつぶし結果
おかげさまで満足いく結果が得られました。私一人では1週間かかっても得られなかった公式が1日以内で導き出させるなんて驚きです。ありがとうございます。
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層以上にも対応できるようになるはずです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- デザイン ファイヤーアルパカ。色塗り 4 2022/11/10 18:24
- 工学 いつもありがとうございます、 円盤の上に何ccの液を液滴させながら円盤を回したら液が拡がって円盤の全 5 2023/03/18 14:17
- 物理学 Lagrangian や Hamiltonianの妥当性評価 1 2022/08/30 13:13
- 物理学 質量とは何か? 6 2023/04/17 20:44
- 数学 画素数の計算 中高レベルの計算で申し訳ないのですが、下記の問題が分かりません 比率が4:3のA4の横 3 2022/12/17 22:41
- Photoshop(フォトショップ) 【至急】 ウェブサイトやアプリとかでよく見かける、添付画像のように背景にあるものをぼかしつつ透過する 2 2023/07/17 10:57
- 数学 実数であるべきものに虚数を含む複素数が現れたときの対処法 4 2022/08/30 09:19
- 数学 情報処理詳しい人!! A4縦のレポート文書に4:3の大きさの横向きの写真画像を貼り付けることにした。 2 2022/12/18 02:30
- Photoshop(フォトショップ) 塗りつぶした画像を透過させない方法について。上からレイヤーで塗った場合は透過できると聞きましたが、レ 1 2022/10/22 13:41
- 統計学 加重平均を用いた運搬距離の算出をしたいです。 1 2022/08/10 09:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
あああ..ああい..ああう とい...
-
エクセルで選択したセルがディ...
-
select caseの入れ子
-
VBAバーコード照合 バーコード...
-
【マクロ】実行時エラー '424':...
-
「段」と「行」の違いがよくわ...
-
Excel UserForm の表示位置
-
【Excel関数】UNIQUE関数で"0"...
-
特定の文字がある行以外を削除...
-
エクセルで特定の文字列が入っ...
-
エクセルで離れた列を選択して...
-
VBA シートをコピーする際に Co...
-
マクロの「SaveAs」でエラーが...
-
Worksheets メソッドは失敗しま...
-
VBAマクロ実行時エラーの修正に...
-
IIF関数の使い方
-
Excelで、あるセルの値に応じて...
-
VBA 指定した列にある日時デー...
-
エクセル シート内の一番下のセ...
-
B列の最終行までA列をオート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あああ..ああい..ああう とい...
-
VBAにて『元に戻すボタン』を作...
-
select caseの入れ子
-
VBAバーコード照合 バーコード...
-
エクセルで選択したセルがディ...
-
vbs 文字位置を中央に
-
アセンブラでの記述について教...
-
日付け関数について
-
xlookup関数の引数を利用して検...
-
スペース区切りのAND検索
-
エクセルで簡単なオートシェイ...
-
AND関数について
-
Application.FileDialogを利用...
-
VBAの変数をエクセルで表示
-
targetでクリックしたら○
-
VBAマクロにての絶対値
-
再帰構造のアルゴリズムで困っ...
-
エクセルVBAのプログラム
-
ある一定時間の最高値と最小値...
-
打込み作業の自動化
おすすめ情報