【问题标题】:Java Color conversionJava 颜色转换
【发布时间】:2015-10-14 22:09:48
【问题描述】:

我在使用com.esri.arcgis.display.IColor 的方法时遇到问题。该方法是IColor.getRGB(),它返回一个int

IColor symbolColor = symbol.getColor();
int colorInt = symbolColor.getRGB();
//TODO: get RGB values from colorInt

来自documentation

RGB 返回根据红色、绿色和蓝色属性计算的长 (ASCII) 数字。

我需要以某种方式从这个 int 中获取单个 RGB 值(标准 0-255),但我几乎找不到任何关于从 ASCII 数字转换为 RGB 值的信息。

【问题讨论】:

  • 一个 int 是一个 int 是一个 int。您可能会查看格式化为十进制的colorInt,例如 10760562,它作为 RGB 值似乎没有意义,但如果您将其格式化并打印为十六进制值,它将是 @987654328 @ — 10760562 == 0xA43172,其中清楚地包含单独的红色、绿色和蓝色值。

标签: java colors type-conversion


【解决方案1】:

已通过将 int 转换为 hex,然后使用 Color.decode() 解码 hex 字符串以获得 Color 来解决。使用 Color 实例,我们可以获取单个 RGB 值。

IColor symbolColor = symbol.getColor();
int colorInt = symbolColor.getRGB();
String hexColor = Integer.toHexString(colorInt);
Color color = Color.decode("#"+hexColor);
int red = color.getRed();
int blue = color.getBlue();
int green = color.getGreen();
int alpha = color.getAlpha();`

【讨论】:

  • 这效率低下,因为您不必要地转换为字符串并返回。
【解决方案2】:

可以通过传输它们的 RGB 整数来转换这些值。

int rgb = symbol.getColor().getRGB();
Color color = new Color(rgb);
int red = color.getRed();
int blue = color.getBlue();
int green = color.getGreen();
int alpha = color.getAlpha();

您可能需要进一步调查 rgb 变量是否也包含 alpha 值,在这种情况下您想改用 new Color(rgb, true)

【讨论】:

  • 如安迪·特纳的链接所示,使用位运算和移位会更直接、更快捷。
  • @dragon66 我个人更喜欢使用库而不是按位运算,因为我发现它们非常不可读。这就是为什么我回答了这种可能性。
猜你喜欢
  • 2014-06-04
  • 2017-07-19
  • 1970-01-01
  • 2019-10-29
  • 2020-08-05
  • 2017-09-11
  • 2011-05-12
  • 2019-11-14
  • 2019-02-08
相关资源
最近更新 更多