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 を含む)

関連項目

AlphaBlend

ビットマップ構造

ビットマップの概要