关于java:Int argb颜色输出奇怪值

Int argb color output strange value

我正在尝试使用随机颜色创建小应用程序。

1
2
3
4
Random rnd = new Random();
        int color1 = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
        int color2 = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
        int color3 = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));

但是在color1,color2和color3中保存了诸如"-11338194"之类的值。 是否可以采用argb值? (如"255255255255"之类的东西)谢谢!


Java颜色由ARGB格式的32位整数表示。

这意味着最高的8位是alpha值,255表示完全不透明度,而0表示透明度。 您生成alpha值为255的颜色。

整数是带符号的数字,其最重要的位表示它是否为负数。 当您将所有前8位设置为1时,如果将其打印到屏幕上,则所有颜色都将为负数。

例:

1
2
3
4
5
 System.err.println("Color="+new java.awt.Color(0,0,255,0).getRGB());
 gives 255 as you expected - note that this is a fully transparent blue

 System.err.println("Color="+java.awt.Color.RED.getRGB());
 gives -65536, as the alpha channel value is 255 making the int negative.

如果您只想查看RGB值,只需执行逻辑AND以截断使十进制数字表示为负的Alpha通道位:

1
2
 System.err.println("Color="+(java.awt.Color.RED.getRGB() & 0xffffff));
 gives you 16711680

或者,您可以使用十六进制表示颜色:

1
2
System.err.println("Color="+String.format("%X",java.awt.Color.RED.getRGB() & 0xffffff));
which gives FF0000


试试这段代码,

1
2
3
4
Random rnd = new Random();
        int color1 = Color.argb(255, rnd.nextInt(256 - 0), rnd.nextInt(256 - 0), rnd.nextInt(256 - 0));
        int color2 = Color.argb(255, rnd.nextInt(256 - 0), rnd.nextInt(256 - 0), rnd.nextInt(256 - 0));
        int color3 = Color.argb(255, rnd.nextInt(256 - 0), rnd.nextInt(256 - 0), rnd.nextInt(256 - 0));

Color.argb()的参考

生成范围之间的随机数