Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   как найти промежуточный цвет? (http://www.flasher.ru/forum/showthread.php?t=171377)

uchenik12345 15.11.2011 00:28

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

olexandr 15.11.2011 07:51

реализация с помощью ас3

Код AS3:

                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.


Часовой пояс GMT +4, время: 22:11.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.