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 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
标头 | wingdi.h (包括 Windows.h) |