你如何像真正的色轮一样调整AS3中的色调?

时间:2013-01-05 23:30:34

标签: actionscript-3 colors tweenlite hue color-wheel

我想将艺术资产的色调从一种亮色调整为另一种亮色,保持单色特征的完整性。我将从RGBYTP(红色,绿色,蓝色,黄色,蓝绿色或紫色)开始;然后通过色调调整,我将能够使其看起来像其他每个RGBYTP彩色图像。

例如,采取任何一种彩色眼球,并通过AS3色调调整,能够制作任何其他彩色眼球。网络/游戏设计中的常用技术。

eyeballs http://quadradius.com/stuff/RandomImagesForLinking/hue-adjusted-eyeballs.jpg

我经常使用GreenSock动画平台(TweenLite / TweenMax),但核心AS代码和TweenLite引擎似乎都没有像我预期的那样处理色调。我想以60度的增量调整色调色轮,这应该很好地调整所有6种二次色,并从中获得完整的色彩效果。但实际上我得到的是可怕的。实际上,调整RGBYTP颜色的色调会返回非常奇怪的结果;大地色调,粉彩,甚至灰色阴影。

bad-hues http://quadradius.com/stuff/RandomImagesForLinking/6-colors-all-hue-adjusted.jpg

以下是我用来生成所有圈子的代码。

    for (var j:int = 0; j < 6; j++) {
        for (var i:int = 0; i < 7; i++) {
            var sprite:Sprite = new Sprite();
            var baseColor:uint;
            if (j == 0) baseColor = 0xFF0000;
            if (j == 1) baseColor = 0x00FF00;
            if (j == 2) baseColor = 0x0000FF;
            if (j == 3) baseColor = 0xFFFF00;
            if (j == 4) baseColor = 0xFF00FF;
            if (j == 5) baseColor = 0x00FFFF;
            sprite.graphics.beginFill(baseColor);
            sprite.graphics.drawEllipse(40 * i + 10, 300 + (60 * j) + 10, 40, 40);// positioning
            addChild(sprite);
            TweenMax.to(sprite, .5, {colorMatrixFilter:{hue:i * 60 }} );
        }
    }

为什么AS3或TweenLite / Max不能处理像Photoshop或艺术家色轮这样的色调?我做错了什么?

2 个答案:

答案 0 :(得分:1)

我怀疑GreenSock平台正在使用Flash自己的fl.motion.AdjustColor,它不会像你发现的那样在RGB和HSV之间进行特别好的转换。你必须考虑到不同颜色的感知亮度才能看起来正确,所以它有点主观。

This page有一个很好的解释和一些带有缩放值的示例代码,可以实现更自然的色调偏移。您可以使用它来生成flash.filters.ColorMatrixFilter的矩阵,然后您可能必须编写一个函数来获取当前补间时间并运行它onUpdate以将其用于TweenMax。

答案 1 :(得分:0)

在真彩色轮上,两种颜色不会直接变为黑色。黄色首先变为棕色,青色首先变为蓝色。在黑色之前,棕色是红色最暗的颜色。青色在黑色前变成蓝色最深的颜色。我不知道任何java,但我肯定会喜欢这样的Java轮。 http://acko.net/blog/farbtastic-jquery-color-picker-plug-in/

黄色眼睛使用RGB渐变暗,这就是为什么它看起来是绿色的,对于青色眼睛也是如此。我在本网站制作的表格中有编码渐变。 http://www.realcolorwheel.com/colorwheel.htm 您可以在源页面上获取颜色代码。

Don,RCW