32 ビットの DIB セクションを作成し、0 以外の値 (FillMemory) を入力して、GDI 関数を使用して描画します。DIB セクションのメモリを調べたところ、4 番目のバイト (アルファ チャネル) ごとに 0 になっていることがわかりました。数年前にこの動作の説明がありましたが、再びそれを見つけることができませんでした (そして、GDI がそのように動作する理由を思い出すことはできません)。GDI関数がアルファチャンネルを0に設定する理由を知っている人はいますか? この動作の仕様はありますか?
アイデアは次のとおりです。
dib = CreateDIBSection(hdc..., &bytes);
FillMemory(bytes,...255);
memdc = CreateCompatibleDC(hdc);
SelectObject(memdc, bid);
MoveTo(memdc,...);
LineTo(memdc,...);
// look at every pixel in bytes
// if alpha == 255 then it is undrawn pixel
// and set alpha + premultiply colors otherwise
AlphaBlend(hdc, ... memdc,...);
このコードは機能します。ただし、GDI 関数がアルファを 0 に設定することを前提としています。これが「合法的な動作」であることを確認したいと思います。