【发布时间】:2014-01-21 02:10:48
【问题描述】:
我是一名 C++ 程序员,最近开始研究使用 PHP、Javascript 和 HTML 进行 Web 开发。目前我遇到了一些应该非常简单的问题,但没有按我预期的那样工作......
function interpolateColor($corA, $corB, $lerp)
{
$redA = $corA & 0xFF0000;
$greenA = $corA & 0x00FF00;
$blueA = $corA & 0x0000FF;
$redB = $corB & 0xFF0000;
$greenB = $corB & 0x00FF00;
$blueB = $corB & 0x0000FF;
$redC = $redA + (($redB - $redA) * $lerp);
$greenC = $greenA + (($greenB - $greenA) * $lerp);
$blueC = $blueA + (($blueB - $blueA) * $lerp);
return $redC | $greenC | $blueC;
}
我一直在尝试使用此函数根据“优先级”列的值使 HTML 表的行具有不同的颜色,该值从 0 到 10 并除以 10 以形成“lerpAmount” (0-1) 变量。
$cor = interpolateColor(0xFF0000, 0x0000FF, $lerpAmount);
<tr bgcolor="<?=$cor?>">
但是,我得到的颜色看起来不像是红蓝插值...它开始是蓝色的,然后只有一行是绿色,然后变成粉红色并插值成某种形式的棕色,然后变成深蓝色再次,这让我觉得有些不对劲。
提前致谢。
【问题讨论】:
-
我建议减少 lerpamount 并尝试结果。
-
您的 $redC、$greenC 和 $blueC 值在乘以 $lerp 后都将是浮点数,因此您正在对一系列浮点数进行 ORing 运算以返回...您可能想要强制转换在执行此操作之前,每个都要再次 int:例如
$redC = (int) $redA + (($redB - $redA) * $lerp); -
有些值也是负数
标签: php html colors interpolation