2016-09-14 66 views
0
int colorInt = 41; 
    int color = Color.HSBtoRGB(colorInt, 1f, 1f); 
    System.out.print(color); 

不要緊,什麼顏色,它總是返回 -65536的Java轉換0-255 INT-RGB色

有什麼辦法解決這一問題?

+0

請閱讀[該方法的的Javadoc](HTTPS://文檔。首先是oracle.com/javase/8/docs/api/java/awt/Color.html#HSBtoRGB-float-float-float-)。您提供的參數不正確。基本上所有的參數都應該在0到1範圍內漂浮,儘管色相也可以是更大的數字,但只考慮小數部分。 –

+0

您的編輯無法解決問題;你的色調值仍然是一個整數 - 它應該是從零到1的分數(如0.1f,0.2f,0.3f等)。然後你會看到不同的返回值。 –

回答

0
float hue = 0.533f, saturation = 0.36667f, brightness = 0.535f; 
int color = Color.HSBtoRGB(hue, saturation, brightness); 
int red = (color >> 16) & 0xFF; 
int green = (color >> 8) & 0xFF; 
int blue = color & 0xFF; 
System.out.println(color + " " + red + " " + green + " " + blue); 

您正在傳遞不正確的參數並介意參數的範圍。

飽和度和亮度分量應該是浮點數 0和1之間的數值(數字在0.0-1.0範圍內)。色相 組件可以是任何浮點數。從中減去此編號 的底線以創建0和1之間的分數。然後將該分數編號乘以360以產生HSB顏色模型中的色相角 。

由HSBtoRGB返回的整數編碼的彩色 的一個整數值,是由 方法的getRGB使用的格式相同的比特0-23的值。此整數可以作爲參數提供給採用單個整數參數的Color構造函數。

檢查該參考文獻:https://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#HSBtoRGB(float,%20float,%20float)

0

正如我在我的意見指出的,色調,飽和度和亮度的值應在的範圍內漂浮0到1

(其在 Javadoc for this method解釋)

該代碼將告訴你一個整體的色輪(每度從0到360)與特定的飽和度和亮度:

public static void main(String[] args) { 
    float saturation = 0.8f; 
    float brightness = 0.7f; 
    for (int degree = 0; degree < 360; degree++) { 
     int color = Color.HSBtoRGB(degree/360f, saturation, brightness); 
     System.out.format("%3d %6.4f #%06x\n", degree, degree/360f, color & 0xffffff); 
    } 
}