タグ

2008年5月31日のブックマーク (1件)

  • Flashのアルファブレンディングのイヤな仕様と回避策 | fladdict

    FlashのBitmapData描画で、アルファ値の計算に色々問題があるのでメモ。 色1の上に色2をアルファありで描画した場合、新しい色は以下の式で求められる。 色 = int((色2-色1)*alpha + 色1) Bitmap.DrawをはじめとするFlashの内部処理はどうやらこの式で求められている。だが、この式には大きな問題点がある。 実はこの式で、alpha = 0.01等の極めて薄い色をなんども重ねて描画すると、画面が徐々に暗くなったり、オレンジ等の中間色が赤や黄色にシフトするという奇妙な挙動が起きる。トップにある習作で、マウスを画面中央においていると、光がハレーションする部分にザラザラとしたノイズがかかるのはコレが原因だった。永らく原因不明だったが、ついに問題の根をつきとめた。 これはブレンド計算した色がbitmapに渡されるとき、int型で丸められてしまう為だ。微妙な色は

    dealforest
    dealforest 2008/05/31
    色 = Math.round((色2-色1)*alpha + 色1)