讲 Alpha 混合的文章太多了,我并非要说有什么新的更好的算法,而是这些 Alpha 混合的文章都是基于一种特定的现实应用:在背景色上叠加一个半透明色。而 OpenPainter 的需求更具一般性:混合两个半透明颜色。也就是说,原始色也是有透明度的。

为此我首先用 PS 做了不少试验,试图推导出 Alpha 混合的公式。其实,一些简单的实验外加一些逻辑推理,成功了找到了 Alpha 混合的方法。这里为了计算上的方便,全部颜色分量值的取值范围都是 0 ~ 1。

首先是透明度值的计算。颜色在本质上是光的产物,假设把透明度理解为玻璃的透光性,则一切就变得很easy。比如一个 alpha = 0.2 的颜色,就能够将其想像为透光率为 80% 的彩色玻璃。我们透过这块玻璃看去,因为 80% 的光都透过了,因此留下来的颜色仅仅剩 20%,即所谓 0.2 的 alpha。如今我们来做一个混合:将 alpha 为 0.2 和 0.6 的颜色进行叠加。这时,我们有了两块玻璃,一块透光率为 80%,还有一块为 40%。一道光束穿过,经过 80% 透光率的玻璃时,光线强度剩下 80%,再经过 40% 透光率的玻璃时,光线进一步被削弱,仅仅剩下 80% * 40% = 32%。这意味着有 32% 的透明性,即 alpha = 0.68。

总结上面的算法,我们能够得出:

下一步,是依据已有的透明度来计算每一个通道的颜色分量。这其有用数学推导的方法更easy一些。我们已经知道,在背景色上怎样叠加半透明色,其 RGB 颜色分量的计算方法为:

那么,我们能够通过在背景色上叠加两个半透明颜色的不同方法来进行公式推导。第一种叠加方式:先在背景色上叠上第一个半透明颜色,再在叠好的结果上叠上第二个半透明颜色;另外一种方式则是先将两个半透明颜色叠好,再与背景色混合。即:

这两种混合方式的结果应当是全然一致的,则有

整理,得

这即是 RGB 模式下的 Alpha 混合公式。对于 CMYK 等其它模式,也能够用类似的方式推导。

参考:https://www.cnblogs.com/mfryf/p/3401503.html?_t_t_t=0.581313765142113

两个半透明颜色色的叠加计算方法相关推荐

  1. 在html图片上方叠加一个半透明颜色层,并在半透明颜色层上叠加文字

    话不多说,直接看代码,效果 效果图: html代码 <div class="bg_img"><!--图片--><img src="../ph ...

  2. 两个RGBA四通道颜色的叠加计算方法与代码实现

    叠加算法原理: 通过一些简单的实验外加一些逻辑推理,可以成功的找到 Alpha 混合的方法.这里为了计算上的方便,全部颜色分量值的取值范围都是 0 ~ 1. 首先是透明度值的计算.颜色在本质上是光的产 ...

  3. 用VB实现两幅图片半透明叠加

    代码很简单,就不解释了,演示VB如何实现两幅图片半透明叠加的效果. Option ExplicitPrivate Declare Function CreateCompatibleDC Lib &qu ...

  4. 你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。 抓取多少个就可以确定你肯定有两个同一颜色的果冻?(5秒-1分钟)

    你有一桶果冻,其中有黄色.绿色.红色三种,闭上眼睛抓取同种颜色的两个. 抓取多少个就可以确定你肯定有两个同一颜色的果冻?(5秒-1分钟) 分析: 1.里面有三种颜色时,需要4个 2.里面有2种颜色时, ...

  5. imageJ两张图像融合 我怎么叠加三通道 imageJ叠加

    imagJ如何将两张图像merge在一起_fK0pS的博客-CSDN博客_imagejmerge合并图片 一定程度上解决了问题. imageJ两张图像融合 我怎么叠加三通道 imageJ叠加 Over ...

  6. 两个RGB的颜色半透明混色算法

    各点像素的RGB值是按一定比例混合而成的,这个比例由Alpha值决定,具体算式见下:           Alpha   =   0   ~   100     R   =   (   R1   * ...

  7. 用opencv实现两张半透明png图片以一定透明度叠加

    例如我有如下两张透明.半透明图: 在photoshop中打开如下: 前景:一张四通道的png图,BGR通道的值全为[0,0,200],透明度完全靠alpha通道的不同值来体现. 后景:一张四通道的pn ...

  8. Android九点阵手势识别,能量黑科技模块八-九:两路按键颜色手势魔块

    8. 两路按键魔块 模块一共有两路硅胶按键,可以检测按键是否按下.当按键按下时,对应按键背后的红色LED会亮,并且返回触发信号,按键按下事件为真.另外按键键帽上可安装乐高十字插销. 8.1. 详细介绍 ...

  9. ubuntu16.04 Linux+xfce4的文件夹出现两种背景颜色+文件夹中右键打开终端失灵了.

    好不容易把xfce4的文件夹弄成了夜间模式,结果用着用着发现文件夹有两种颜色 可以看到一种豆沙绿,一种是黑色的. 这个问题困扰我好几个月了..总是用着用着就发现居然变成了两种颜色. 还有更稀奇古怪的, ...

最新文章

  1. Domain Model
  2. qgraphicsview鼠标移动图片_如何在中间鼠标的QGraphicsView中滚动QGraphicsScene?
  3. stlink 升级固件以后失败_STM32固件升级的一点经验
  4. [转]JQuery.Ajax之错误调试帮助信息
  5. python如何实现支持中文
  6. 解决 service、killall 等命令找不到的问题
  7. 推荐系统应该如何保障推荐的多样性?
  8. 华为机试-字符串通配符
  9. 【转载】卸载Sql Server 2014数据库
  10. 《Java语言程序设计》(基础篇原书第10版)第十二章复习题答案
  11. GBase 8c 备份控制函数(四)
  12. 国内可以使用的英文搜索引擎
  13. mvn install BUILD FAILURE : Downloading from central: https://repo.maven.apache.org/maven2/org/sp...
  14. 机器学习笔记~图像的空间分辨率
  15. python 合并word内容_python如何合并两个文档内容
  16. 使用Python玩转高等数学(2):幂函数
  17. EFR32MG裸机工程-2-LED
  18. excel将一个工作表根据条件拆分成多个工作表图文教程
  19. 自定义View中,四个参数的构造函数,其最后两个参数的含义
  20. 【PAT甲级】字符串处理及进制转换专题

热门文章

  1. Mac怎么设置wifi热点
  2. docker将已有的镜像打包成.tar.gz以及载入镜像
  3. 个人账号密码管理体系(账号篇)
  4. Ubuntu22的/tmp文件夹属性是 drwxrwxrwt rwt
  5. c语言标准更新,基础C语言的基础(19.12.1更新)
  6. 博弈论——P4101 人人尽说江南好
  7. 手机型号大全_打王者荣耀作弊神器大全?duck不必
  8. Cocos2d-JS大作《东邪西毒》上线 全新引擎产品线正式登场
  9. 超详细!模仿哔哩哔哩搭建静态网页
  10. activiti完成任务,设置下一节点处理人