繁体   English   中英

Java将0-255 int转换为RGB颜色

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM