2016-03-14 33 views
-1

我有一個現有的FN是執行以下操作:從顏色轉換回數字在JavaScript

public GetColor = (argb: number) => { 

     var a = 1;// (argb & -16777216) >> 0x18; // gives me FF 


     var r = (argb & 0xff0000) >> 0x10; 
     var g = (argb & 0x00ff00) >> 0x8; 
     var b = (argb & 0x0000ff); 
     var curKendoColor = kendo.parseColor("rgba(" + r + "," + g + "," + b + "," + a + ")", false); 

我想知道我需要返回回號碼的功能。

例如,如果我有AARRGGBB(FFFF0000),我想回到toColor將從中派生的數字版本。

我會確定返回號碼或簽名版本的未簽名版本。無符號將是-65536,但無符號也會很好(不知道這個數字現在是我的頭頂上的數字)

我試圖做到這一點,但嘗試都結束於0,我知道不是正確: colorSend | =(parseInt(this.Color.substr(0,2),16)& 255)< < 24;顏色發送| =(parseInt(this.Color.substr(1,2),16) 255)< < 16;顏色發送| =(parseInt(this.Color.substr(3,2),16) 255)< < 8;

的parseInt函數給我的255,0,0,我想我會期待,但&和換擋邏輯似乎並不正確,因爲&零整數出這樣的結果是0

+0

那麼,看着代碼去一種方式,你的*代碼嘗試以另一種方式?例如,你這樣做的具體問題是什麼?現在的問題是:「請寫這個函數來爲我做這個代碼的逆向處理。」這不是它的目的。 –

+0

我曾試圖做一些事情,如 – jvoigt

+0

對不起,是的,我加入了我的第一次嘗試,所有帳戶都沒有給我預期的。 – jvoigt

回答

0

好吧我能夠得到一些似乎對我有用的東西。我簡化了一點,但對於ARGB我可以這樣做

val = "0xFFFF0000" 
val = parseInt(val, 16) 
if((val & 0x80000000) != 0) 
{ 
    val = val - 0x100000000; 
} 

因此,例如紅與FF的A我想GET- -65536或無符號,我可以省略的最後一部分。

-1

其實這是很容易。你只需要瞭解HEX值的含義。 在十六進制系統中,從10到15的每個數字都由字母A到F表示。數字十爲正常數字1-9。因此,如果要將11轉換爲十六進制,它將爲0B。因爲你不需要11(0)以下的數字,而字母B代表11。如果你讀一點關於十六進制系統,你應該能夠很容易地寫你新的功能;)

+0

是的,謝謝你的輸入,我明白十六進制是什麼以及數字是如何表示的,但是這並沒有解決我需要足夠的功能來編寫上述函數的反轉。我也知道我可以使用基數爲16的parseInt來獲得,例如將r值轉換爲「256」,對於其他G和B類似,但是過程需要從這裏開始。 – jvoigt