有一个简单的算法可以将整数值转换为 0-255 之间三个数字的 RGB 值 integer to rgb 。我从 Android Colors 得到整数。我什至跑了:
System.out.println(Color.decode("-16711681"));
答案是 java.awt.Color[r=0,g=255,b=0],这是预期的。
我在第一步确实遇到了问题,-16711681 % 256 是 255,我预计红色为 0。在 Java 中我编码:
System.out.println(-16711681 % 256);
我得到 -1,这意味着我必须添加 256,而我的红色是 255。有人可以帮助我吗?
最佳答案
那是因为您的数字不是像您的 gamedev 链接所建议的那样是 ABGR 包装的整数,而是 ARGB 包装的整数。
Color.decode(int)
想要以下格式的颜色:
0xAARRGGBB
其中 AA
是透明度,RR
是红色,GG
是绿色,BB
是蓝色。当您执行 color % 256
时,将返回颜色的蓝色 (BB
) 部分。
如果我们使用Integer.toHexString(-16711681)
查看颜色,我们会得到:
Color: ff00ffff
(Format: AARRGGBB)
相当于Color[r=0,g=255,b=255]
如果要读取红色值,需要先将其移过来:
(color >> 16) & 0xFF
关于java - 将青色的整数颜色转换为 RGB 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25556165/