1

我仍在开发动作脚本 3 色游戏。您在右侧有一个随机生成颜色的对象。在左侧,您有另一个对象和 3 个具有 RGB 颜色的桶。目标是将右侧对象的颜色与 3 个桶和左侧对象重新混合。您将其中一个桶放在左边的物体上。桶在左边对象上的时间越长,这个偏移量就越大。如您所知,我正在使用红色、绿色和蓝色偏移。我现在需要桶来用 CMY 而不是 RGB 转换对象。我大致知道如何将 RGB 值转换为 CMYK,但是当我需要使用 RGB 偏移量来更改对象的颜色时,这对我没有帮助。我知道 Actionscript 3 只有 RGB 偏移,否则我不知道应该如何解决这个问题。

所以我的问题是:你能在 CMYK 或不使用 ColorTransform 的情况下更改影片剪辑的颜色吗?一个想法会非常棒。

英语不是我的主要语言,如有错误请见谅...

4

2 回答 2

3

我不认为您可以将对象的颜色偏移更改为 CMYK,尽管您可以编写一个函数来在 RGB 和 CMYK 之间进行转换。附带说明一下,CMYK 主要用于印刷,最好坚持使用 RGB。这里要说的是如何在两者之间进行转换。


RGB 转 CMYK


RGB中每个值的范围是 0 到 255,CMYK中每个值的范围是 0 到 1。所以我们需要缩放 RGB 值,使它们落在 0 到 1 的范围内。

R' = R / 255
G' = G / 255
B' = B / 255

CMYK中的K表示黑色的量,使用R'G'B'计算

K = 1 - max(R', G', B')

其他颜色计算如下

C = (1 - R' - K) / (1 - K)
M = (1 - G' - K) / (1 - K)
Y = (1 - B' - K) / (1 - K)

示例类:

import flash.display.MovieClip;

public class ConvertColors extends MovieClip {
    public var K:Number = 0.0;
    public var C:Number = 0.0;
    public var M:Number = 0.0;
    public var Y:Number = 0.0;

    public function convertToCMYK(R:int, G:int, B:int):void {
        var Rprime:Number = R/255;
        var Gprime:Number = G/255;
        var Bprime:Number = B/255;

        this.K = 1 - Math.max( Rprime, Math.max( Gprime, Bprime));

        this.C = (1 - Rprime - K)/(1 - K);
        this.M = (1 - Gprime - K)/(1 - K);
        this.Y = (1 - Bprime - K)/(1 - K);
    }

}

CMYK 转 RGB


RGB范围从 0 到 255

R = 255 * (1 - C) * (1 - K)
G = 255 * (1 - M) * (1 - K)
B = 255 * (1 - Y) * (1 - K)

示例类:

import flash.display.MovieClip;

public class ConvertColors extends MovieClip {
    public var R:int = 0;
    public var G:int = 0;
    public var B:int = 0;

    public function convertToRGB(K:Number, C:Number, M:Number, Y:Number):void {
        var Rnum:Number = 0.0;
        var Gnum:Number = 0.0;
        var Bnum:Number = 0.0;

        Rnum = 255 * (1 - C) * (1 - K);
        Gnum = 255 * (1 - M) * (1 - K);
        Bnum = 255 * (1 - Y) * (1 - K);

        this.R = Math.round(Rnum);
        this.G = Math.round(Gnum);
        this.B = Math.round(Bnum);
    }

}
于 2013-09-16T23:57:16.527 回答
2

我刚刚找到了另一个真正的解决方案。如果你给 coloroffset 一个负值,颜色会变成青色、品红色或黄色!我没想到会那么容易,但事实就是如此。现在我只需要改变我的计算,使它适合消极的东西。但是如果你现在混合所有的桶,物体就会变黑!这就是我想要的,现在我很高兴。RGB到CMYK转换的答案仍然非常有用!非常感谢。

于 2013-09-17T09:35:13.837 回答