2013-09-16 40 views
1

我仍然工作在ActionScript 3的色彩遊戲。你有一個隨機生成的顏色在右邊的對象。在左邊你有另一個物體和三個RGB顏色的桶。目標是將正確的物體的顏色與3個桶和左側物體重新混合。您將其中一個桶放在左側物體上。水桶在左側物體上的時間越長,這個偏移量就越多地被添加到對象中。你現在知道,我正在使用紅色,綠色和藍色的偏移。我現在需要使用CMY而不是RGB來轉換對象。我大致知道如何RGB值轉換爲CMYK,但這並不能幫助我,當我需要使用RGB偏移改變我的物體的顏色。我知道ActionScript 3中僅擁有RGB偏移,我不知道我應該怎麼否則解決這個問題。我怎樣才能改變顏色偏移在ActionScript 3一個目的是CMYK的?

所以我的問題是:你可以更改影片剪輯的顏色在CMYK或沒有的ColorTransform?一個想法會非常棒。

英語不是我的主要語言,犯錯後悔... ...

回答

2

我剛剛發現了另一個真正的解決方案。如果您將coloroffset設置爲負值,則會將顏色轉換爲青色,品紅色或黃色!我不認爲這會很容易,但實際上是這樣。現在我只需要改變我的計算,以適應消極的東西。但是如果你現在混合所有的桶,物體會變黑。那就是我想要的,現在我很開心。 RGB到CMYK轉換的答案仍然非常有用!非常感謝。

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表示黑色顏色的量,並使用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); 
    } 

} 
+0

謝謝你的努力。我將使用CMYK的主要原因是邏輯。在我的遊戲中,水桶應該代表充滿真實顏色的真正水桶,你需要清空左邊的物體。 RGB是一種附加顏色系統,CMYK是一種減色系統。如果你現在在我的遊戲中混合每個桶,那麼這個物體會變成白色。如果水桶充滿了光線,這纔有意義。在CMYK中,對象會變成黑色或灰色,就像在reallife中一樣。但是由於沒有其他方法可以做到這一點,我想我需要堅持使用RGB解決方案......但是,非常感謝Jonny。 – benbar

相關問題