输入因子有限,从黑色变为绿色

时间:2012-05-01 20:57:04

标签: objective-c algorithm math colors

如何制作一个从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];

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

3 个答案:

答案 0 :(得分:3)

您需要根据自己的最大值(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)

答案 1 :(得分:1)

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

答案 2 :(得分:1)

首先,你的数学太难了。看起来[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。

除此之外,我不确定 - 也许实际上绘图会进行一些量化还是使用有限的调色板?