在 Flash/Animate 中处理颜色 visually/manually 和代码的方法?

Way to handle colors visually/manually AND with code, in Flash/Animate?

我曾经在 Animate 中使用过很多滤镜,这非常棒,因为我可以手工制作一个滤色器,看看它是什么样子,然后再将代码集成到其中,例如:

object.filters = e.currentTarget.filters;

但我正在努力做好并远离过滤器以降低处理能力等。另外,过滤器不接受十六进制代码。所以我正在尝试使用 colorTransforms。但现在事情变得非常笨拙,因为我弄清楚我想要哪种颜色,在记事本中写下所有十六进制代码,然后编写代码将东西转换成那种颜色。在我发布文件之前,我仍然看不到颜色的相互作用。没有一些方法可以使用 colorTransforms 手动 fiddle 吗?也许是颜色效果下的高级部分 -> 样式?

在我的幻想中,我是如何想象这件事发生的: 我有一些动画片段可以相互作用来创建织物样本。我 fiddle 使用 colorTransform 或 SOMEhow 手动向它们应用十六进制代码(不是动态地在代码中),然后我可以使用这些色板动态地为其他东西着色,例如:

newFabric.topPattern.colorTransform.color = fabricSwatch.topPattern.colorTransform.color;

我知道如果我先使用代码添加颜色我可以做到这一点..但是有什么方法可以在 stage/visually/manually 上添加颜色然后让代码向前滚动吗?我知道我可以绘制位图并对像素的颜色进行采样,但是所有图案都具有非常精细、不同且复杂的形状和透明度,因此在这里不起作用:/

有很多使用颜色变换的教程,例如 this one

至于使用十六进制颜色,您可以非常轻松地在各种颜色表示之间来回转换。一个简单的 Google 搜索找到了这个 snippet:

var brightPinkHex:uint = 0xFF32CC;
var brightPinkRGB:Object = HexToRGB(brightPinkHex);
trace(brightPinkRGB.r+ ", " + brightPinkRGB.g + ", " + brightPinkRGB.b);

function HexToRGB(value:uint):Object {  
    var rgb:Object = new Object();
    rgb.r = (value >> 16) & 0xFF
    rgb.g = (value >> 8) & 0xFF
    rgb.b = value & 0xFF            
    return rgb;
}

// OUTPUT
// 255, 50, 204

好的!我找到了解决方法! \o/

我可以手动编辑色调,甚至可以输入十六进制代码或从我预制的调色板中滴眼液。我只需要确保将 Tint 上的 "Tint" 设置设置为 100%。 (色彩效果 -> Style:Tint)

现在我只需使用colorTransform代码,它就可以拉取我手动放置的Tint,并将其转移到其他项目:

grl.overlay.shapes.transform.colorTransform = e.currentTarget.shapes.transform.colorTransform;

我什至不必更改我的代码,这比过滤器更好,因为我可以输入十六进制代码。我不知道相对于过滤器而言这对性能有何影响,但有人刚刚告诉我这应该不会太糟糕,因为没有任何动画。我很高兴:)