簡體   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