S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

BLENDFUNCTION

Posted on 2010-09-08 15:06 S.l.e!ep.¢% 阅读(567) 评论(0)  编辑 收藏 引用 所属分类: DirectUI


Members
BlendOp
Specifies the source blend operation. Currently, the only source and destination blend operation that has been defined is AC_SRC_OVER. For

details, see the following Remarks section.
BlendOp: 指定源混合操作。目前,唯一的源和目标混合操作被定义为 AC_SRC_OVER。 详情,请参阅下面的备注部分。

BlendFlags
Must be zero.
BlendFlags: 必须为 0。

SourceConstantAlpha
Specifies an alpha transparency value to be used on the entire source bitmap. The SourceConstantAlpha value is combined with any per-pixel

alpha values in the source bitmap. If you set SourceConstantAlpha to 0, it is assumed that your image is transparent. When you only want to

use per-pixel alpha values, set the SourceConstantAlpha value to 255 (opaque) .
SourceConstantAlpha: 指定用于整张源位图的Alpha透明度值。 SourceConstantAlpha 值和每个像素的alpha值合并。如果 SourceConstantAlpha 为0,那么图

像就为完全透明;如果 SourceConstantAlpha 为255,则图像为不透明。

AlphaFormat
This member controls the way the source and destination bitmaps are interpreted. The following table shows the value for AlphaFormat.
Value Description
AC_SRC_ALPHA This flag is set when the bitmap has an Alpha channel (that is, per-pixel alpha). Because this API uses premultiplied alpha, the

red, green and blue channel values in the bitmap must be premultiplied with the alpha channel value. For example, if the alpha channel value

is x, the red, green and blue channels must be multiplied by x and divided by 0xff before the call.

AlphaFormat: 该成员控制源和目标位图被解释的方式。 下面显示了AlphaFormat值:
    AC_SRC_ALPHA      此标志位图时设置有一个Alpha通道(即每像素都有alpha值)。 由于此API使用预乘α,图中的红色,绿色和蓝色通道值必须预乘alpha

通道值。 例如如果alpha通道值为x,那么在调用之前必,红色,绿色和蓝色通道须乘以x然后除以0xff。

Remarks

Remarks
When the AlphaFormat parameter is AC_SRC_ALPHA, the source bitmap must be 32 bpp. If it is not, the AlphaBlend function will fail.
当AlphaFormat参数为AC_SRC_ALPHA,源位图必须是32色。 如果不是,AlphaBlend函数将失败。

When the BlendOp parameter is AC_SRC_OVER , the source bitmap is placed over the destination bitmap based on the alpha values of the source

pixels.
当BlendOp参数为AC_SRC_OVER,源位图将根据源像素的alpha值置于目标位图上。

If the source bitmap has no per-pixel alpha value (that is, AC_SRC_ALPHA is not set), the SourceConstantAlpha value determines the blend of

the source and destination bitmaps, as shown in the following table. Note that SCA is used for SourceConstantAlpha here. Also, SCA is divided

by 255 because it has a value that ranges from 0 to 255.
如果源位图没有设置AC_SRC_ALPHA,由在SourceConstantAlpha值确定源和目标位图混合,如下表所示。 注意 ,SourceConstantAlpha的值为SCA。 此外,SCA除

以255是因为它的值范围为0至255.

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

If the destination bitmap has an alpha channel, then the blend is as follows.
 如果目标位图有alpha通道,则混合如下。

Dst.Alpha = Src.Alpha * (SCA/255.0) + Dst.Alpha * (1.0 - (SCA/255.0))

If the source bitmap does not use SourceConstantAlpha (that is, it equals 0xFF), the per-pixel alpha determines the blend of the source and

destination bitmaps, as shown by the following equations.
如果源位图不使用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

If the destination bitmap has an alpha channel, then the blend is as follows.
如果目标位图的alpha通道,则混合如下。

Dest.alpha = Src.Alpha + (1 - Src.Alpha) * Dst.Alpha

If the source has both the SourceConstantAlpha (that is, it is not 0xFF) and per-pixel alpha, the source is pre-multiplied by the

SourceConstantAlpha and then the blend is based on the per-pixel alpha. The following equations show this. Note that SourceConstantAlpha is

divided by 255 because it has a value that ranges from 0 to 255.

如果源位图既有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

 


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理