HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0711
曲者gmode ブレンド率とは何なのかを確認したい5解決


曲者

リンク

2020/7/11(Sat) 22:30:10|NO.90966

相変わらずランタイムや拡張DLLを使わない曲者です。

 (マウスカーソルに何かが触れてはならない避けゲーを作りたい)
  ↓
 (pgetを使って白色に触れてなければOKにしよう)
  ↓
 gmode 5 で色加算合成コピーを使う事に挑戦してみようかな
  ↓
 ん?この場合ブレンド率ってどうすればいいんだ?

たとえばRGB値が(127,0,0)のコピー先に対して、
(127,127,0)を合成する時に、結果が(254,127,0)になるブレンド率は
256ですか?それとも128ですか?0ではないのでしょうが。

詳しい説明をしていただけるとありがたいです。



この記事に返信する


あらや

リンク

2020/7/11(Sat) 22:48:33|NO.90968

実際にやってみた方が早いと思いますが、


screen 0, 256, 256, 0; color 127, 0, 0: boxf; buffer 1, 256, 256, 0; color 127, 127, 0: boxf; gmode 5,,,256; gsel 0; gcopy 1, 0, 0, 256, 256;

解説すると、加算合成はその名の通りRGBの各色を加算する合成方法です。

RGBそれぞれの色に対して下記のような計算をします。

加算後のR値 = コピー先のR値 + (コピー元のR値 * ブレンド率 / 256)

GとBに関しても同じです。
ヘルプに書いてあるように加算後の値が255を超える場合は255になります。

>RGB値が(127,0,0)のコピー先に対して、
>(127,127,0)を合成する時に、結果が(254,127,0)になるブレンド率
上記の割合的な計算でわかると思いますが、
ブレンド率100%で合成する場合はブレンド率を256に
50%ならば128、0は加算しない(何もしない)のと同じ意味になります。

ちなみにモード6の減算合成もほとんど同じで
上記の式のプラスをマイナスにするだけです。



ソラ

リンク

2020/7/11(Sat) 23:39:23|NO.90969

厳密には0~255の256段階だったと思います。



あらや

リンク

2020/7/12(Sun) 00:13:49|NO.90970

すみません、gselとgmodeの順番を間違えていました。。。

ついでにわかりやすいよう
タイトルバーに合成後の色を表示するようにしてみました。

screen 0, 256, 256, 0; color 127, 0, 0: boxf; buffer 1, 256, 256, 0; color 127, 127, 0: boxf; gsel 0; gmode 5,,,256; gcopy 1, 0, 0, 256, 256; pget 0,0 title ""+ginfo_r+", "+ginfo_g+", "+ginfo_b+""; // 合成後の色

>ソラさん
上記のソースで確認していただくとわかると思いますが、
256だと、合成後の色が(254,127,0)ですが
255だと、合成後の色が(253,126,0)となるので
256が100%なのは間違いないかと。

追記として、
0 + 127 * 255 / 256 = 126.50390625
になるので四捨五入もしていないようです。



曲者

リンク

2020/7/12(Sun) 00:37:50|NO.90971

>加算後のR値 = コピー先のR値 + (コピー元のR値 * ブレンド率 / 256)

なるほど、加算合成はこういう計算式で考えれば良かったのですね...

他の半透明コピーとかだとブレンド率256でただのメモリ間コピーになる、
とあったので、あれ、加算合成はどうなるんだろ?となってしまいましたが、
256でコピー元の色の値が100%の状態で加算されると分かったのと、
Document Libraryでもブレンド率の最大値が255ではなく256と記述されていた事とかの
モヤモヤがスッキリしました。
とても分かりやすかったです、ありがとうございました!



ソラ

リンク

2020/7/12(Sun) 04:30:02|NO.90972

>あらやさん
自分も確認してみました、確かに256が上限ですね。
失礼しました。



ONION software Copyright 1997-2023(c) All rights reserved.