HDC のアルファ チャネルについて教えてください。HDC dc が CreateCompatibleDC をスローするようにします。CreateDIBSection を呼び出すよりも、メモリ内のイメージのバイトを見つけることができます。この DC に対して DrawFrameControl を呼び出すよりも。すべて機能しますが、メモリにはピクセルあたり 4 バイトがあり、アルファ チャネルは 00 で塗りつぶされます。以前に FF があったとしても。しかし、アルファチャンネルが必要です。DrawFrameControl に実際のアルファ値を設定させるにはどうすればよいですか、またはそれらに触れないようにするにはどうすればよいですか。ありがとうございました。そして悪い英語でごめんなさい:(
1 に答える
ピクセルあたり 4 バイトのビットマップのアルファ/予約済みバイトに GDI が書き込まれないようにすることはできません。のようないくつかの関数を除いて、GDI は実際にはアルファ対応ではありませんAlphaBlend
。ただし、 に書き込んでアルファを 0 にリセットするという知識を使用して、どのピクセルに書き込んだかを知り、後で手動でアルファを修正することができます。
詳細については、次の 3 つの記事をお読みください。
最初の 2 つは、おそらく目的を達成するのに十分な情報を提供します。
これらの記事では、GDI 関数を使用してアルファを処理するための一般的なアプローチを採用しています。つまり、アルファが破壊されたピクセルをスキャンして修正します (さらに、正しいアルファを使用して、いくつかのものを重ねて描画するためのより高度な手法について説明します) FrameRect
。ここで、線の幅と高さは 1 単位です。線を使用して描画するか、メモリ内のピクセル ビットマップを直接編集して、メモリ内に直線を描画する方が効率的である場合があります。これにより、GDI で描画されたピクセルのビットマップ全体をスキャンする必要がなくなります。結局のところ、1 単位幅のエッジを持つ四角形であるため、どのピクセルが既に描画されるかを正確に把握しており、それらを自分で編集できます。