http://www.microsoft.com/japan/msdn/library/ja/jpwinui/html/_win32_updatelayeredwindow.asp?frame=true がありますが、これ(と32bitBitmap)を使うとピクセル単位でαブレンドをしてくれるウィンドウが作れます。
作れるのはいいのですが、どうも描画後の色がおかしい。 真ん中の赤い円が描かれている四角形がウィンドウなのですが、これすべてのピクセルが α=0 なんですよ。 なんでお前描画されてるんじゃー!
というわけで、MSDNライブラリで調べてみると…
http://msdn.microsoft.com/library/en-us/gdi/bitmaps_3b3m.asp?frame=true 構造体 にこう記述されているではありませんか。
Src.Red = Src.Red * SourceConstantAlpha / 255.0; Src.Green = Src.Green * SourceConstantAlpha / 255.0; Src.Blue = Src.Blue * SourceConstantAlpha / 255.0; Src.Alpha = Src.Alpha * SourceConstantAlpha / 255.0; Dst.Red = Src.Red + (1 - Src.Alpha) * Dst.Red Dst.Green = Src.Green + (1 - Src.Alpha) * Dst.Green Dst.Blue = Src.Blue + (1 - Src.Alpha) * Dst.Blue Dst.Alpha = Src.Alpha + (1 - Src.Alpha) * Dst.Alpha
… Dst.Red = Src.Red + (1 - Src.Alpha) * Dst.Red
とな?
Dst.Red = ([]Src[].[]Alpha[] * Src.Red) + (1 - Src.Alpha) * Dst.Red
じゃねーのかよ!!orz
そりゃ加算合成になるわ。 何でこんな仕様に…。ちくしょう薔薇水晶め…。
…で、つまり Src の色は、自前で計算しろってことですか。そうですかそうですか…… めどい。orz