将整数颜色值转换为 RGB

2022-09-01 07:56:37

我正在尝试修改第三方软件。我想使用由某些方法返回的颜色(我无法修改)作为整数。但是,我想使用RGB格式,就像#FF00FF一样。如何进行转换?

这是一个HTML示例,http://www.shodor.org/stella2java/rgbint.html 我想在Android上的Java中存档同样的东西。


答案 1

对我来说,最简单和最好的解决方案是直接使用Color类,如下所示:

int red = Color.red(intColor);
int green = Color.green(intColor);
int blue = Color.blue(intColor);
int alpha = Color.alpha(intColor);

这样,我已经可以处理整数值,而不必处理字符串。另一方面,如果代表rgb颜色的字符串是你需要的,Pankaj Kumar的答案是最好的。我希望这对某人有用。


答案 2

使用这个

String hexColor = String.format("#%06X", (0xFFFFFF & intColor));

我们知道十六进制中的颜色值长度为 6。所以你在这里看到6。%06X 与来自 (0xFFFFFF & intColor) 的结果匹配,如果长度小于 6,则通过在结果左侧追加零来生成结果 6。你看到#,所以这个#char被附加到结果,最后你得到一个十六进制颜色值。


自 API 26 起的更新

自 API 26 以来,出于类似的原因,引入了新的方法 Color.valueOf(....) 来转换颜色。你可以像这样使用它

// sRGB
Color opaqueRed = Color.valueOf(0xffff0000); // from a color int
Color translucentRed = Color.valueOf(1.0f, 0.0f, 0.0f, 0.5f);

// Wide gamut color
ColorSpace sRgb = ColorSpace.get(ColorSpace.Named.SRGB);
@ColorLong long p3 = Color.pack(1.0f, 1.0f, 0.0f, 1.0f, sRgb);
Color opaqueYellow = Color.valueOf(p3); // from a color long

// CIE L*a*b* color space
ColorSpace lab = ColorSpace.get(Named.CIE_LAB);
Color green = Color.valueOf(100.0f, -128.0f, 128.0f, 1.0f, lab);

mView.setBackgroundColor(opaqueRed.toArgb());
mView2.setBackgroundColor(green.toArgb());
mView3.setBackgroundColor(translucentRed.toArgb());
mView4.setBackgroundColor(opaqueYellow.toArgb());