繁体   English   中英

如何在ActionScript 3中将对象的颜色偏移更改为CMYK?

[英]How can i change the color-offset of an object to CMYK in Actionscript 3?

我仍在研究动作脚本3色游戏。 您的对象右边带有随机生成的颜色。 在左侧,您还有另一个对象和3个RGB颜色的存储桶。 目的是将右侧对象与3个存储桶和左侧对象的颜色重新混合。 您将其中一个存储桶放在左侧的物体上。 值区在左侧对象上的时间越长,此偏移量添加到该对象的次数就越多。 如您现在所知,我正在处理red,green和blueOffset。 现在,我需要使用存储桶来使用CMY而不是RGB变换对象。 我大致知道如何将RGB值转换为CMYK,但是当我需要使用RGB偏移量更改对象的颜色时,这对我没有帮助。 我知道Actionscript 3仅具有RGB偏移量,不知道如何解决该问题。

所以我的问题是:您是否可以在CMYK中或没有ColorTransform的情况下更改动画片段的颜色? 一个主意会很棒。

英语不是我的主要语言,所以很抱歉出现错误...

我不认为您可以将对象的色偏更改为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);
    }

}

我刚刚找到了另一个真正的解决方案。 如果将coloroffset设置为负值,则颜色将变为青色,品红色或黄色! 我不认为这会那么容易,但实际上确实如此。 现在,我只需要更改我的计算,以使其适合负数。 但是,如果现在混合所有存储桶,则对象将变黑! 那就是我想要的,现在我很开心。 从RGB到CMYK转换的答案仍然非常有用! 非常感谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM