叠加混合模式公式?
我有两种颜色:一种是动态设置的,另一种是始终白色的 0.5 alpha。我想计算生成的白色,就好像它是使用叠加混合模式绘制在动态颜色之上一样。
我知道叠加结合了正片叠底和滤色混合模式。
乘法混合模式的公式为:
Result Color = (Top Color) * (Bottom Color) /255
而屏幕混合模式的公式为:
Result Color = 255 - [((255 - Top Color)*(255 - Bottom Color))/255]
如何计算叠加混合模式的结果颜色?
是否有一个 UIColor 扩展类可以开箱即用?
I have 2 colors: 1 dynamically set and another that's always white 0.5 alpha. I want to calculate the resulting white color as if it was drawn on top of the dynamic color using Overlay blend mode.
I'm aware that Overlay combines Multiply and Screen blend modes.
Multiply blend mode's formula is:
Result Color = (Top Color) * (Bottom Color) /255
While Screen blend mode's is:
Result Color = 255 - [((255 - Top Color)*(255 - Bottom Color))/255]
How do I calculate the resulting color for the Overlay blend mode?
Is there a UIColor
extension class out there that does this out of the box?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
公式分为两部分:
第一部分:如果下层值> 127.5,则执行以下操作 -
值单位 =(255-下层值)/127.5
最小值 = 下层值 -(255-下层值)
叠加 =(上层值 * 值单位)+ 最小值
第二部分:如果下层值< 127.5,则执行以下操作:
Value Unit=Lower Layer Value/127.5
Overlay = Upper Layer Value * Value Unit
从公式中我们可以看出,最终的结果很大程度上取决于上层值。如果上层值较高(较亮),则最终结果更有可能较亮。
来自此处。
There are two part of formula:
First part: If Lower Layer Value > 127.5, then do the following -
Value Unit = (255-Lower Layer Value)/127.5
Min Value = Lower Layer Value - (255-Lower Layer Value)
Overlay = (Upper Layer Value * Value Unit) + Min Value
Second part: If Lower Layer Value < 127.5, then do the following -
Value Unit=Lower Layer Value/127.5
Overlay = Upper Layer Value * Value Unit
From the formual we can see that the final result is much depend on the upper layer value. If the upper layer value is higher(lighter), then the final result is more likely to be lighter.
From here.
继 willi 的回答之后,以下是将公式移植到代码中:
Following up on willi's answer, here's the formula ported to code:
我不知道你的目标,可能完全偏离主题,但为什么不直接使用 Quartz 2D 呢?
< code>CGBlendMode 通过
CGContextSetBlendMode
提供叠加、乘法、屏幕等等...:I have no idea of your goal, and might be completely off-topic, but why not just using Quartz 2D?
CGBlendMode
offers viaCGContextSetBlendMode
Overlay, Multiply, Screen and much more... :对于后代(因为这是谷歌的顶级结果),维基百科的公式更清晰、更简单。
这是它的伪代码版本。如果处理 1 字节颜色,则可以使用 255 和 127。
https://en.wikipedia.org/wiki/Blend_modes#Overlay
For posterity (since this is top google result), the wikipedia formula is cleaner and more straightforward.
Here is a pseudo-code version of it. You'd use 255 and 127 if you are dealing with 1 Byte colors.
https://en.wikipedia.org/wiki/Blend_modes#Overlay