【问题标题】:How to multiply hex color codes?如何乘以十六进制颜色代码?
【发布时间】:2014-07-13 22:15:08
【问题描述】:

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

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

根据我收集到的信息,RGB 颜色代码分为 3 个部分 - 红色、绿色和蓝色,以十六进制表示的 0-FF 或十进制表示的 0-255 的比例。但是如何正确乘以得到想要的结果呢?

【问题讨论】:

  • 我认为你需要更好地解释你需要什么。为什么半强度乘以 256 的绿色会变成高强度蓝色?
  • 我的阅读能力很差,请问您能提供一个实际的问题示例吗?
  • 除以 256 或向右移动 8 位
  • 我正在 pixi.js 中创建动画,我想通过 24 个步骤将正方形填充颜色从绿色更改为蓝色。 256 只是一个随机数。
  • @AsadAli - 这样做,蓝色组件不会从低值循环几次到高值吗?这可能是一个看起来很奇怪的过渡。

标签: colors hex rgb


【解决方案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); 

【讨论】:

  • 我添加了另一个 cooments 并评论了它们(yo dawg)以免混淆。
  • Ehm,我希望你用相同的代码替换了“相同的代码”cmets 只重命名了变量?
  • 添加了编辑,但似乎没有保存。是的,我只是更改了几个 var 名称,控制台给了我 [0,0,0...],数组中的所有元素都是零。 i/z 固定。
  • 好的,我会打开编辑器看看,但我想告诉你:JS 不是我的专长。
  • 控制台:0 -> 每次迭代 32768
猜你喜欢
  • 2011-09-20
  • 2011-10-25
  • 2017-10-01
  • 2014-05-02
  • 1970-01-01
  • 2019-11-28
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多