AlphaBlend 详解

AlphaBlend 详解AlphaBlend nbsp nbsp 该函数显示拥有透明或半透明像素的位图 nbsp SyntaxBOOL nbsp AlphaBlend nbsp nbsp nbsp HDC nbsp nbsp hdcDest nbsp nbsp nbsp nbsp int nbsp nbsp nbsp nbsp nXOriginDest nbsp int nbsp nbsp nbsp nYOriginDest nbsp int nbsp nbsp nbsp nWidthDest nbsp int nbsp nbsp nbsp nHeightDest nbsp nbsp nbsp nbsp HDC nbsp nbsp nbsp hdcSrc nbsp nbsp nbsp

 

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

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

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

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






Header: windows.h 

Library: coredll.lib 

 

BLENDFUNCTION

 

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

Syntax

typedef struct _BLENDFUNCTION {

  BYTE  BlendOp;

  BYTE  BlendFlags;

  BYTE  SourceConstantAlpha;

  BYTE  AlphaFormat;

 

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。 

   当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






版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199741.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 下午12:19
下一篇 2026年3月20日 下午12:19


相关推荐

  • ubuntu命令chmod755

    ubuntu命令chmod755使用方式:在终端切换到文件目录输入chmod775hello.py这样就将hello.py变成了可执行文件当然作为python文件还需要再开头加上#!/usr/bin/envpython用于适应linux环境。chmod是Linux下设置文件权限的命令,后面的数字表示不同用户或用户组的权限。一般是三个数字:第一个数字表示文件所有者的权限第二个数字表示与文…

    2022年7月16日
    39
  • Hibernate连接mycat实现多租户[通俗易懂]

    Hibernate连接mycat实现多租户[通俗易懂]Hibernate连接mycat实现多租户

    2022年4月25日
    116
  • Spring整合MyBatis——超详细

    Spring整合MyBatis——超详细Spring整合MyBatis——超详细一、Spring整合MyBatis的三个关键点二、整合步骤1、创建一个Maven项目2、在pom.xml文件中添加jar包的依赖2、配置MyBatis文件(1)新建一个实体类的包和User实体类(2)编写实体类(3)新建Mapper接口包和UserMapper接口(3)新建jdbc资源文件jdbc-config.properties(4)新建mybatis配置文件mybatis.xml(5)新建logj4j的日志配置文件log4j.properties

    2022年6月5日
    50
  • HUE beeswax中文显示问题的解决方案

    HUE beeswax中文显示问题的解决方案HUE 是 Cloudera 推出的 Hadoop 生态系统的 Web 访问接口 基于 PythonDjango 开发 在使用过程中发现 如果提交的 SQL 语句中有中文的注释 提交之后 整个语句将会保存在后端的 MySQL 历史表中 但是再次去查看历史记录的时候 其中的中文却显示成一串问号 显然 这种问题是因为数据库编码问题导致的 为了解决这个问题 可以做如下的操作 1 修改 MySQL 的配置文件 e

    2026年3月18日
    1
  • Ubuntu18.04下VIM安装及配置

    Ubuntu18.04下VIM安装及配置作者:陈浩 更新日期:2018-09-211.安装VIM $sudoapt-getinstallvim我的vim已经是最新版(2:8.0.1453-1ubuntu1)。2.安装vim-plug一种方便简洁的插件管理插件终端输入如下命令: $curl-fLo~/.vim/autoload/plug.vim–create-dirshttps://raw.gi…

    2022年9月30日
    5
  • c++中的析构函数

    c++中的析构函数印象中 c 的析构函数是会自动调用 但是今天运行程序的时候 却没有进入到我写的析构函数 让我不禁怀疑 最终到底析构了没有 还是暗自调用了系统的析构 所以来记载一下析构的知识 以下属转载 原文博客地址 https www cnblogs com puyangsky p 5319470 html 一 定义 1 作用 对象消亡时 自动被调用 用来释放对象占用的空间 2 特点 1

    2026年3月16日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号