Actionscript 3.0 Цвет вопрос интерполяции - PullRequest
1 голос
/ 29 августа 2009

В Actionscript 3.0 класс Color имеет метод с именем interpolateColor . Мне кажется странным, но метод принимает два целых числа без знака для цветов, а не два экземпляра Color. Кроме того, он возвращает целое число без знака для результирующего цвета. Во всяком случае, я не вижу ничего в API для преобразования цвета в целое число без знака или просто для интерполяции между двумя экземплярами цвета. Можно ли интерполировать два экземпляра Color без написания кода, чтобы конвертировать их в целые числа без знака?

Ответы [ 4 ]

1 голос
/ 05 октября 2010

возможно, это немного поздно, я только что прибыл сюда на этой странице случайно, но я столкнулся с аналогичной проблемой с цветом интерполяции при изменении размера изображений, и в итоге лучшее решение, которое я нашел, было использование бикубической системы для 2D-преобразований и Эрмит для 1D. посмотрите на это http://www.yoambulante.com/en/labs/interpolation.php ура!

1 голос
/ 29 августа 2009

Все цвета во флеш-плеере рассматриваются как неподписанные целые. Класс Color относится к Flash IDE и расширяет ColorTransform. http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/fl/motion/Color.html#propertySummary

Так что в вашем случае все, что вам нужно сделать, это использовать свойство ".color" ваших классов Color. например, чтобы получить реальный цвет или просто использовать функцию «interpolateTransform», которая переходит от ColorTransform к ColorTranform.

1 голос
/ 29 августа 2009

Это несколько неудобно, но похоже, что преобразование его в число - единственный способ. Здесь есть сообщение об этом, с этим кодом:

public static function interpolateColor(fromColor:uint, toColor:uint, progress:Number):uint
{
    var q:Number = 1-progress;
    var fromA:uint = (fromColor >> 24) & 0xFF;
    var fromR:uint = (fromColor >> 16) & 0xFF;
    var fromG:uint = (fromColor >>  8) & 0xFF;
    var fromB:uint =  fromColor        & 0xFF;

    var toA:uint = (toColor >> 24) & 0xFF;
    var toR:uint = (toColor >> 16) & 0xFF;
    var toG:uint = (toColor >>  8) & 0xFF;
    var toB:uint =  toColor        & 0xFF;

    var resultA:uint = fromA*q + toA*progress;
    var resultR:uint = fromR*q + toR*progress;
    var resultG:uint = fromG*q + toG*progress;
    var resultB:uint = fromB*q + toB*progress;
    var resultColor:uint = resultA << 24 | resultR << 16 | resultG << 8 | resultB;
    return resultColor;  
}
0 голосов
/ 29 августа 2009

Не можете ли вы использовать экземпляры ColorTransform? Вы получаете colorTransfrom из instanceMovieClip.transform.colorTransorm, а затем интерполируете colorTransofrm с Color.interpolateTransform?

Не думаю, что понимаю, чего вы пытаетесь достичь (зачем вам нужно интерполировать два экземпляра цвета? А не цвета (целые) или colorTransforms)?

...