将整数颜色值转换为RGB

Mar*_*rek 25 java android colors type-conversion

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

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

Fra*_*.M. 66

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

int red = Color.red(intColor);
int green = Color.green(intColor);
int blue = Color.blue(intColor);
int alpha = Color.alpha(intColor);
Run Code Online (Sandbox Code Playgroud)

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

  • 语法可能已更改。除非有一个我不知道的静态 Color 类:`new Color(intColor).getRed();` (2认同)
  • 这些是Color类的静态方法,因此此处显示的语法正确(并且在Android 7中对我有效)。 (2认同)

Pan*_*mar 41

用这个

String hexColor = String.format("#%06X", (0xFFFFFF & intColor));
Run Code Online (Sandbox Code Playgroud)

我们知道HEX中的颜色值长度是6.所以你在这里看到6.%06X匹配来自(0xFFFFFF&intColor)的结果,如果length小于6,则通过在结果的左侧附加ZERO使得结果为6.你看到#,所以这个#char被附加到结果,最后你得到一个HEX 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());
Run Code Online (Sandbox Code Playgroud)

  • 实际上它的作用是: - 我们知道HEX中颜色值的长度为6.所以你在这里看到6.`%06X`匹配来自`(0xFFFFFF&intColor)`的结果,如果长度小于6,则通过在结果的左侧附加ZERO使得结果为6.你看到```,所以这个```char被附加到结果中,最后你得到一个HEX COLOR值.我现在清楚了吗? (2认同)

pat*_*ckf 5

SDK 26 开始你可以使用

Color c = Color.valueOf(colorInt);
Run Code Online (Sandbox Code Playgroud)

除此之外,似乎不可能从任意 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));
}
Run Code Online (Sandbox Code Playgroud)