int argb 颜色输出奇怪的值

Posted

技术标签:

【中文标题】int argb 颜色输出奇怪的值【英文标题】:Int argb color output strange value 【发布时间】:2016-11-06 13:03:57 【问题描述】:

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

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”什么的)谢谢!

【问题讨论】:

想想-11338194代表什么32位整数...然后算出它的4个8位值是什么... @JonSkeet,ghm。字节 b = (byte) color1 不起作用。抱歉,我只是在学习编码 嗯,你必须定义“不起作用”才能有意义......不清楚你的期望。 @JonSkeet ,当我尝试转换为字节时,它具有以下值:(color1 = -9003271 并且字节值为-7) 对,但不清楚您的预期是什么或为什么。 【参考方案1】:

试试这个代码,

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));

Reference for Color.argb()

Generate Random number between range

【讨论】:

谢谢!但它不会改变任何东西:( @Dimitry 还在产生负值吗? 是的,它仍在产生负的奇怪值【参考方案2】:

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

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

整数是一个有符号数,它的最高有效位告诉它是否为负数。当您将所有前 8 位设置为 1 时,如果您将其打印到屏幕上,所有颜色实际上都是负数。

例子:

 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 值,只需执行逻辑与来截断 alpha 通道位,这会使十进制数字表示为负数:

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

或者,您可以将颜色以十六进制表示为:

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

【讨论】:

(此示例来自桌面 JavaSE,您可能会发现 android 中的细微差别。)

以上是关于int argb 颜色输出奇怪的值的主要内容,如果未能解决你的问题,请参考以下文章

将 int 颜色转换为 argb

将 int 转换为 char* 时的奇怪输出

Java On AND'ing short 与 short,它被升级为 int 并返回奇怪的值

C++:在转换为 int 并添加时为我的字符数组获取奇怪的值

int的打印数组会在ada中生成奇怪的输出

GDI+_从Bitmap里得到的Color数组值分解