创建一个不透明的UIColor,使其看起来与另一个半透明的UIColor颜色相同。

4

这个颜色

[UIColor colorWithRed:75.0/255.0 
                green:215.0/255.0
                 blue:100.0/255.0 
                alpha:0.5]

还有这个,使用不同的RGB值且没有透明度:

[UIColor colorWithRed:165.0/255.0 
                green:235.0/255.0 
                 blue:177.0/255.0 
                alpha:1]

如何让第一个UIColor变成和第二个UIColor在白色背景下看起来一样?


你是否总是在RGB色彩空间中工作? - DanZimm
2个回答

5

好的,答案将取决于了解背景颜色。假设backgroundColorsourceColor是UIColors,那么像这样的东西就可以工作:

float blend(float src, float srcAlpha, float background) {
  return (background + src * srcAlpha) / 2;
}
UIColor *result = [UIColor colorWithRed:blend([sourceColor red], [sourceColor alpha], [backgroundColor red])
                                    green:blend([sourceColor green], [sourceColor alpha], [backgroundColor green])
                                    blue:blend([sourceColor blue], [sourceColor alpha], [backgroundColor blue])
                                    alpha:1.0f];

虽然数字与您的示例不相等,但这是一种通用的合并函数,使内容更加通俗易懂。没有更多的示例,很难知道您的示例曲线是什么样子。您正在使用的混合功能似乎对每个颜色分量使用不同的比率,或者您测量的结果颜色值正在被屏幕的颜色配置文件调整。

你好,您介意再解释一下为什么/如何解决 OP 遇到的问题吗(我只是好奇)?非常感谢。 - Unheilig
当然,大多数其他答案实际上并没有给出新的颜色。如果您有一个50%透明度的纯黑色,并将其放在白色背景上,则会将50%透明度的1.0黑色转换为具有1.0 alpha的0.5黑色。我上面给出的混合函数正是这样做的。我写作时的其他答案展示了如何获取1.0黑色,并使用1.0 alpha而不是提供混合颜色的1.0黑色。 - Ecton

0

NilObject的答案不错,但我最终使用了更适合我的问题的东西。

我想要不同阴影的基础颜色是这个:

cell.backgroundColor = [UIColor colorWithRed:75.0/255.0 green:215.0/255.0 blue:100.0/255.0 alpha:1];

这是我的解决方案:

cell.backgroundColor = [UIColor colorWithRed:1 - (255-75)*rate/255.0 green:1 - (255-215)*rate/255.0 blue:1 - (255-100)*rate/255.0 alpha:1];

其中rate将替换alpha


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接