2012-07-31 50 views
1

我有用戶類型的顏色(例如白色,紅色......),那麼如何用用戶的顏色得到R,G,B的值?通過顏色獲得R,G,B的值

我有一個函數(浮子R,浮克,浮子b)中設置顏色的節點。所以我讓用戶輸入他們想要的顏色名稱,然後我想要將該顏色名稱轉換爲我的函數的r,g,b值。

+0

我有一個函數(浮動R,浮克,浮B)設置顏色的節點。所以我讓用戶輸入他們想要的顏色名稱,然後我想要將該顏色名稱轉換爲我的函數的r,g,b值。 – user1565134 2012-07-31 08:51:03

+0

*「所以我讓用戶輸入他們想要的顏色名稱」* [Chartreuse](http://en.wikipedia.org/wiki/Chartreuse_%28color%29),任何人?改爲向用戶提供['JColorChooser'](http://docs.oracle.com/javase/7/docs/api/javax/swing/JColorChooser.html)。 – 2012-07-31 10:01:06

回答

0

如果你有一個字符串可以查找這個Color在一張地圖,這會給你的紅色,綠色和藍色值的顏色。

+0

@Mthethew爲更正而歡呼。 – 2012-07-31 08:44:12

+0

我有一個函數(float r,float g,float b)來設置一個節點的顏色。所以我讓用戶輸入他們想要的顏色名稱,然後我想要將該顏色名稱轉換爲我的函數的r,g,b值。 – user1565134 2012-07-31 08:50:53

+0

您還需要設置顏色。您可以將這些信息存儲在一個Map 中,以便稍後查找這些值。順便說一句,通常每個紅色,綠色,藍色是介於0和255之間的值。 – 2012-07-31 09:16:23

3

顏色限定有限號表示基本色枚舉。 This code excerpt使用反射來從它們的名稱映射到RGB表示。

除此之外,你必須保持地圖的顏色/ RGB值的,也可能是系統屬性的集合,並使用Color.getColor(String name)

+0

我有一個函數(float r,float g,float b)來設置節點的顏色。所以我讓用戶輸入他們想要的顏色名稱,然後我想要將該顏色名稱轉換爲我的函數的r,g,b值。 – user1565134 2012-07-31 08:49:26

1

創建一個包含所有可選的顏色與它們的RGB表示字符串連接在一起的映射(根據記錄,顏色是在java.awt包中找到):

Map<String,Color> colorMap = new HashMap<String,Color>(); 
     colorMap.put("white", new Color(255,255,255)); 
     colorMap.put("red", new Color(255,0,0)); 

然後使用由輸入的文本用戶查找你的顏色在地圖上:

String userColor = <whereever you get your string from>; 
Color result = colorMap.get(userColor.toLowerCase()); 

最後,使用具有int類型此Color對象的RGB檢索您需要的浮點值,並將其傳遞給你的函數:

yourFunction(Float.valueOf(result.getRed(),Float.valueOf(result.getGreen()),Float.valueOf(result.getBlue())); 

如果可能的話我會建議使用整數,而不是浮點數爲你的RGB,因爲它會如果不是所有情況下的範圍從0到整數255中最。

一個好地方,讓你在任何時候需要與他們的RGB的所有顏色是這個網站:http://cloford.com/resources/colours/500col.htm

+0

將顏色通道表示爲float,儘管可能不是如此,但可提供24位精度(*每個通道*)。僅僅因爲十進制表示看起來不準確,這並不意味着它在計算機使用它時會產生不準確的結果。事實上,對於8位通道值的轉換int <-> float是完全可逆的。 – Durandal 2012-07-31 12:11:56

+0

我同意這樣更準確,但是對於顏色的每個可能的十進制值,你有一個邏輯名嗎?由於人們實際使用的邏輯顏色名稱數量有限,因此在這種情況下我會使用整數。更小,更容易閱讀,並生成更易讀的代碼,因爲您可以省略Java的awt的所有解析。將int值賦予相應的浮點值。 – Massis87 2012-07-31 20:22:24

相關問題