我现在得到的是一个 string 类型 rgba(102, 0, 255, 0.506)
怎么把这个转换成 # 这样的类型呢?我的意思是转换成 #33333 这样的?
RGBA你有没有查过资料?最后的那个数值是alpha。是透明度。这个alpha和RGB本身是相互独立的。
rgb(a,b,c)对应的是(a<<16 | b<<8 | c)
得到的表达式应该是:#ffffff 这样的,6个十六进制数表示的。
你写的#33333 这是5个16进制数,不知道你这个是搞什么鬼。
楼上说的比较清楚了,首先你要知道RGBA的含义是什么,需要知道#FB00DC这样的颜色表示方法是什么。
颜色表示的方法有很多种,RGBA是一种,四个字母分别对应了红、绿、蓝、透明度的值,JAVA中四个的取值范围都是0-255.
而#ff6edc这样的形式是用16位进制数表示颜色的,ff代表红色的值,对应十进制数255,6e对应绿色的值,对应十进制数0,dc对应蓝颜色的值,对应十进制的数220;
如果你在java中知道了一个颜色对象,比如Color对象,可以拿到其红绿蓝三颜色的对应值,然后调用Integer.thHexString(rValue);就可以将十进制的值转换为16进制的对应值,三个转换完之后连接到一起就是你要的了。
Color color = new Color(255, 110, 220);
int rValue = color.getRed();
int gValue = color.getGreen();
int bValue = color.getBlue();
String r16Str = Integer.toHexString(rValue);
String g16Str = Integer.toHexString(gValue);
String b16Str = Integer.toHexString(bValue);
System.out.println("Color(255,110,220)对应16进制颜色表示为:#" + r16Str + g16Str
+ b16Str);
输出结果如下:
Color(251,0,220)对应16进制颜色表示为:#ff6edc
注意转换的时候,如果是一位需要在前面补0.