如何乘以十六进制颜色代码?

时间:2014-05-24 17:56:23

标签: colors hex rgb

我想将颜色从0x008000(绿色)更改为0x0000FF(蓝色)。 如果我乘以0x008000 * 256 = 0x800000(谷歌搜索充当计算器)。 我需要找到正确的乘数,因此结果将是0x0000FF。

回答下面的人 - 我这样做是为了在pixi.js中的矩形上进行颜色转换。

根据我收集的信息,RGB颜色代码分为3个部分 - 红色,绿色和蓝色,以十六进制表示的0-FF刻度,或十进制中的0-255刻度。但是如何正确地增加以获得所需的结果呢?

1 个答案:

答案 0 :(得分:1)

如果你想要从一种颜色到另一种颜色的线性变化,我推荐这样的东西:

int startColor = 0x008000;
int endColor   = 0x0000FF;

int startRed   = (startColor >> 16) & 0xFF;
int startGreen = (startColor >>  8) & 0xFF;
int startBlue  =  startColor        & 0xFF;

int endRed, endGreen, endBlue; //same code

int steps = 24;
int[] result = new int[steps];

for(int i=0; i<steps; i++) {
    int newRed = ( (steps - 1 - i)*startRed + i*endRed ) / (steps - 1);
    int newGreen, newBlue; //same code
    result[i] = newRed << 16 | newGreen << 8 | newBlue;
}

这适用于JavaScript:

var startColor = 0x008000;
var endColor = 0x0000FF;
var startRed = (startColor >> 16) & 0xFF;
var startGreen = (startColor >> 8) & 0xFF;
var startBlue = startColor & 0xFF;
var endRed = (endColor >> 16) & 0xFF;
var endGreen = (endColor >> 8) & 0xFF;
var endBlue = endColor & 0xFF;
var steps = 24;
var result = [];
for (var i = 0; i < steps; i++) {
var newRed = ((steps - 1 - i) * startRed + i * endRed) / (steps - 1);
var newGreen = ((steps - 1 - i) * startGreen + i * endGreen) / (steps - 1);
var newBlue = ((steps - 1 - i) * startBlue + i * endBlue) / (steps - 1);
var comb = newRed << 16 | newGreen << 8 | newBlue;
console.log(i + " -> " + comb.toString(16));
result.push(comb);
}
console.log(result); 
相关问题