2013-08-02 240 views
12

Paint.setColor需要一個整數。但我所擁有的是一個Color對象。我在Java中看不到color.getIntValue()?那我該怎麼做?我要的是一樣的東西如何在java中將rgb顏色轉換爲int

public Something myMethod(Color rgb){ 
    myPaint.setColor(rgb.getIntValue()); 
    ... 
} 

更正:android.graphics.Color;我認爲有android爲標籤中的一個就足夠了。但顯然不是。

+0

這看起來像同樣的問題:http://stackoverflow.com/questions/6926644/android-color-to-int-conversion – TravJenkins

+0

哪裏你的顏色對象來自?我很困惑你爲什麼傳遞一個Color對象,而不是首先代表顏色的int。 android中的Color類定義了用於創建和轉換顏色整數的靜態方法。從我的理解,它不應該初始化 –

回答

5

Color有一個getRGB()方法,該方法返回顏色爲int

+0

我編輯顯示更正,我正在使用'android.graphics.Color;' –

-1

試試這個:

Color color = new Color (10,10,10) 


myPaint.setColor(color.getRGB()); 
+0

我正在使用android.graphics.Color; –

16

如果您正在爲Android開發,色彩的這種方法是RGB(INT,INT,INT)

所以,你會做這樣的事情

myPaint.setColor(Color.rgb(int, int, int)); 

對於檢索單個顏色值,您可以使用以下方法:

Color.red(int color) 
Color.blue(int color) 
Color.green(int color) 

參考this document更多信息

31

首先,android.graphics.Color是僅有的靜態方法組成的類多數民衆贊成。如何以及爲什麼創建一個新的android.graphics.Color對象? (這是完全無用的和對象本身沒有存儲數據)

但不管怎麼說......我會使用一些實際存儲數據...

一個整數由4個字節的對象的承擔(在java中)。從標準java Color對象中查看函數getRGB(),我們可以看到java將每種顏色映射爲ARGB(Alpha-Red-Green-Blue)順序的整數的一個字節。我們可以用下面用自定義的方法複製這種行爲:

public int getIntFromColor(int Red, int Green, int Blue){ 
    Red = (Red << 16) & 0x00FF0000; //Shift red 16-bits and mask out other stuff 
    Green = (Green << 8) & 0x0000FF00; //Shift Green 8-bits and mask out other stuff 
    Blue = Blue & 0x000000FF; //Mask out anything not blue. 

    return 0xFF000000 | Red | Green | Blue; //0xFF000000 for 100% Alpha. Bitwise OR everything together. 
} 

這是假設你能以某種方式獲取單獨的紅色,綠色和藍色色彩分量和你通過在色彩中的所有值爲0到255。

如果你的RGB值在0和1之間的浮動比例的形式考慮以下方法:

public int getIntFromColor(float Red, float Green, float Blue){ 
    int R = Math.round(255 * Red); 
    int G = Math.round(255 * Green); 
    int B = Math.round(255 * Blue); 

    R = (R << 16) & 0x00FF0000; 
    G = (G << 8) & 0x0000FF00; 
    B = B & 0x000000FF; 

    return 0xFF000000 | R | G | B; 
} 

正如其他人所指出的,如果您使用的是標準的Java對象,只是使用的getRGB( );

如果您決定正確使用android顏色類,你也可以這樣做:

int RGB = android.graphics.Color.argb(255, Red, Green, Blue); //Where Red, Green, Blue are the RGB components. The number 255 is for 100% Alpha 

int RGB = android.graphics.Color.rgb(Red, Green, Blue); //Where Red, Green, Blue are the RGB components. 

正如其他人說...(第二函數假定100%的α)

這兩種方法基本上與上面創建的第一種方法做同樣的事情。

+0

爲什麼這些變量大寫? –

1

您可以用顏色聲明一個值。xml,因此你可以通過調用下面的代碼來獲得整數值。

context.getColor(int resId); 
-1

使用getRGB(),它有助於(沒有複雜的程序)

返回默認的RGB顏色模型 (TYPE_INT_ARGB)和默認sRGB顏色空間整數像素的陣列,從該部分 圖像數據。

+0

這不是一個完整的答案。請詳細說明。 –

4

你想用intvalue = Color.parseColor("#" + colorobject);