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) |