【问题标题】:Color calculations: increase alpha but maintain the same color appearance over a white background颜色计算:增加 alpha 但在白色背景上保持相同的颜色外观
【发布时间】:2014-06-08 01:38:59
【问题描述】:

一般问题:

如何计算颜色的 RGB 值,如果我更改 alpha 分量,颜色在白色背景上看起来保持不变?

其他问题:

我怎样才能做到这一点,但使用非白色背景颜色?

注意事项:

  1. 我知道,这不可能适用于所有颜色。例如 rgba(1,0,0,1) 的第一个参数不能增加以补偿像 rgba(1.1,0,0,0.9)

    李>
  2. 这对于本例中的单色颜色来说是微不足道的:

我目前的用例:

我正在开发一个带有略微透明状态栏/导航栏的 iOS 应用程序。该栏应该与内容视图中的某些(不透明)对象具有相同的颜色。如果我对条形应用相同的颜色,但内容的 alpha 为 95%,那么条形当然看起来更亮。
对于类似的网络应用,我还需要一个带有 css 的解决方案。

【问题讨论】:

    标签: ios css math colors uicolor


    【解决方案1】:

    所以我知道这个问题现在已经快一年了,但我遇到了同样的问题并找到了解决方案,所以我想我会分享它。这方面的术语是“alpha compositing”,维基百科有一篇很棒的文章。

    http://en.wikipedia.org/wiki/Alpha_compositing

    在您的情况下,您正在将颜色与完全不透明的白色 rgba(255,255,255,1) 合成。

    我做了一个excel计算器来做这个。我不知道如何将单元格值本身放入 StackOverflow,所以这是论坛的屏幕截图。橙色单元格供您输入。

    然后您可以更改 A10-A13 来定义您的初始颜色和 D10 来指定您想要的 alpha。

    Combined known colors           
        Color 1 Color 2 Combined
    A   0.15    1   =$B$3+$C$3*(1-$B$3)
    R   255 255 =(1/($D$3))*(B4*$B$3+C4*$C$3*(1-$B$3))
    G   0   255 =(1/($D$3))*(B5*$B$3+C5*$C$3*(1-$B$3))
    B   0   255 =(1/($D$3))*(B6*$B$3+C6*$C$3*(1-$B$3))
    
    1 Known Color, Known result Alpha           
        Color 1 Color 2 Combined
    A   0.15    =(D10-B10)/(1-B10)  0.85
    R   255 255 =(1/($D$10))*(B11*$B$10+C11*$C$10*(1-$B$10))
    G   255 255 =(1/($D$10))*(B12*$B$10+C12*$C$10*(1-$B$10))
    B   0   255 =(1/($D$10))*(B13*$B$10+C13*$C$10*(1-$B$10))
    

    【讨论】:

      【解决方案2】:

      使用[UIColor colorWithRed:191.0/255.0 green:127.0/255.0 blue:127.0/255.0 alpha:1.0]

      如果您希望不透明度值为 90%,请将 alpha 设置为 0.9

      编辑:您无法获得具有不透明度的另一种颜色的确切颜色,相反,拥有纯色 RGB 并添加不透明度值总是好的。

      【讨论】:

      • 我不认为这是在回答问题。
      【解决方案3】:

      不要将 .95 alpha 颜色设置为模拟不透明颜色,也许您应该尝试做相反的事情并使用具有透明度的视图作为指导来设置不透明颜色。

      这样,您可以使用 CG 图像上下文组合两个视图 - 一个具有低于 0.95 alpha 背景颜色之一的纯白色背景颜色 - 然后获取结果视图的像素颜色,您可以然后设置为不透明视图的颜色。

      这是一个关于如何获取像素颜色的好答案:How to get the color of a pixel in an UIView?

      【讨论】:

      • 就我而言,“指南”颜色来自客户提供的图像,因此我无法按照您的建议进行操作。但是,对于其他用例,这可能是一种可行的方法。此外,我希望有人可以提供一些有关这方面数学的见解。
      【解决方案4】:

      好的,我有一个针对我的用例的解决方法,我想分享一下。

      但这并不是我最初的问题的答案,即调整颜色所需的数学计算。
      我仍然对“真实”的答案非常感兴趣!

      无论如何,这是我的解决方案:
      我正在将我的所有 viewController 视图的背景颜色属性设置为没有 alpha 的原始颜色。我为此使用了尺寸为 1x2048 像素的 patternImageColor,其顶部 64 个像素为原始条形颜色,其余为表格背景颜色。 原始条形颜色通过半透明条形颜色闪耀,再次呈现原始颜色。在“之间”滚动的内容条和背景仍然通过条闪耀。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-15
        • 2020-04-04
        • 2016-11-24
        • 2014-04-07
        相关资源
        最近更新 更多