PDA

Просмотр полной версии : как найти промежуточный цвет?


uchenik12345
15.11.2011, 00:28
Есть color1 и есть color2.
Есть количество шагов. Надо найти промежуточные цвета, будто бы это был gradient fill.
Я просто отнял один, от другого и поделил, потом прибавлял к color1. Получилось не то.
То есть в промежутках от темно-красного к светло розовому были желто-зеленые цвета.
Получается, надо как-то с отдельным учетом rr gg bb, но как то сразу не представляю как так вычислять.
Может у кого нибудь есть решение?

olexandr
15.11.2011, 07:51
реализация с помощью ас3

static public function joinChannels(red:int, green:int, blue:int):uint {
return red << 16 | green << 8 | blue;
}

static public function getRedChannell(color:uint):uint {
return color >> 16;
}

static public function getGreenChannell(color:uint):uint {
return color >> 8 & 0xFF;
}

static public function getBlueChannell(color:uint):uint {
return color & 0xFF;
}


static public function interpolate(start:uint, end:uint, percent:Number = .5):uint {
var _r1:uint = getRedChannell(start);
var _g1:uint = getGreenChannell(start);
var _b1:uint = getBlueChannell(start);

var _r2:uint = getRedChannell(end);
var _g2:uint = getGreenChannell(end);
var _b2:uint = getBlueChannell(end);

var _rP:uint = _r1 + (_r2 - _r1) * percent;
var _gP:uint = _g1 + (_g2 - _g1) * percent;
var _bP:uint = _b1 + (_b2 - _b1) * percent;

return joinChannels(_rP, _gP, _bP);
}

uchenik12345
16.11.2011, 17:26
Что то непашет. Функция возвращает 7-и значное и выше значение, что уже странно.
Например: color1=0xcc0000 (темно-красный), color2=0хffccff (розовый), при проценте 73,33333 дает
_rP=f67, _gP=3a6f, _bP=490c
и joinChannels дает f7f6f0c.
встречаются и 8-значные значения 10bfcfb0

crazyone
16.11.2011, 18:58
Процент должен быть от 0 до 1.