如何在Java中从十六进制颜色代码获取RGB值

17

我有一个十进制颜色码(例如:4898901)。我将它转换成相应的十六进制代码,如4ac055。如何从十六进制颜色代码中获取红、绿和蓝色组件值?


你需要从一个字符串中获取3个整数吗?还是从一个字符串中获取3个字符串? - Mister Smith
我想从我的十六进制颜色代码中获取红色、绿色和蓝色的三个整数值。 - androidGuy
7个回答

70

假设这是一个字符串:

// edited to support big numbers bigger than 0x80000000
int color = (int)Long.parseLong(myColorString, 16);
int r = (color >> 16) & 0xFF;
int g = (color >> 8) & 0xFF;
int b = (color >> 0) & 0xFF;

我在我的应用程序中使用了这段代码,当在Android 2.3上运行时,会出现对于myColorString的异常:"无法将'4282291905'解析为整数"。你能告诉我为什么吗? - NrNazifi
@ProSoft - 上述代码不适用于您,因为数字4282291905超出了整数范围。您可以使用Long类型代替(我将修复答案)。 - MByD

9
如果你有一个字符串,这种方式更好:
Color color =  Color.decode("0xFF0000");
int red = color.getRed();
int blue = color.getBlue();
int green = color.getGreen();

如果您有一个数字,请按照以下方式操作:
Color color = new Color(0xFF0000);

当然,为了获得颜色,您只需执行以下操作:
float red = color.getRed();
float green = color.getGreen();
float blue = color.getBlue();

3
我无法在Android中找到这个类 - android.graphics.Color没有这样的方法。 - PPartisan
我已经有一段时间没有玩弄这段代码了。我相信这是使用标准的Java Color类。 http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html - Daniel Ryan

7

试试这个:

colorStr e.g. "#FFFFFF"

public static Color hex2Rgb(String colorStr) {
    return new Color(
            Integer.valueOf( colorStr.substring( 1, 3 ), 16 ),
            Integer.valueOf( colorStr.substring( 3, 5 ), 16 ),
            Integer.valueOf( colorStr.substring( 5, 7 ), 16 ) );
}

使用Color类需要使用java-rt-jar-stubs-1.5.0.jar,因为Color类来自于java.awt.Color


7
我不确定您的确切需求。以下是一些提示。
使用Integer类的方法,可以将十进制数转换为其十六进制表示形式。
Integer.toHexString(yourNumber);

要获取RGB值,可以使用Color类:

Color color = new Color(4898901);
float r = color.getRed();
float g = color.getGreen();
float b = color.getBlue();

2
String hex1 = "#FF00FF00";    //BLUE with Alpha value = #AARRGGBB

int a = Integer.valueOf( hex1.substring( 1, 3 ), 16 );
int r = Integer.valueOf( hex1.substring( 3, 5 ), 16 );
int g = Integer.valueOf( hex1.substring( 5, 7 ), 16 );
int b = Integer.parseInt( hex1.substring( 7, 9 ), 16 );

Toast.makeText(getApplicationContext(), "ARGB: " + a + " , " + r + " ,  "+ g + " , "+ b , Toast.LENGTH_SHORT).show();

String hex1 = "#FF0000";    //RED with NO Alpha = #RRGGBB

int r = Integer.valueOf( hex1.substring( 1, 3 ), 16 );
int g = Integer.valueOf( hex1.substring( 3, 5 ), 16 );
int b = Integer.parseInt( hex1.substring( 5, 7 ), 16 );

Toast.makeText(getApplicationContext(), "RGB: " + r + " ,  "+ g + " , "+ b , Toast.LENGTH_SHORT).show();

1
int color = Color.parseColor("#519c3f");

int red = Color.red(color);
int green = Color.green(color);
int blue = Color.blue(color);

1

当你有一个 hex-code : 4ac055 时,前两个字母是红色。接下来的两个字母是绿色,最后两个字母是蓝色。所以当你有红色的十六进制代码时,你必须将其转换回dez。在这个例子中,red 4a = 74Green c0 = 192blue = 85

尝试编写一个函数,它可以拆分 hexcode 并返回 rgb 代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接