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)

另请参阅

AlphaBlend

位图结构

位图概述