登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> CLQ工作室开源代码 >> 主题: ⭐Alpha算法合集 [TPngObject][AlphaBlend][预乘]     [回主站]     [分站链接]
标题
⭐Alpha算法合集 [TPngObject][AlphaBlend][预乘]
clq
浏览(650) + 2020-04-13 23:00:42 发表 编辑

关键字:

[2023-09-24 00:59:46 最后更新]
⭐Alpha算法合集 [TPngObject][AlphaBlend][预乘]

在打算提取 TPNGObject 的 alpha 半透明算法的时候惊奇地发现, TPNGObject 的透明图片最终输出仍然用的是传统的 BitBlt 。研究了半天还以为是 windows 的这个函数有什么特殊格式的数据能生成透明的图形。
其实是 TPNGObject 自己取了父控件的背景然后再自己实现了 alpha 混合算法再把合成的图片覆盖父控件的背景!

而我早就知道了 delphi 2010 及之后和 TBitmap 是用 AlphaBlend 的系统函数来绘画的,一直奇怪为什么官方 delphi 难道不知道 BitBlt 的"隐藏"参数吗?原来原因在这里。
参考
TPngObject.DrawPartialTrans

另 TPngObject 已经包含在 delphi2010及之后的版本中了。

而使用 AlphaBlend 函数有个巨坑 -- 那就是各个 rgb 参数必须先经过所谓的 "预乘"。关于"预乘"的说法要不不全,要不根本就是错误的。
实际上非常简单,就是每个 rgb 值在乘上自己的 alpha 值,这个值是在 0 到 1 之间的浮点数,但浮点数显然不能使用在 rgba 这样的 byte 中,所以就映射为了 0 到 255 的值,需要用到时再除以 255.
所以"预乘" 的算法实际上就是 r (或者gb) = r (或者gb) * alpha

换成 255 字节的 alpha 表示,实际就是 r = r * a / 255 而在 delphi 中就是 r = r * a div 255 了。

你一定会说,我 X ,为什么不直接提供直接使用 255 的版本,这样用着太容易错了。原因据说是游戏图形中还有很多要用到 "预乘" 后的结果的,估计 windows api 的设计者一想,那就还是要 "预乘" 的参数吧,否则就要提供两个
api 函数了。说实在的 api 接口函数尽量少是应该的,但你 windows 功能相似的函数也不少啊 ......

另外一点,这其中的 rgba 中的只有 rgb 需要 "预乘" ,而 a 即 alpha 值本身是不用 "预乘" 的。

关于 alpha 还有很多内容,所以这是一个"合集",还会有其他相关文章的源码发出来给大家参考的。











clq
2020-04-13 23:06:37 发表 编辑


参考

图片Alpha预乘的作用
原创 麻木了 最后发布于2020-03-25 17:35:31 阅读数 23 收藏
展开

为什么要有预乘透明度呢

因为Alpha-Blending,所谓Alpha-Blending,其实就是按照“Alpha”混合向量的值来混合源像素和目标像素,一般用来处理半透明效果。

混合公式:最终图像 = 第一张图的RGB*第一张图的的alpha通道+第二张图的RGB*(1-第一张图的的alpha通道)

透明度叠加原理(先不管是哪种叠加方式 或者alpha叠加 或者加减色叠加)是需要将alpha大小乘入RGB每个通道的为了图片叠加时候减少计算机预算量,所以会提前对图片RGB通道进行alpha合成预计算,然后就会导致处理后的图片(被称之为premultiplied 预乘图片)变得有些暗
————————————————
版权声明:本文为CSDN博主「麻木了」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012861978/java/article/details/105099660


总数:1 页次:1/1 首页 尾页  
总数:1 页次:1/1 首页 尾页  


所在合集/目录
alpha 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1