透過色と透過度(Alpha値)

さて昨日、Shapeには透過色の考慮が無いと書いたが正確には『Alphaブレンドを考慮して描画しない事』と『透過色の概念が無い事』の2つのことを混ぜて書いてしまっていた。さらには『結果としてのビットマップが透過機能を持つ事』と『描画ルーチンが透過の機能を持つ事』という概念もあるので色々と紛らわしかった。ここでちゃんとこれらについて補足しておこうと思う。

まずビットマップにおける透過について。

  1. 透過色という色を1つ決めておく方法
  2. 個々の画素に対して透過度を決める方法

1についてはGif画像などが採用していて画像同士の重ね合わせの際に下の画像が透けて見える効果を有効にするために考えられた方法である。2についてはビットマップそのものでは32ビットフォーマットでなければ持たせようが無いが画素ごとに透過度合いが決められ、別の画像と重なる際にはAlphaブレンドされるという仕組みである。

次に描画ルーチンにおける透過について。

  1. 透過色という色を1つ決めておく方法
  2. 個々の画素に対して透過度を決める方法

1については描画ルーチンで透過色という考え方は普通は用いないと思う。2については上記のビットマップの透過度とは違う。描画する際にビット毎のAlphaブレンドを行って画素へは何らかの方法でそれぞれのビットフォーマットへットに変換して保管すればよいからだ。

わかりやすく言えば、ビットマップが24ビットだろうが8ビットだろうが、描画ルーチンに渡す引数としての色には32ビットが渡せる事からこういうことになっているのだ。結果としての透過(=ビットマップへ保管される透過)と方法としての透過(=描画ルーチンの引数)との区別である。

Shapeでは方法としての透過はまったく考慮されていない。が、32ビットビットマップであれば結果としての透過だけは一応実装されている(引数に渡した透過度(Alpha値)をちゃんとセットにいくので)。

ということで検証についてはこういう点も踏まえていろんなパターンの実験が出来る環境を作りたいと思う。