描述
BLENDFUNCTION结构通过指定源和目标位图的混合函数来控制混合。
C++ 语法
typedef struct _BLENDFUNCTION { BYTE BlendOp; BYTE BlendFlags; BYTE SourceConstantAlpha; BYTE AlphaFormat; }BLENDFUNCTION, *PBLENDFUNCTION, *LPBLENDFUNCTION; |
PowerBASIC 语法
TYPE BLENDFUNCTION BlendOp AS BYTE BlendFlags AS BYTE SourceConstantAlpha AS BYTE AlphaFormat AS BYTE END TYPE |
成员
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,并在呼叫之前除以&Hff。 |
备注
当AlphaFormat参数为AC_SRC_ALPHA时,源位图必须为32 bpp。如果不是,则AlphaBlend功能将失败。
当BlendOp参数是AC_SRC_OVER时,源位图将基于源像素的alpha值放置在目标位图上。
如果源位图没有每像素Alpha值(即,AC_SRC_ALPHA未设置),则SourceConstantAlpha值将确定源位置和目标位图的混合,如下表所示。请注意,这里使用SCA作为SourceConstantAlpha.另外,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(即等于&HFF),则每像素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(即不是&HFF)和每像素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
引用文件 #INCLUDE Once
WinGdi.inc(包括Windows.inc)