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

AlphaBlend - [Daily APIs]相关推荐

  1. GetDC、GetDCEx、GetWindowDC - [Daily APIs]

    原文地址::http://www.cnblogs.com/Lisen/archive/2010/01/22/1654384.html 相关网帖 1.GDI编程小结----http://www.360d ...

  2. Top 50 Most Popular APIs on RapidAPI (2018)

    You may be asking yourself: "What are the most popular and used APIs out there?" Ready to ...

  3. 12.VC(ui)-AlphaBlend参数BLENDFUNCTION

    AlphaBlend是Window自带的GDI函数,在作GUI的时候为了达到更漂亮的效果我们常常用它. BLENDFUNCTION是AlphaBlend用控制透明效果的重要参数. 定义如下: type ...

  4. eBay宣布发布全新的购买和销售APIs

    eBay最近宣布发布两款全新的购买和销售APIs.这些APIs旨在促进eBay产品在第三方应用程序中的更好集成.eBay于10月19日在他们的博客上发表了几篇文章,不仅详细介绍了这些全新的购买和销售A ...

  5. 使用MSBuild实现完整daily build流程

    一.MSBuild 在微软软件开发中,每日构建是最重要的过程之一,被称为微软产品开发的"心跳".简单来看,每天构建系统将整个产品解决方案完整构建一遍,生成的目标文件和安装文件被放置 ...

  6. 14Web APIs简介

    技术交流QQ群:1027579432,欢迎你的加入! 1.Web APIs和JS基础阶段之间的相关性 JS的组成如下: JS基础阶段 学习ECMAScript标准规定的基本语法: 掌握JS的基础语法: ...

  7. Daily Scrum 10.27

    今天毛宇已经完成了游戏每个模块的整体设计,并且大家聚在一起,对这些模块进行了具体的讨论和分析,包括模块的具体功能.接口.模块儿间的交互,以及注释的规范等等.大家看到彼此都能够按时完成任务,并且同步地进 ...

  8. Daily Storm - 31/10/12

    今天是 2012 年 10 月 31 日 这是我们的第一次Daily Scrum. 在那之前我们,我们走的是Weekly Scrum. 首先汇报一下改变世界的项目进展: Glede: { 前几天干了啥 ...

  9. 739. Daily Temperatures

    为什么80%的码农都做不了架构师?>>>    Description Tag:Stack, Hash Table Difficulty: Medium Given a list o ...

  10. How to Enable Trace or Debug for APIs executed as SQL Script Outside of the Applications ?

    In this Document   Goal   Solution   1: How do you enable trace for an API when executed from a SQL ...

最新文章

  1. linux 位置参数数组,JavaScript数组详解
  2. 同一网段还是跨VLAN的取舍
  3. 倒排索引优化 - 跳表求交集 空间换时间 贪心
  4. STM32 RTC BKP备份数据区数据丢失问题的讨论
  5. python sub 不区分大小写_Python网络爬虫入门篇
  6. you-get 一个下载视频的好工具
  7. Mysql数据备份恢复及主从同步
  8. .net Int16 、(int Int32)、 Int64 的区别
  9. CVPR 2020 顶会 AI学术检索工具
  10. 定期存款可以提前取出来吗_定期存款、约定转存、自动转存和自己取出来转存有什么不同?...
  11. V8 引擎是如何工作的?
  12. javascript学习----window对象的学习与总结
  13. Android无埋点数据收集SDK关键技术解析
  14. 30岁哥大计算机博士生遇刺身亡,论文刚被顶会接收,曾留学中国
  15. 4246. 【五校联考6day2】san (Standard IO)
  16. AS SSD软件查看信息说明
  17. 沧海一声笑(最好版)
  18. Ubuntu安装软件时报错(报错:dpkg: 处理软件包 xxx (--configure)时出错: 依赖关系问题 - 仍未被配置)
  19. 第八次网页前端培训(JavaScript)
  20. 再聊面试,这次关于钱,关于培训,关于内卷

热门文章

  1. python卸载pip_Python 包 卸载方法
  2. 人工智能、大数据、数据挖掘、机器学习-数据集来源
  3. ubuntu 服务器 ip修改,修改Ubuntu server ip地址
  4. 【并联机构工作空间分析系列1】 多个圆/圆环求交 得到重叠部分边界 Matlab程序
  5. JavaScript基础知识1
  6. 机器学习识别图片的基本原理
  7. 利用场景法设计atm自动取款机的测试用例_黑盒测试之场景法
  8. 免费图片识别文字软件-办公利器
  9. matlab三维极坐标天线方向图,天线方向图(Antenna Pattern)
  10. 图文详解VxLAN技术(二)