将百分比转换为从绿色(100%)到红色(0%)的颜色的最简单方法是什么,黄色为50%?
我正在使用普通的32位RGB - 因此每个组件都是0到255之间的整数.我在C#中这样做,但我想这样的问题语言并不重要.
基于Marius和Andy的答案,我使用以下解决方案:
double red = (percent < 50) ? 255 : 256 - (percent - 50) * 5.12; double green = (percent > 50) ? 255 : percent * 5.12; var color = Color.FromArgb(255, (byte)red, (byte)green, 0);
完美的工作 - 只有我必须从Marius解决方案做的调整是使用256,因为(255 - (百分比 - 50)*5.12产生-1 100%时,由于某种原因在Silverlight中导致黄色(-1,255,0) ) - >黄...
我在JavaScript中创建了这个函数.它返回的颜色是一个css字符串.它将百分比作为变量,范围从0到100.算法可以用任何语言制作:
function setColor(p){ var red = p<50 ? 255 : Math.round(256 - (p-50)*5.12); var green = p>50 ? 255 : Math.round((p)*5.12); return "rgb(" + red + "," + green + ",0)"; }
您可能想要做的是在HSV或HSL颜色空间中为0%到100%分配一些点.从那里你可以插入颜色(黄色恰好在红色和绿色之间:) 并将它们转换为RGB.这会让你在两者之间看起来很漂亮.
假设您将使用颜色作为状态指示器,并且从用户界面的角度来看,这可能不是一个好主意,因为我们看到颜色的微小变化非常糟糕.因此,将值划分为例如三到七个桶会在事情发生变化时给您带来更明显的差异,代价是精确度(无论如何您很可能无法理解).
所以,除了所有的数学,最后我建议使用以下颜色的查找表,其中v是输入值:
#e7241d for v <= 12% #ef832c for v > 12% and v <= 36% #fffd46 for v > 36% and v <= 60% #9cfa40 for v > 60% and v <= 84% #60f83d for v > 84%
这些已经从HSL值(0.0,1.0,1.0),(30.0,1.0,1.0),(60.0,1.0,1.0),(90.0,1.0,1.0),(120.0,1.0,1.0)非常天真地转换,并且您可能需要稍微调整颜色以适合您的目的(有些人不喜欢红色和绿色不是'纯').
请参阅:
使用HSL颜色(色调,饱和度,亮度)为一些讨论和创建更好看的GUI
样本C#源代码的RGB和HSL颜色空间转换.
在伪代码中.
从0-50%,你的十六进制值将是FFxx00,其中:
XX = ( Percentage / 50 ) * 255 converted into hex.
从50到100,你的十六进制值将是xxFF00,其中:
XX = ((100-Percentage) / 50) * 255 converted into hex.
希望有所帮助,也是可以理解的.