2

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 を改善しないのはなぜですか?

4

1 に答える 1

1

チャネルごとのアルファは、WindowsまたはOSXの標準ライブラリではサポートされていないと確信しています。3つのレイヤーを個別に操作し(各レイヤーを個別の32ビットビットマップとして扱います)、それらを構成することもできます。

于 2010-06-19T16:56:33.463 に答える