【问题标题】:Going from black to green with limited input factor在有限的输入因子下从黑色变为绿色
【发布时间】:2012-05-01 20:57:04
【问题描述】:

我怎样才能制作一个从 0 到 50 的浮点数并发出强度均匀的绿色的方法?

所以如果输入值为0,颜色为黑色:

[UIColor colorWithRed:0 green:0 blue:0];

如果输入值为50,则颜色为最大绿色:

[UIColor colorWithRed:0 green:255.0/255.0 blue:0];

所以如果输入因子在中间的某个地方,那么颜色应该在中间的某个地方。所以从 0 到 50,它应该从最深的绿色变为最浅的绿色。应该很简单,但我不确定我错过了什么:

//factor is a float from 0-50
UIColor *greenColor = [UIColor colorWithRed:0 green:factor/255.0 blue:0 alpha:1.0];

此代码生成绿色,但波动不大,因此您只能看到大约一种绿色。

【问题讨论】:

    标签: objective-c algorithm math colors


    【解决方案1】:

    您需要根据自己的最大值 (50) 缩放 RGB 最大值 (255)。你所需要的只是相当简单的数学:

    colorVal = 255 * x / 50
    

    其中x 是从 0 到 50 的强度。所以:

    255 * 0  / 50 = 0 
    255 * 50 / 50 = 255
    255 * 25 / 50 = 128 (rounded up from 127.5)
    

    【讨论】:

      【解决方案2】:

      您的范围仅来自0.0/255.0 -> 50.0/255.0,您希望它是0.0 to 1.0;为此,您可以尝试factor/50.0

      【讨论】:

        【解决方案3】:

        一方面,你让数学变得太难了。看起来[UIColor ... green: ...] 的值应该在 0.0 到 1.0 的范围内,因此值计算可以简单地为:

        CGFLoat value = factor / 50.0;
        UIColor *greenColor = [UIColor colorWithRed:0 green:(value) blue:0 alpha:1]
        

        factor = 0 时的值为 0.0,factor = 50 时为 1.0。

        不过,除此之外,我不确定 - 也许绘图实际上做了一些量化或使用有限的调色板?

        【讨论】:

        • 是的,我太复杂了:/
        猜你喜欢
        • 2021-04-27
        • 2017-05-28
        • 1970-01-01
        • 2017-10-09
        • 2020-06-10
        • 2018-11-10
        • 2021-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多