说明

使用OpenGL在一张rgba都为0.0的纹理上开glBlend(GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR)绘制线条后,再渲染到屏幕的时候发现有黑白。而PS的画笔工具在透明图层进行绘制的时候没有出现黑边。于是就有了研究PS颜色叠加混合的实现,下面只是推测…

PS的alpha叠加算法

在OpenGL表示为:glBlend(GL_ONE, GL_ONE_MINUS_SRC_COLOR)

# sa: 要绘制上去的alpha
# da: 已经在屏幕的alpha
def psAlpha(sa, da):return (sa + (1.0 - sa) * da)

PS的颜色叠加算法

如果要使用OpenGL实现就必须使用gl_LastFragData[0]这个数据,或者自己实现类似获取屏幕像素的rgba的功能。

# src: 要绘制上去的rgb
# dst: 已经在屏幕上的rgb
# sa: 要绘制上去的alpha
# da: 已经在屏幕的alpha
def psColor(src, dst, sa, da):alpha = ((1.0 - sa) * da) / psAlpha(sa, da)return (1.0 - alpha) * src + alpha * dst

完整代码

import numpy as np# src: 要绘制上去的rgb
# dst: 已经在屏幕上的rgb
# sa: 要绘制上去的alpha
# da: 已经在屏幕的alpha
def psColor(src, dst, sa, da):alpha = (sa * da) / psAlpha(sa, da)return (1.0 - alpha) * src + alpha * dst# sa: 要绘制上去的alpha
# da: 已经在屏幕的alpha
def psAlpha(sa, da):return (sa + (1.0 - sa) * da)# dst没有任何颜色的情况, 绘制第一个颜色
srcColor0 = np.array([70.0, 209.0, 201.0]) / 255.0
dstColor0 = np.array([0.0, 0.0, 0.0]) / 255.0
srcAlpha0 = 0.5
dstAlpha0 = 0.0# 绘制第一笔后: dst有颜色
dstColor1 = psColor(srcColor0, dstColor0, srcAlpha0, dstAlpha0)
dstAlpha1 = psAlpha(srcAlpha0, dstAlpha0)# 绘制第二个颜色
srcColor1 = np.array([226.0, 69.0, 69.0]) / 255.0
srcAlpha1 = 0.5dstColor2 = psColor(srcColor1, dstColor1, srcAlpha1, dstAlpha1)
dstAlpha2 = psAlpha(srcAlpha1, dstAlpha1)# 绘制第三个颜色
srcColor2 = np.array([255.0, 0.0, 204.0]) / 255.0
srcAlpha2 = 0.5
dstColor3 = psColor(srcColor2, dstColor2, srcAlpha2, dstAlpha2)
dstAlpha3 = psAlpha(srcAlpha2, dstAlpha2)print("---- 0 ----")
print(dstColor0 * 255)
print(dstAlpha0 * 255)print("---- 1 ----")
print(dstColor1 * 255)
print(dstAlpha1 * 255)print("---- 2 ----")
print(dstColor2 * 255)
print(dstAlpha2 * 255)print("---- 3 ----")
print(dstColor3 * 255)
print(dstAlpha3 * 255)

Photoshop画笔的混合算法实现(逆推)相关推荐

  1. 【YBT高效进阶】1基础算法/1逆推算法/2奇怪汉诺塔

    [YBT高效进阶]1基础算法/1逆推算法/2奇怪汉诺塔 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 汉诺塔问题,条件如下: 这里有 ...

  2. 递推算法5——逆推法之猴子摘桃问题

    逆推法是根据结果推出已知条件,推算方法与顺推法类似,只是需要将结果作为初始条件向前推算.比较典型的例子是猴子摘桃和存取问题 猴子摘桃 [问题描述] 猴子第一天摘了若干个桃子,当即吃了一半,还不过瘾,又 ...

  3. 递推算法6——逆推法之存取问题

    该存多少钱 小明打算为自己的三年研究生生活准备了一笔学费,一次性的存入银行,保证每年年底取出1000元,到第3年学习结束时刚刚好取完.假设银行一年整存零取得月息为0.31%,请问需存入银行多少钱? [ ...

  4. 程序算法之逆推法(口算猴子摘桃问题正解、详解)

    偶然间看到有篇猴子摘桃问题的博文,问题蛮有趣的,只是他的答案令人不敢恭维.....问题如下: 有一只猴子,摘了很多桃子,他每天吃掉一些,剩下的桃子比之前的全部的一半少一个.他吃了十天才吃完,请问他一共 ...

  5. 猴子吃桃的逆推c语言算法,经典算法题每日演练 猴子吃桃

    猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个.第二天早上又将剩下的桃子吃了一半,还是不过瘾又多 吃了一个.以后每天都吃前一天剩下的一半再加一个.到第10天刚好剩一个.问猴子第一天摘了多 ...

  6. 全排列及相关扩展算法(四)——原始中介数通过逆推求原排列算法

    1.中介数逆推原排列:上一章我们讲到了中介数,通过一个排列可以很方便地求数它的中介数,通过中介数也可以很方便地求出排位序号.但是通过中介数逆推原排列就不是那么容易了.因为我们每求一位数,都需要对比其前 ...

  7. 算法之地推算法(逆推法)

    逆推法实例:  小龙,每个月可以取出1000元.若在第48月小龙大学毕业时连本带息要取1000元,年利率是0.0171,那么至少要存多少钱? 则先要求出第47个月时银行存款的钱数   第47个月月末存 ...

  8. 算法第二节:逆推法解决“银行存款问题

    问题描述:母亲为儿子sun 4年的大学生活准备了一笔存款,方式是整取零存,规定sun 每个月月底取下一个月的生活费.假设银行年利息为1.71%,计算该母亲每个月至少要存入多少钱? 算法分析:可采用逆推 ...

  9. 独辟蹊径:逆推Krpano切图算法,实现在浏览器切多层级瓦片图

    独辟蹊径:逆推Krpano切图算法,实现在浏览器切多层级瓦片图 前言 1.功能简介 2.回顾krpano切图 3.krpano切图最常用的方式 4.瓦片地图金字塔模型 ==正片开始== 5.前置知识介 ...

最新文章

  1. java11 是长期支持_这里有你不得不了解的Java 11版本特性说明
  2. [Flex]Flex SDK 4(Gumbo)更方便的自定义样式、自定义SparkSkin(三)
  3. 但凡网络工程师会这个技能,也不至于天天抱怨工资低
  4. netbeans项目缺少服务器,Netbeans,添加Glassfish服务器“不存在”
  5. Java-Map从入门到性能分析2【HashMap的底层原理、构造方法优化、常用方法】
  6. 五大板块(1)—— 数组的定义,赋值与应用
  7. lua元表(简单例子)
  8. windows下eclipse调试hadoop详解
  9. spring的部分注释
  10. Bailian4007 计算字符串距离【DP】
  11. UVa12545 - Bits Equalizer
  12. weblogic + apache 负载均衡与Session复制
  13. linux .deb后缀文件,tar.gz和bin,以及rpm,deb等linux后缀的文件的区别
  14. 华三s5000配置镜像接口_H3C系列交换机端口镜像的配置
  15. 抖音下载助手GUI版 主页视频批量下载
  16. 宝塔Linux面板 软件商店中安装不了任何php版本的解决方法
  17. 【牛尔】【小p】这些美容强男的超级秘籍!!!丝般肌肤毛孔看不见,清透小面颊,丝滑小脸蛋儿,你难道不想拥有吗————【收缩毛孔的最佳方法】(一夜之间6万浏览量,大师的感召力和信服力就是强啊!)
  18. 直播画面已被主播锁定!输入正确的密码后可解锁画面。斗鱼直播主播锁定画面解锁方法(网页版)
  19. 【Lua编程基础】Lua编程SciTe和SublimeI的配置和使用
  20. java中的集合详解

热门文章

  1. NYOJ 661 亲亲串
  2. 嘿!不用太过于担心的单点故障
  3. [动规] hihocoder 1149 回文字符序列
  4. 用 Ubuntu 重置 Windows 密码
  5. Xming + PuTTY 在Windows下远程Linux主机使用图形界面的程序
  6. linux父子进程之间之间的区别与联系
  7. 根据工作年限预测工资python代码实现
  8. c++学习笔记之指向对象的指针以及对象数组
  9. 机器学习导论(张志华):基本概念
  10. Python学习笔记: Python 标准库概览