BLENDFUNCTION 結構 (wingdi.h)

BLENDFUNCTION結構會指定來源和目的地點陣圖的混合函式,以控制混合。

語法

typedef struct _BLENDFUNCTION {
  BYTE BlendOp;
  BYTE BlendFlags;
  BYTE SourceConstantAlpha;
  BYTE AlphaFormat;
} BLENDFUNCTION, *PBLENDFUNCTION;

成員

BlendOp

來源混合作業。 目前,定義的唯一來源和目的地混合作業是AC_SRC_OVER。 如需詳細資訊,請參閱下列一節。

BlendFlags

必須為零。

SourceConstantAlpha

指定要在整個來源點陣圖上使用的 Alpha 透明度值。 SourceConstantAlpha值會與來源點陣圖中的任何每圖元 Alpha 值結合。 如果您將 SourceConstantAlpha 設定為 0,則會假設您的影像是透明的。 當您只想使用每圖元 Alpha 值時,將 SourceConstantAlpha 值設定為 255 (不透明) 。

AlphaFormat

此成員會控制來源和目的地點陣圖的解譯方式。 AlphaFormat 具有下列值。

意義
AC_SRC_ALPHA 當點陣圖具有 Alpha 色板 (也就是每圖元 Alpha) 時,就會設定此旗標。 請注意,API 使用預先乘法 Alpha,這表示點陣圖中的紅色、綠色和藍色通道值必須預先乘以 Alpha 色板值。 例如,如果 Alpha 色板值為 x,則紅色、綠色和藍色通道必須乘以 x,並在呼叫之前除以0xff。

備註

AlphaFormat 成員AC_SRC_ALPHA時,來源點陣圖必須是 32 bpp。 如果不是, AlphaBlend 函式將會失敗。

BlendOp 成員AC_SRC_OVER時,來源點陣圖會根據來源圖元的 Alpha 值放置在目的地點陣圖上。

如果來源點陣圖沒有每個圖元的 Alpha 值 (也就是說,AC_SRC_ALPHA未設定) , SourceConstantAlpha 值會決定來源和目的地點陣圖的混合,如下表所示。 請注意,此處的 SourceConstantAlpha 會使用 SCA。 此外,SCA 會除以 255,因為它的值範圍從 0 到 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) )
 

如果目的地點陣圖有 Alpha 色板,則混合如下所示。

Dst.Alpha = Src.Alpha * (SCA/255.0) + Dst.Alpha * (1.0 - (SCA/255.0) )
 

如果來源點陣圖未使用 SourceConstantAlpha (即等於0xFF) ,則每個圖元 Alpha 會決定來源和目的地點陣圖的混合,如下表所示。

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
 

如果目的地點陣圖有 Alpha 色板,則混合如下所示。

Dest.Alpha = Src.Alpha + (1 - SrcAlpha) * Dst.Alpha
 

如果來源同時具有 SourceConstantAlpha (,則它不是0xFF) 和每圖元 Alpha,則來源會預先乘以 SourceConstantAlpha ,然後混合是以每圖元 Alpha 為基礎。 下表顯示此專案。 請注意, SourceConstantAlpha 除以 255,因為它的值範圍從 0 到 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 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
標頭 wingdi.h (包含 Windows.h)

另請參閱

AlphaBlend

點陣圖結構

點陣圖概觀