エアブラシを実現するには?

解決


ぽん  2005-01-10 07:50:46  No: 118731

初めまして、少し解らないことがあるので質問させて頂きます。

VB6で簡単なペイントツールを作っていて、Adobe PhotoShopなどのソフトにあるようなエアブラシ(外側に行くにつれて薄くなる)を実現したいのですが、なかなか上手くいきません。
キャンバスの色とブラシの色をAnd演算(乗算?)すると近い所までできるのですが、やはりおかしいです。
検索をしたりしたのですが、なかなかそれらしい資料が出てきません。

解る方がおりましたら、宜しくお願い致します。


。。。  2005-01-10 09:27:12  No: 118732

ある点(x,y)からの距離をrとし、ブラシの色をCとすると
ある点rの色cは
mを色の減衰が始まる距離、nが色の減衰が100%となる距離とすると

r<mのとき
c=C(半径m以内の色はCの色100%)

背景の色をBとすると
m<=r<nのとき
Cが100%から0%に減衰していく式は

c=C*(n-r)/(n-m)+B*(r-m)/(n-m)

r>n
半径n以上の色は100%背景色B)
c=B

ただし色の足し算は
C1(r1,g1,b1)+C2(r1,g2,b2)=C3(r1+r2,g1+g2,b1+b2)
色への掛け算は
C1(r1,g1,b1)*a=C1(r1*a,g1*a,b1*a)
とする
各色の値は0未満の場合は0に、256以上の場合は255にする

減衰が線形的で変であればいろいろ変えてみる

というような感じでいかがでしょう。


ガッ  2005-01-10 09:28:34  No: 118733

AdobePhotoShopがないので良く分からないが…
半透明ブレンドとかじゃないのか?
…誤爆の予感。


ぽん  2005-01-12 08:40:32  No: 118734

。。。さん、ガッさん  ありがとうございました!

>>。。。さん
教えて下さった計算式で色々やったところ、合成できました。
円状にするのがまだ上手くいきませんが、そこはいじりつつ調整していきます。

>>ガッさん
AlphaBlendなど考えたんですが、ちょっと重かったので…。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加