2016-09-14 121 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); 
    } 
}