文章 "研究CCanvas类如何绘制透明的图形对象" - 页 6 123456789 新评论 Реter Konow 2019.02.05 10:31 #51 Nikolai Semko:彼得,这太简单了。这是给你的一项任务,让你掌握和巩固问题的精髓: - 如何将 ARGB(a1,r1,g1,b1)和 ARGB(a2,r2,g2,b2)两种颜色混合在一个图层中,而每种颜色都有自己的透明度 a1 和 a2?如果没有这种混合效果,就不可能将反锯齿对象正确地叠加在一起。快速浏览:在初始层颜色上,我们使用文章中描述的方法叠加第一个ARGB(a1,r1,g1,b1) 。 然后,在第一种颜色的基础上应用第二种颜色,根据相同的公式进行 ARGB 计算。只是这一次,底层颜色将是第一种颜色,我们将其放在原始图层颜色之上。 也许我错了,尼古拉,但为什么不可行呢? 我还没有做过实验,但第一种方法可能行不通,因为两个顶层的最终透明度计算错误。在这种情况下,您需要将中间图层与顶层图层混合,在获得它们的共同颜色后,将其叠加到原始图层上。 Nikolai Semko 2019.02.05 12:54 #52 Реter Konow:快速浏览:在初始层颜色上,我们使用文章中描述的方法叠加第一个ARGB(a1,r1,g1,b1) 。 然后,在第一种颜色的基础上应用第二种颜色,根据相同的公式进行 ARGB 计算。这一次,底层颜色将是第一种颜色,我们将其放在原始图层颜色之上。也许我错了,尼古拉,但为什么不可行呢?我还没有做过实验,但第一种方法可能行不通,因为两个顶层的最终透明度计算错误。在这种情况下,您需要将中间图层与顶层图层混合,在获得它们的共同颜色后,将其叠加到原始图层上。 这其实不是一件容易的事。但是,谁能独立解决这个问题,谁就能当之无愧地成为色彩大师。正因为没有这个公式,这篇文章的学术性就大打折扣了。 Dmitry Fedoseev 2019.02.05 13:26 #53 Nikolai Semko: 这其实是一个挑战,并不容易。但是,谁能独立解决这个问题,谁就能当之无愧地成为色彩大师。怎么做到的?你自己试验过吗?大概是将顶层颜色作为滤色镜使用,计算底层的每个分量(rgb)与顶层相应分量的水平和透明度的比例(这决定了有多少东西会从底层通过顶层)。 然后根据不透明度重新计算顶层分量的水平(这决定了有多少东西会留在顶层)。最后,计算底层和顶层每个分量的平均值(不是原始的底层和顶层,而是重新计算的,就像所写的)。我还没试过。或者直接将各部分按透明度比例相加。 我得做个实验...有趣的任务 Nikolai Semko 2019.02.05 13:35 #54 Dmitry Fedoseev:怎么做?您自己试验过吗? 我在四年前就解决了这个问题,但当时动了很多脑筋。如果我看到大家都在绞尽脑汁,却没人找到解决方案,我会把解决方案公布出来的。 Dmitry Fedoseev 2019.02.05 14:22 #55 Uffff...一切都变得简单多了,堆叠前无需过滤。只需按照透明度和不透明度的比例添加组件即可: r=lr*(255-Alpha)/255+ur*Alpha/255; g=lg*(255-Alpha)/255+ug*Alpha/255; b=lb*(255-Alpha)/255+ub*Alpha/255; Alpha:255--顶层不透明,0--完全透明。 lr, lg, lb - 底层的组成部分。 ur, ug, ub - 顶部的组成部分。在终端中,黑色背景,红色方块不透明,其上是透明度为 50%的蓝色,然后是透明度为 50%的黄色。 在 Photoshop 中也是如此: Nikolai Semko 2019.02.05 14:29 #56 Dmitry Fedoseev:Uffff...一切都变得简单多了,堆叠前无需过滤。只需按照透明度和不透明度的比例添加组件即可:Alpha:255 - 顶层不透明,0 - 完全透明。lr, lg, lb - 底层的组成部分。ur, ug, ub - 顶部的组成部分。 等我回到电脑前,我会尝试用这个公式混合两幅透明图像,看看会发生什么。:)) Dmitry Fedoseev 2019.02.05 14:30 #57 Nikolai Semko: 我会去我的电脑上,用这个公式把两张透明图片混合起来,看看会发生什么。:))如何混合两张透明图片?第一张叠加在背景上,然后第二张叠加在结果上。 一般来说,您也可以将两张透明图片折叠,然后叠加在背景上,但现在不谈这个。*** 学习 Photoshop 中的所有图层叠加方法会特别有趣。 Nikolai Semko 2019.02.05 16:35 #58 Dmitry Fedoseev:Uffff...一切都变得简单多了,堆叠前无需过滤。只需按照透明度和不透明度的比例添加组件即可:r=lr*(255-Alpha)/255+ur*Alpha/255; g=lg*(255-Alpha)/255+ug*Alpha/255; b=lb*(255-Alpha)/255+ub*Alpha/255;Alpha:255 - 顶层不透明,0 - 完全透明。lr, lg, lb - 底层的组成部分。ur, ug, ub - 顶部元件。在终端中,背景为黑色,红色方块不透明,其上是透明度为 50%的蓝色,然后是透明度为 50%的黄色。在 photoshop 中也是如此:并非如此... 关键是有 Alpha1 和 Alpha2。 因此,您不仅需要计算新形成的混合色,还需要计算新形成的透明度。 你基本上重复了文章作者的公式,将透明色与背景色混合: result=backgraund*(1-alpha)+foreground的公式: result=backgraund*(1-alpha)+foreground*alpha您的变体是正确的,但文章作者在一个简单的公式中犯了错误,有趣的是,Peter 还感谢 他提供了这个公式 :))))。 毕竟,你可以用肉眼看到作者的公式中很容易出现 uchar 溢出。奇怪的是,4 年来竟然没有人发现这个严重错误。 Nikolai Semko 2019.02.05 17:03 #59 这就是混合其他透明色的算法: Dmitry Fedoseev 2019.02.05 17:34 #60 为什么要将两个透明层混合后再涂抹?先涂一层,再涂另一层。 123456789 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
彼得,这太简单了。
这是给你的一项任务,让你掌握和巩固问题的精髓:
- 如何将 ARGB(a1,r1,g1,b1)和 ARGB(a2,r2,g2,b2)两种颜色混合在一个图层中,而每种颜色都有自己的透明度 a1 和 a2?
如果没有这种混合效果,就不可能将反锯齿对象正确地叠加在一起。
快速浏览:在初始层颜色上,我们使用文章中描述的方法叠加第一个ARGB(a1,r1,g1,b1) 。 然后,在第一种颜色的基础上应用第二种颜色,根据相同的公式进行 ARGB 计算。只是这一次,底层颜色将是第一种颜色,我们将其放在原始图层颜色之上。
也许我错了,尼古拉,但为什么不可行呢?
我还没有做过实验,但第一种方法可能行不通,因为两个顶层的最终透明度计算错误。在这种情况下,您需要将中间图层与顶层图层混合,在获得它们的共同颜色后,将其叠加到原始图层上。
快速浏览:在初始层颜色上,我们使用文章中描述的方法叠加第一个ARGB(a1,r1,g1,b1) 。 然后,在第一种颜色的基础上应用第二种颜色,根据相同的公式进行 ARGB 计算。这一次,底层颜色将是第一种颜色,我们将其放在原始图层颜色之上。
也许我错了,尼古拉,但为什么不可行呢?
我还没有做过实验,但第一种方法可能行不通,因为两个顶层的最终透明度计算错误。在这种情况下,您需要将中间图层与顶层图层混合,在获得它们的共同颜色后,将其叠加到原始图层上。
这其实是一个挑战,并不容易。
怎么做到的?你自己试验过吗?大概是将顶层颜色作为滤色镜使用,计算底层的每个分量(rgb)与顶层相应分量的水平和透明度的比例(这决定了有多少东西会从底层通过顶层)。 然后根据不透明度重新计算顶层分量的水平(这决定了有多少东西会留在顶层)。最后,计算底层和顶层每个分量的平均值(不是原始的底层和顶层,而是重新计算的,就像所写的)。我还没试过。
或者直接将各部分按透明度比例相加。
我得做个实验...有趣的任务
怎么做?您自己试验过吗?
Uffff...一切都变得简单多了,堆叠前无需过滤。只需按照透明度和不透明度的比例添加组件即可:
Alpha:255--顶层不透明,0--完全透明。
lr, lg, lb - 底层的组成部分。
ur, ug, ub - 顶部的组成部分。
在终端中,黑色背景,红色方块不透明,其上是透明度为 50%的蓝色,然后是透明度为 50%的黄色。
在 Photoshop 中也是如此:
Uffff...一切都变得简单多了,堆叠前无需过滤。只需按照透明度和不透明度的比例添加组件即可:
Alpha:255 - 顶层不透明,0 - 完全透明。
lr, lg, lb - 底层的组成部分。
ur, ug, ub - 顶部的组成部分。
我会去我的电脑上,用这个公式把两张透明图片混合起来,看看会发生什么。:))
如何混合两张透明图片?第一张叠加在背景上,然后第二张叠加在结果上。
一般来说,您也可以将两张透明图片折叠,然后叠加在背景上,但现在不谈这个。
***
学习 Photoshop 中的所有图层叠加方法会特别有趣。
Uffff...一切都变得简单多了,堆叠前无需过滤。只需按照透明度和不透明度的比例添加组件即可:
Alpha:255 - 顶层不透明,0 - 完全透明。
lr, lg, lb - 底层的组成部分。
ur, ug, ub - 顶部元件。
在终端中,背景为黑色,红色方块不透明,其上是透明度为 50%的蓝色,然后是透明度为 50%的黄色。
在 photoshop 中也是如此:
并非如此...
关键是有 Alpha1 和 Alpha2。
因此,您不仅需要计算新形成的混合色,还需要计算新形成的透明度。
你基本上重复了文章作者的公式,将透明色与背景色混合:
result=backgraund*(1-alpha)+foreground的公式:
result=backgraund*(1-alpha)+foreground*alpha您的变体是正确的,但文章作者在一个简单的公式中犯了错误,有趣的是,Peter 还感谢 他提供了这个公式 :))))。
毕竟,你可以用肉眼看到作者的公式中很容易出现 uchar 溢出。奇怪的是,4 年来竟然没有人发现这个严重错误。
这就是混合其他透明色的算法: