public static void main(String[] args) {
int hex = 0x123456;
int r = (hex & 0xFF0000) >> 16;
int g = (hex & 0xFF00) >> 8;
int b = (hex & 0xFF);
}
-1
对于 Android 开发,我使用:
int color = Color.parseColor("#123456");
1
这是一个处理RGB和RGBA版本的版本:
/**
* Converts a hex string to a color. If it can't be converted null is returned.
* @param hex (i.e. #CCCCCCFF or CCCCCC)
* @return Color
*/
public static Color HexToColor(String hex)
{
hex = hex.replace("#", "");
switch (hex.length()) {
case 6:
return new Color(
Integer.valueOf(hex.substring(0, 2), 16),
Integer.valueOf(hex.substring(2, 4), 16),
Integer.valueOf(hex.substring(4, 6), 16));
case 8:
return new Color(
Integer.valueOf(hex.substring(0, 2), 16),
Integer.valueOf(hex.substring(2, 4), 16),
Integer.valueOf(hex.substring(4, 6), 16),
Integer.valueOf(hex.substring(6, 8), 16));
}
return null;
}
5
十六进制颜色代码是#RRGGBB
RR,GG,BB是十六进制值,范围从0到255
我们称之为RR XY,其中X和Y是十六进制字符0-9A-F,A = 10,F = 15
十进制值为X * 16 Y.
如果RR = B7,则B的小数为11,因此值为11 * 16 7 = 183
public int[] getRGB(String rgb){
int[] ret = new int[3];
for(int i=0; i<3; i++){
ret[i] = hexToInt(rgb.charAt(i*2), rgb.charAt(i*2+1));
}
return ret;
}
public int hexToInt(char a, char b){
int x = a < 65 ? a-48 : a-55;
int y = b < 65 ? b-48 : b-55;
return x*16+y;
}
144
你可以这样做,如下:
public static int[] getRGB(final String rgb)
{
final int[] ret = new int[3];
for (int i = 0; i < 3; i++)
{
ret[i] = Integer.parseInt(rgb.substring(i * 2, i * 2 + 2), 16);
}
return ret;
}
/**
*
* @param colorStr e.g. "#FFFFFF"
* @return String - formatted "rgb(0,0,0)"
*/
public static String hex2Rgb(String colorStr) {
Color c = new Color(
Integer.valueOf(hexString.substring(1, 3), 16),
Integer.valueOf(hexString.substring(3, 5), 16),
Integer.valueOf(hexString.substring(5, 7), 16));
StringBuffer sb = new StringBuffer();
sb.append("rgb(");
sb.append(c.getRed());
sb.append(",");
sb.append(c.getGreen());
sb.append(",");
sb.append(c.getBlue());
sb.append(")");
return sb.toString();
}
4
很多这些解决方案都有效,但这是一种替代方案 .
String hex="#00FF00"; // green
long thisCol=Long.decode(hex)+4278190080L;
int useColour=(int)thisCol;
如果您不添加4278190080(#FF000000),则颜色的Alpha为0且不会显示 .
35
这是另一个处理RGBA版本的 faster 版本:
public static int hexToIntColor(String hex){
int Alpha = Integer.valueOf(hex.substring(0, 2), 16);
int Red = Integer.valueOf(hex.substring(2, 4), 16);
int Green = Integer.valueOf(hex.substring(4, 6), 16);
int Blue = Integer.valueOf(hex.substring(6, 8), 16);
Alpha = (Alpha << 24) & 0xFF000000;
Red = (Red << 16) & 0x00FF0000;
Green = (Green << 8) & 0x0000FF00;
Blue = Blue & 0x000000FF;
return Alpha | Red | Green | Blue;
}
15 回答
我想这应该这样做:
实际上,有一种更容易(内置)的方式:
对于 Android 开发,我使用:
这是一个处理RGB和RGBA版本的版本:
十六进制颜色代码是#RRGGBB
RR,GG,BB是十六进制值,范围从0到255
我们称之为RR XY,其中X和Y是十六进制字符0-9A-F,A = 10,F = 15
十进制值为X * 16 Y.
如果RR = B7,则B的小数为11,因此值为11 * 16 7 = 183
你可以这样做,如下:
例如
将其转换为整数,然后根据原始十六进制字符串的长度(分别为3,6,9或12)将其两次调整为16,256,4096或65536 .
要详细说明@xhh提供的答案,您可以在返回之前附加红色,绿色和蓝色以将字符串格式化为“rgb(0,0,0)” .
很多这些解决方案都有效,但这是一种替代方案 .
如果您不添加4278190080(#FF000000),则颜色的Alpha为0且不会显示 .
这是另一个处理RGBA版本的 faster 版本:
对于 JavaFX
.
十六进制颜色代码已经是rgb . 格式为#RRGGBB
前几天我一直在解决类似的问题,发现将十六进制颜色字符串转换为int数组[alpha,r,g,b]很方便:
如果您不想使用AWT Color.decode,那么只需复制方法的内容:
Integer.decode处理#或0x,具体取决于字符串的格式