勇芳软件工作室.汉化:  Bitmaps > Bitmap Structures >

BLENDFUNCTION

Previous pageReturn to chapter overviewNext page

描述

 

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)