我该如何在Java中将十六进制颜色转换为RGB代码?在Google上,大多数示例都是关于如何从RGB转换为十六进制。
实际上,有一种更简单(内置)的方法可以做到这一点:
Color.decode("#FFCCEE");
我猜这应该可以解决问题:
/**
*
* @param colorStr e.g. "#FFFFFF"
* @return
*/
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 ) );
}
public static void main(String[] args) {
int hex = 0x123456;
int r = (hex & 0xFF0000) >> 16;
int g = (hex & 0xFF00) >> 8;
int b = (hex & 0xFF);
}
我在进行Android开发时使用以下工具:
int color = Color.parseColor("#123456");
这里有一个能够处理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;
}
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;
}
getRGB("444444") = 68,68,68
getRGB("FFFFFF") = 255,255,255
一个十六进制颜色代码是 #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;
}
关于 JavaFX
import javafx.scene.paint.Color;
.
Color whiteColor = Color.valueOf("#ffffff");
String hex="#00FF00"; // green
long thisCol=Long.decode(hex)+4278190080L;
int useColour=(int)thisCol;
如果您不添加4278190080 (#FF000000)作为颜色,它的 Alpha 值为 0,将不会显示。
将其转换为整数,然后根据原始十六进制字符串的长度(分别为3、6、9或12),将其两次divmod分别除以16、256、4096或65536。