鉴于ms中的ping,有没有办法以算法方式计算着色,我们可以在没有硬编码ifs和颜色的情况下进行ping操作? IE这个功能很好用:
function displayPing(lngThePingTime)
response.Write("<span style=""font-wight:bold;color:")
if(lngThePingTime < 50) then
response.Write("#77ff66")
elseif lngThePingTime < 100 then
response.Write("#22ee00")
elseif lngThePingTime < 150 then
response.Write("#33bb00")
elseif lngThePingTime < 250 then
response.Write("#ffaa00")
elseif lngThePingTime < 400 then
response.Write("#ee6600")
elseif lngThePingTime < 550 then
response.Write("#dd4400")
elseif lngThePingTime < 700 then
response.Write("#dd1100")
elseif lngThePingTime < 1000 then
response.Write("#990000")
else
response.Write("#660000")
end if
response.Write(""">")
response.Write lngThePingTime
response.Write("</span>")
end function
但有没有办法让算法说:
Lowest Colour : #77ff66
Highest Colour: #660000
Cutoff Value: 1500 (any ping higher than this is fixed to highest colour)
那么颜色将是每个阴影而不是一组固定的阴影?
语言没关系,对方法更感兴趣!
答案 0 :(得分:2)
颜色是一个多维空间,因此您必须选择插值的方式。不寻常的只是用RGB绘制“直线”的尺寸并不是很好。
一种简单的方法是使用HSB/V/L color space。许多现代编程语言会自动转换为这个空间,例如参见[java Color methods] [2]。否则数学不是太难。 wikipedia article explains it。
我遇到的情况并没有达到我想要的效果 - 例如我想要一种交通灯样式“通过琥珀从红色变为绿色”。在这种情况下,我使用了以下代码,这是“足够好”。如您所见,我利用了解RGB和颜色之间的关系。这不是您可能想要的那样可配置,但给出了一个可以使用的方法示例:
private static int makeTrafficLight(float fraction, int brightness) {
final float orange = 0.4f;
if(fraction < orange) {
int r = brightness;
float f = fraction/orange;
int g = (int)(brightness*(f/2.0f));
int b = 0;
return Color.rgb(r,g,b);
} else {
float f = ((fraction-orange)/(1.0f-orange));
int r = (int)(brightness*(1.0f-f));
int g = (int)(brightness*(f/2.0f+0.5f));
int b = 0;
return Color.rgb(r,g,b);
}
}
[2]:http://download.oracle.com/javase/1.4.2/docs/api/java/awt/Color.html#HSBtoRGB(float,float,float)