BLENDFUNCTION 構造体 (wingdi.h)
BLENDFUNCTION 構造体は、ソース ビットマップとコピー先ビットマップのブレンド関数を指定してブレンドを制御します。
構文
typedef struct _BLENDFUNCTION {
BYTE BlendOp;
BYTE BlendFlags;
BYTE SourceConstantAlpha;
BYTE AlphaFormat;
} BLENDFUNCTION, *PBLENDFUNCTION;
メンバー
BlendOp
ソース ブレンド操作。 現在、定義されているソースとターゲットのブレンド操作はAC_SRC_OVERのみです。 詳細については、次の「解説」セクションを参照してください。
BlendFlags
ゼロを指定してください。
SourceConstantAlpha
ソース ビットマップ全体で使用するアルファ透明度の値を指定します。 SourceConstantAlpha 値は、ソース ビットマップ内のピクセル単位のアルファ値と組み合わされます。 SourceConstantAlpha を 0 に設定した場合、イメージは透明であると見なされます。 ピクセル単位のアルファ値のみを使用する場合は、 SourceConstantAlpha 値を 255 (不透明) に設定します。
AlphaFormat
このメンバーは、ソースビットマップとコピー先ビットマップの解釈方法を制御します。 AlphaFormat の値は次のとおりです。
値 | 説明 |
---|---|
AC_SRC_ALPHA | このフラグは、ビットマップにアルファ チャネル (つまり、ピクセルごとのアルファ) がある場合に設定されます。 API では事前に乗算されたアルファが使用されることに注意してください。つまり、ビットマップ内の赤、緑、青のチャネル値をアルファ チャネル値と共に事前に乗算する必要があります。 たとえば、アルファ チャネル値が x の場合、赤、緑、青のチャネルに x を乗算し、呼び出しの前に0xffで除算する必要があります。 |
解説
AlphaFormat メンバーがAC_SRC_ALPHAされている場合、ソース ビットマップは 32 bpp である必要があります。 そうでない場合、 AlphaBlend 関数は失敗します。
BlendOp メンバーがAC_SRC_OVERされると、ソース ピクセルのアルファ値に基づいて、ソース ビットマップがコピー先ビットマップの上に配置されます。
ソース ビットマップにピクセル単位のアルファ値 (つまり、AC_SRC_ALPHAが設定されていない) がない場合、 SourceConstantAlpha 値は、次の表に示すように、ソース ビットマップとコピー先ビットマップのブレンドを決定します。 ここでは SourceConstantAlpha に SCA が使用されることに注意してください。 また、SCA は 0 から 255 の範囲の値を持っているため、255 で除算されます。
Dst.Red | = Src.Red * (SCA/255.0) | + Dst.Red * (1.0 - (SCA/255.0)) |
Dst.Green | = Src.Green * (SCA/255.0) | + Dst.Green * (1.0 - (SCA/255.0)) |
Dst.Blue | = Src.Blue * (SCA/255.0) | + Dst.Blue * (1.0 - (SCA/255.0)) |
コピー先のビットマップにアルファ チャネルがある場合、ブレンドは次のようになります。
Dst.Alpha | = Src.Alpha * (SCA/255.0) | + Dst.Alpha * (1.0 - (SCA/255.0)) |
ソース ビットマップで SourceConstantAlpha (つまり、0xFFと等しい) を使用しない場合、次の表に示すように、ピクセルごとのアルファによってソースビットマップとコピー先ビットマップのブレンドが決まります。
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 |
コピー先のビットマップにアルファ チャネルがある場合、ブレンドは次のようになります。
Dest.alpha | = Src.Alpha | + (1 - SrcAlpha) * Dst.Alpha |
ソースに SourceConstantAlpha (つまり、0xFFではない) とピクセルごとのアルファの両方がある場合、ソースには SourceConstantAlpha が事前に乗算され、ブレンドはピクセルごとのアルファに基づいています。 次の表にこれを示します。 SourceConstantAlpha は 0 から 255 の範囲の値を持つので、255 で除算されることに注意してください。
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 |
要件
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
Header | wingdi.h (Windows.h を含む) |