Java Color(int rgba)构造函数和int溢出

时间:2013-08-15 01:59:55

标签: java colors int awt

根据docs,这个构造函数存在:

public Color(int rgba,
         boolean hasalpha)

我没有看到如何使用它来创建等效的Color(255,255,255,255)(例如0xFFFFFFFF),因为java没有无符号整数。

如何将此构造函数用作“大”颜色?

修改

显然可以使用构造函数(惊讶),但解析像这样的RGBa颜色字符串会失败:

    int x = Integer.parseInt("0xFFFFFFFF", 16); // Number format error
    Color c = new Color(x, true);

解决方案似乎是使用BigInteger进行解析。对于错误的问题感到抱歉!

2 个答案:

答案 0 :(得分:5)

您的问题没有误导,但您似乎误解了Kon的答案:

你对Java的Integer一直被签名是正确的,但这并不意味着该数字中的信息位数较少。

创建颜色时:

new Color(255, 255, 255, 255)

与使用相同:

new Color(0xFFFFFFFF, true)

或使用:

new Color(0b11111111111111111111111111111111, true)

0xFFFFFFFF实际上是-1,但这并不意味着任何位都会发生变化;这只是一个代表问题。 Color只删除每个颜色分量的必要位。

因此,您可以使用以下方式创建所需的颜色:

Color c = new Color(-1,true);
System.out.println(c);
System.out.println(c.getAlpha());

产生:

java.awt.Color[r=255,g=255,b=255]
255

答案 1 :(得分:2)

去二进制。

颜色c =新颜色(0b11111111111111111111111111111111,true);

根据Java文档,“alpha分量位于24-31位,红色分量位于16-23位,绿色分量位于8-15位,蓝色分量位于0-7位”