[英]Java convert 0-255 int to rgb color
int colorInt = 41;
int color = Color.HSBtoRGB(colorInt, 1f, 1f);
System.out.print(color);
不管什么颜色,它总是返回-65536
有没有什么办法解决这一问题?
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.0-1.0)。 色相分量可以是任何浮点数。 从该底数中减去该底数以创建介于0和1之间的分数。然后将该分数乘以360,以在HSB颜色模型中产生色相角。
HSBtoRGB返回的整数在整数值的0-23位中编码颜色的值,该整数值与方法getRGB使用的格式相同。 可以将此整数作为参数提供给采用单个整数参数的Color构造函数。
检查此参考: https : //docs.oracle.com/javase/7/docs/api/java/awt/Color.html#HSBtoRGB(float,%20float,%20float)
正如我在评论中指出的那样,色相,饱和度和亮度的值应在0到1的范围内浮动(在Javadoc中对此方法进行了说明 )
这段代码将向您显示一个完整的色轮(从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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.