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