R、G、B カラー チャンネルを持つ 24 ビット ビットマップと、R、G、B アルファ チャンネルを持つ 24 ビット ビットマップがあります。最初のビットマップを GDI の HDC または Direct2D の RenderTarget にそれぞれアルファ チャネルでアルファ ブレンドしたいと考えています。たとえば、1 つのピクセルのビットマップ カラーが (192, 192, 192)、HDC カラーが (0, 255, 255)、アルファ チャネルが (30, 40, 50) であるとします。最終的な HDC カラーは (22, 245, 242) になります。最初に HDC をメモリ HDC に BitBlt し、各ピクセルの色を手動で計算してアルファ ブレンディングを行い、最後に BitBlt を戻すことができることを私は知っています。追加のブリッティングを避けて、API に仕事を任せたいだけです (カーネル空間にあるため、より高速です)。
最初に思いついたアイデアは、ソース ビットマップを赤のみ、緑のみ、青のみの 3 つの 8 ビット ビットマップに分割し、通常のアルファ ブレンディングを行ってから、3 つの出力ビットマップを HDC に合成することです。しかし、Windows でネイティブに分割と構成を行う方法が見つかりません (Direct2D レイヤーは役に立ちますか?)。また、分割と合成には、多くの追加コピーが必要になる場合があります。パフォーマンスのオーバーヘッドが高すぎます。
または、3 パスでアルファ ブレンディングを行うこともできます。各パスは、1 つのチャネルにブレンドを適用し、他の 2 つのチャネルは変更しません。
コメントありがとうございます。
編集:私はこの質問を見つけました。答えはこの問題への良い参考になるはずです。ただし、AC_SRC_OVER 以外にサポートされているブレンド操作はありません。Microsoft が API を改善しないのはなぜですか?