AlphaBlend - [Daily APIs]

本文详细介绍了 AlphaBlend 函数的功能及使用方法,包括其语法、参数说明、返回值及注意事项等。同时,还深入解析了 BLENDFUNCTION 结构的作用及其成员变量的含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AlphaBlend 

 

该函数显示拥有透明或半透明像素的位图。 

Syntax

BOOL AlphaBlend (
     HDC    hdcDest ,
     int      nXOriginDest ,   int   nYOriginDest ,   int   nWidthDest ,   int    nHeightDest ,
     HDC    hdcSrc ,
     int      nXOriginSrc ,     int    nYOriginSrc ,     int   nWidthSrc ,   int    nHeightSrc ,
     BLENDFUNCTION   blendFunction
    );

Parameters 

hdcDest: [in] 目标DC的句柄

nXOriginDest、nYOriginDest: [in] 目标矩形左上角X坐标和Y坐标,按逻辑单元

nWidthDest、nHeightDest: [in] 目标矩形的宽度和高度,不能为负数,按逻辑单元

hdcSrc: [in] 源DC的句柄

nXOriginSrc、nYOriginSrc: [in] 源矩形左上角X坐标和Y坐标,按逻辑单元

nWidthSrc、nHeightSrc: [in] 源矩形的宽度和高度,不能为负数,按逻辑单元

blendFunction: [in] 指定用于源位图和目标位图使用的alpha混合功能,用于整个源位图的全局alpha值和格式信息。源和目标混合功能当前只限为AC_SRC_OVER


Return Value 

如果成功,返回TRUE;失败返回FALSE

获取扩展的错误信息,调用 GetLastError , GetLastError会返回:ERROR_INVALID_PARAMETER,代表有一个或多个输入参数错误。


Remarks 

   如果源矩形和目标矩形大小不同,源位图被缩放以匹配目标矩形。如果使用SetStretchBltMode 函数,iStretchMode 值自动转换为COLORONCOLOR
   目标坐标使用为目标设备环境指定的转换方式进行转换。源坐标则使用为源设备环境指定的当前转换方式进行转换。
   如果源设备环境标识为增强型图元文件设备环境,那么会出错(并且该函数返回FALSE)。
   如果目标和源位图的色彩格式不同,那么AlphaBlend将源位图转换以匹配目标位图。
   AlphaBlend不支持镜像。如果源或目标区域的宽度或高度为负数,那么调用将失败。
   当在打印机上显示时,首先调用 GetDeviceCaps 并传入 SHADEBLENDCAPS 参数检测打印机是否支持 AlphaBlend 混合。记住,对于显示DC,所有混合操作都被支持而且这些标志代表操作是否支持加速。
   源矩形必须位于源表面内(即,源矩形范围不能超出源位图的范围),否则将发生错误,函数返回FALSE.
   BLENDFUNCTION 结构的 SourceConstantaAlpha 成员指定使用在整个源位图上的 alpha 透明值。SourceConstantAlpha 值和每个像素的alpha值合并。如果 SourceConstantAlpha 为0,那么图像就为完全透明;如果 SourceConstantAlpha 为255,则图像为不透明。 


Requirements 

Header: windows.h 

Library: coredll.lib 

Windows Mobile: Windows Mobile Version 5.0 and later  

 

BLENDFUNCTION

 

该结构控制指定用于源位图和目标位图使用混合功能 

Syntax

typedef struct _BLENDFUNCTION {

  BYTE  BlendOp;

  BYTE  BlendFlags;

  BYTE  SourceConstantAlpha;

  BYTE  AlphaFormat;

}BLENDFUNCTION, *PBLENDFUNCTION, *LPBLENDFUNCTION; 

 

Members:

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

BlendFlags: 必须为 0。

SourceConstantAlpha: 指定用于整张源位图的Alpha透明度值。 SourceConstantAlpha 值和每个像素的alpha值合并。如果 SourceConstantAlpha 为0,那么图像就为完全透明;如果 SourceConstantAlpha 为255,则图像为不透明。

AlphaFormat: 该成员控制源和目标位图被解释的方式。 下面显示了AlphaFormat值:

    AC_SRC_ALPHA      此标志位图时设置有一个Alpha通道(即每像素都有alpha值)。 由于此API使用预乘α,图中的红色,绿色和蓝色通道值必须预乘alpha通道值。 例如如果alpha通道值为x,那么在调用之前必,红色,绿色和蓝色通道须乘以x然后除以0xff。 


Remarks

   当AlphaFormat参数为AC_SRC_ALPHA,源位图必须是32色。 如果不是,AlphaBlend函数将失败。

   当BlendOp参数为AC_SRC_OVER,源位图将根据源像素的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通道,则混合如下。
 Dst.alpha = Src.Alpha + (1 - Src.Alpha) * 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

 

Requirements 

OS Versions: Windows CE 5.0 and later.

Header: Imaging.h.

 

Reference:

MSDN: AlphaBlend     BLENDFUNCTION

互动百科: AlphaBlend  


 

 

转载于:https://www.cnblogs.com/Lisen/archive/2010/01/13/1646517.html

### CSS `mix-blend-mode` 属性详解 #### 一、什么是 `mix-blend-mode` CSS 属性 `mix-blend-mode` 描述了设置元素与其直接父元素的背景如何混合,通过不同的属性值,可以创建诸如叠加、滤色等多种视觉效果[^1]。 #### 二、支持的属性值及其作用 该属性接受多种模式作为其取值,每种模式都定义了一种特定的方式让两个图层相互影响: - **normal**: 默认值。无特殊混合行为。 - **multiply** (正片叠底): 结果颜色不会比原颜色更亮。黑色乘任何色都是黑;白色则保持不变。 - **screen** (屏幕): 效果正好相反于 multiply。结果总是较浅的颜色。 - **overlay** (叠加): 综合了 multiply 和 screen 的特性,取决于底层颜色是深还是浅。 - ... 更多其他选项如 darken, lighten, color-dodge 等也提供了丰富的可能性[^2]. #### 三、实例展示 为了直观感受这些不同模式带来的变化,这里给出几个简单的例子说明如何应用此属性: ##### 实现文字镂空效果 ```html <div class="backdrop"> <p class="text">Water</p> <div class="overlay"></div> </div> <style> .backdrop { position: relative; } .text { font-size: 7em; margin: 0; padding: 0; z-index: 1; } .overlay { background-color: rgba(0,255,255,.1); mix-blend-mode: multiply; /* 应用了multiply混合模式 */ width: 100%; height: 100%; position: absolute; top: 0; } </style> ``` 上述代码片段展示了当我们将一个半透明蓝色覆盖在一个文本之上并设置了 `mix-blend-mode: multiply` 后所得到的文字镂空样式[^4]。 ##### 创建双背景图像合成 另一个有趣的案例是在同一个容器内同时加载两张图片,并利用 `background-blend-mode` 来控制它们之间的交互方式: ```css .blend { height: 100vh; background-image: url('image1.jpg'), url('image2.jpg'); background-blend-mode: multiply; /* 使用multiply模式进行两幅图间的融合 */ background-size: cover; } ``` 这段样式的目的是使两张照片按照指定的比例相乘在一起形成新的色调组合[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值