Просмотр полной версии : как найти промежуточный цвет?
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.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.