将整型颜色值转换为RGB



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

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

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

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

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

使用

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

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


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

从SDK 26开始,你可以直接使用

Color c = Color.valueOf(colorInt);

除此之外,似乎不可能从任意argb创建一个Color实例。底层代码使用私有构造函数:

/**
 * Creates a new <code>Color</code> instance from an ARGB color int.
 * The resulting color is in the {@link ColorSpace.Named#SRGB sRGB}
 * color space.
 *
 * @param color The ARGB color int to create a <code>Color</code> from
 * @return A non-null instance of {@link Color}
 */
@NonNull
public static Color valueOf(@ColorInt int color) {
    float r = ((color >> 16) & 0xff) / 255.0f;
    float g = ((color >>  8) & 0xff) / 255.0f;
    float b = ((color      ) & 0xff) / 255.0f;
    float a = ((color >> 24) & 0xff) / 255.0f;
    return new Color(r, g, b, a, ColorSpace.get(ColorSpace.Named.SRGB));
}

RGB采用十六进制数字格式。如果是整数值,请将其转换为十六进制,

似乎所引用的值和所需的格式不匹配。该值是十六进制的,而RGB将读取255, 0, 255,而整数是复合颜色表示。由于不清楚要完成的是什么,下面是所有三种变体:

如果复合颜色是一个整数,那么大多数颜色端点将不加修改地接受它。比如setBackgroundColor(colorInt)

如果您有十六进制值,那么Color.parseColor(#colorHex)将其转换为颜色对象。

同样,Color.rgb(redInt, greenInt, blueInt)会将红色、绿色和蓝色的值转换为一个颜色对象。

如果需要将组合整数恢复为颜色对象,使用Color.valueOf(colorInt)

就更简单了

最新更新