AlphaBlend有BUG?

半透明AlphaBlend函数简析&SOUI在GDI渲染下text控件不能设置半透明解决方案 AlphaBlend简析函数功能:该函数用来显示透明或半透明像素的位图。 函数原型:BOOL AlphaBlend( HDC hdcDest, // handle to destination DC int nXOriginDest, // x-coord of upper-left corner int nYOriginDest, 阅读详情

AlphaBlend函数的作用(msdn上的说明,不翻译了):The AlphaBlend function displays bitmaps that have transparent or semitransparent pixels

我使用AlphaBlend的目的是正常显示一个带透明效果的png图片,看了些文章,alpha混合的公式大概如下:

R(C)=alpha*R(B)+(1-alpha)*R(A)
G(C)=alpha*G(B)+(1-alpha)*G(A)
B(C)=alpha*B(B)+(1-alpha)*B(A)

自然通过该公式可以自己写代码实现alpha混合,但显然vb的效率没有调用win api的高,于是还是希望能采用AlphaBlend进行处理.

刚开始并没有仔细研究AlphaBlend的运作方式,只是尝试了几个png文件,发现显示正常,就算了,没有深究.后来遇到一些带alpha通道的BMP文件,发现用AlphaBlend无法正常显示,于是才仔细的看了AlphaBlend的说明.

AlphaBlend有个参数是BLENDFUNCTION类型的,此类型有个AlphaFormat ,如果设为AC_SRC_ALPHA ,那么AlphaBlend就会对源图象的每象素做alpha混合,msdn对此常量有如此解释

This flag is set when the bitmap has an Alpha channel (that is, per-pixel alpha). Note that the APIs use premultiplied alpha, which means that 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 prior to the call.

在此可以看出,处理时,首先会将每个分量(R,G,B)乘以对应的alpha值,这里可以看为是应了前面公式中的 alpha*R(B),接着在Remark中又提到,会做如下处理:

Dst.Red= Src.Red+ (1 - Src.Alpha) * Dst.Red

这里有个疑问,做这个处理的时候,前面提到的alpha*R(B)已经做了吗,假设是做了,那么为何显示不正确?尝试修改各参数,未果.难道是图象文件本来就有问题?于是尝试通过上述公式用代码来实现.于是发现显示正确,但是如果在R(C)=alpha*R(B)+(1-alpha)*R(A)中,如果去掉alpha*,也就是变成,R(C)=R(B)+(1-alpha)*R(A),显示出来的图象与用AlphaBlend处理的结果是一样的,那么这样子,几乎就可以肯定AlphaBlend采用的公式确实是:

Dst.Red= Src.Red+ (1 - Src.Alpha) * Dst.Red

但,为何对png图片又能正确显示呢?因为这里读取出来的png文件,alpha值较小的象素是黑色,这样最终合成的结果就不会有影响,而后来遇到的bmp文件,这些值很多是亮色(如,白),如果缺少了那么个乘法处理,影响将会是巨大的.

是bug吗?从公式上看AlphaBlend存在严重的错误,但ms不可能不知道,那就是我的用法问题,某些参数没设置正确?曾尝试了多种组合,未果.或者是我的用法不正确吧...

Unity3d Shader篇(十四)— 透明度混合(AlphaBlend)的深度优化与实战避坑 本文深入探讨了Unity3D中透明度混合(AlphaBlend)的深度优化与实战避坑技巧。通过分析深度测试与写入的平衡、混合公式的性能代价以及移动端优化策略,帮助开发者解决半透明物体渲染中的常见问题,提升游戏性能与视觉效果。特别针对Shader编写中的关键设置和高级混合技巧提供了实用建议。 阅读详情

相关推荐

导带、价带

价带是电子的“束缚态”能量区间,决定材料的化学性质;导带是电子的“自由态”能量区间,直接决定材料的导电能力;禁带宽度则是区分金属、半导体与绝缘体的核心参数。通过调控能带结构(如掺杂、应变工程),可设计出具有特定电学和光学特性的功能材料,推动电子信息、能源转换等领域的技术革新。

weixin_51552564的博客 5116

关于CImage和AlphaBlend的透明PNG图片显示问题

PNG图片的透明背景总是一片白色,后来才发现这其实是微软GDI+的设计问题,PNG图片是ARGB,使用GDI+载入图片的时候,GDI+会默认已经进行了预剩运算(PARGB),即每象素的实际值是已经和ALPHA值按比例相乘的结果,实际上它根本就没有做预乘,在使用透明图片的象素ALPHA通道的时候,CImage内部正是调用的AlphaBlend,没有预乘的图当作预乘的图片处理的结果就是这相当于一张和纯

mergerly的专栏 6965

华为防火墙双线路配置实战:5分钟搞定主备自动切换(含健康检查避坑指南)

本文详细介绍了华为防火墙双线路配置实战,包括主备自动切换和健康检查机制的优化技巧。通过智能健康检查机制,华为防火墙能实现毫秒级故障自动切换,确保网络高可用性。文章提供了从架构设计到实战配置的全流程指南,并分享了常见配置误区与解决方案,帮助中小企业快速搭建稳定可靠的网络架构。

weixin_30872337的博客 604

AlphaBlend StretchBlt BitBlt

http://www.cnblogs.com/lisen/archive/2010/01/13/1646517.html AlphaBlend    该函数显示拥有透明或半透明像素的位图。  Syntax BOOL AlphaBlend(    HDC   hdcDest,    int     nXOriginDest,  int   nYOriginDest,  int   nWid...

weixin_34307464的博客 249

Rockchip RK3568实战:手把手教你调试I2S音频驱动(附ALSA设备树配置详解)

本文提供Rockchip RK3568平台I2S音频驱动的实战调试指南。详细解析了从硬件连接到软件配置的全过程,重点涵盖ALSA驱动框架下的设备树配置、时钟计算、DMA参数设置以及常见问题(如无声、爆音)的排查与解决方法,帮助开发者快速定位并解决音频驱动难题。

weixin_28358083的博客 495

从Delta Delay到Timing Window:详解数字芯片后端时序差异的那些坑

本文深入剖析了数字芯片后端设计中,模块级与系统级时序分析结果不一致的核心原因。重点解释了Delta Delay如何导致模块级分析的乐观假设,以及Timing Window(时序窗口)差异如何通过影响串扰噪声计算,在顶层集成时引发新的时序违例,尤其是保持时间问题。文章为工程师提供了从约束建模到签核策略的系统性应对方案。

beer8的博客 498

将Form的AlphaBlend属性设置为True,之后调整Form的AlphaBlendValue属性,255为不透明,数字越小透明度越大~~~想显示文字用l...

将Form的AlphaBlend属性设置为True,之后调整Form的AlphaBlendValue属性,255为不透明,数字越小透明度越大~~~想显示文字用lable就行哈~~~直接在窗体上写字就行了。Self.Canvas.TextOut(0, 0, 'Hello!');实在不行就将form的TransparentColor打开将form颜色设置好然后将form的颜色设置到Trans...

dkopg24406的专栏 343

基于STM32设计的便携式心电信号监测系统_146

基于STM32 设计的便携式心电信号监测系统,采用 PulseSensor 心率传感器进行数据采集,通过 LCD 显示屏显示心电数字数据和采集状态。同时,该系统还采用 HC05 蓝牙模块将实时心电信号数据传输到手机 APP,用户可以在手机 APP 上实时查看采集的数据并绘制心率曲线。此外,STM32 上的按键可以控制心率采集状态,用户登录手机 APP 还可以查看实时心电信号折线图。

1万+

UI上使用RenderTexture显示模型+AlphaBlend特效

显示不全,到我的Github: https://github.com/garsonlab/RenderTuxture-AlphaBlend 解决Unity粒子在使用AlphaBlend模式时,在摄像机拍摄渲染RenderTexture时与相机背景融合问题 原 UGUI研究院之在UI上使用RenderTexture显示模型+AlphaBlend特效(二十五) 有一个解决方案,但是实测效果非常非常...

weixin_30800987的博客 667

【机器视觉】基于深度学习的托盘PCB识别与计数(有无、正反)

工业机器视觉是指在制造业和工业环境中使用计算机视觉技术来执行检测、测量、识别和控制任务。它结合了硬件(如相机、镜头、光源)与软件(图像处理算法)来自动完成传统上需要人工视觉的任务,从而提高生产效率、产品质量以及工作安全性。工业机器视觉系统通常具有高精度、高速度和高可靠性,能够适应恶劣的工作环境。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

1-Spring Security OAuth2专栏介绍

我自己 我是码农小胖哥,一名后端软件工程师,有多年的后端开发经验,同时也是一名热衷于技术分享、拥抱开源的技术博主。我的技术栈主要是Java、Python、Kotlin,欢迎各位同行进行交流和分享。 个人技术公众号:码农小胖哥 个人博客:https://felord.cn Gitee: https://gitee.com/felord 你可以通过以上方式和我交流、解决学习中的疑难杂症。 2021年开源Spring Security 干货系列教程,2022年又开源Spring Security进阶版,帮

码农小胖哥 7935

使用WTL::CBitmap时需要注意的一个事项

CBitmap::LoadBitmap可以从EXE模块中获取指定资源的位图句柄(HBITMAP),该函数内部使用WIN32 API:LoadBitmap加载资源。仔细查看API LoadBitmap的remark部分,可以发现该API加载后得到的位图是一个“设备相关的位图”。这样就存在一些缺陷:这种位图无法选入到打印机中;如果当前的系统配置改变,加载得到的位图也会跟着改变。本人在实际项目中

lyclowlevel的专栏 1269

⑩电子产品拆解分析-家用无线遥控开关433Mhz

①免布线随意贴,装上就能使用解决单线开关烦恼;②遥控配对简单,无线通讯距离长,信号可穿墙;

a6662580的博客 4690

MMX AlphaBlend 32位 高速透明混合

<br />这里的MMX AlphaBlend的方法与网上流传甚广的MMX混合代码完全不同。<br />基于同一个公式但是核心代码更少 且作了优化 。<br />感谢ksni2000修正一处bug。<br /> <br />更新日志<br />2010-8-6:修正优化后的一个Bug<br />2010-7-24:根据Intel的手册进行了下MMX代码优化 减少核心时间<br />2010-6-22:修正Bug<br /><br /><br />32bit AlphaBlend [2010-7-24 U

captain_x的专栏 1545

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

[源码和文档分享]使用AlphaBlend函数实现位图半透明绘制

背景 自己使用VC和VS写过很多小游戏,而且不是用现成的游戏引擎,纯粹是使用GDI函数来进行绘图。所以,积累了一些绘图的经验。 那么,对于位图半透明的绘制,在小游戏中使用也比较多。例如烟雾、光等之类的绘制。在没有了解 AlphaBlend 函数之前,绘制半透明位图都是获取两张图片的RGB数据,然后按指定透明度计算出混合后的RGB的值,再显示出来...

qq_38474647的博客 275

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

OpenGL/DirectX高级编程Bug

低级编程错误的根由是粗心造成的,而这里所谓高级编程错误源自各版本驱动程序的Bug和一些不合理的API接口,此类错误通常令人吐血,出现一个都要耗费数小时甚至数天来解决,这是个实际经验累计的过程,痛苦而又必要.1.要求D3DXCreateTexture创建D3DFMT_A8R8G8B8格式纹理,在某些显卡(MX4000,Intel82815,FX5200)的某些驱动程序环境下,会意外地返回D3DF...

weixin_33704591的博客 153

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

利用API函数实现图像淡入淡出效果 (转)

利用API函数实现图像淡入淡出效果 (转)[@more@]利用api函数实现图像淡入淡出效果 一般传统的实现两个PictureBox之间图像的淡入淡出效果都需要使用大量的API函数并进行复杂的调色板以及 绘图设备(D...

ciya3282的博客 176

技术层面上解释,永劫无间中,站在三娘的f3水球中为何某些材质会消失?

Alphablend,透明材质的影响

qq_47767169的博客 503

Cocos2d-x2.1.1-ClippingNodeTest深入分析(二)

[Cocos2d-x相关教程来源于红孩儿的游戏编程之路优快云博客地址:http://blog.youkuaiyun.com/honghaier 红孩儿Cocos2d-X学习园地QQ3群:205100149,47870848 Cocos2d-x2.1.1-ClippingNodeTest深入分析(二)       用冯巩的一句台词:“好久不见,我可想死你们啦!”。红

红孩儿的游戏编程之路 6131

图形图像处理-之-任意角度的高质量的快速的图像旋转 上篇 纯软件的任意角度的快速旋转

(2009.03.09  可以到这里下载旋转算法的完整的可以编译的项目源代码:  http://blog.youkuaiyun.com/housisong/archive/2009/03/09/3970925.aspx  ) (2007.06.22 优化PicRotary3加快13.6%,优化PicRotarySSE加快6.1%,             尝试了一下使用SSE2的写缓冲优化MO

借你一秒 1962
上一篇: 读取BMP
下一篇: 最近做了几套工具栏图标
lingll
博客等级 码龄26年 91粉丝 123原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值