1.原理
主要是调用了tohexstring(将int类型转为16进制字符串)、parseint(将字符串解析为int)这两个方法。
2.代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
public static void main(string[] args) { string hexstring = colortohexvalue(color.red); system.out.println( "16进制字符串:" + hexstring); color color = fromstrtoargb(hexstring); system.out.println( "16进制字符串转为颜色的argb值:(" +string.valueof(color.getalpha())+ "," +string.valueof(color.getred())+ "," +string.valueof(color.getgreen())+ "," +string.valueof(color.getblue())+ ")" ); } private static string colortohexvalue(color color) { return inttohexvalue(color.getalpha()) + inttohexvalue(color.getred()) + inttohexvalue(color.getgreen()) + inttohexvalue(color.getblue()); } private static string inttohexvalue( int number) { string result = integer.tohexstring(number & 0xff ); while (result.length() < 2 ) { result = "0" + result; } return result.touppercase(); } private static color fromstrtoargb(string str) { string str1 = str.substring( 0 , 2 ); string str2 = str.substring( 2 , 4 ); string str3 = str.substring( 4 , 6 ); string str4 = str.substring( 6 , 8 ); int alpha = integer.parseint(str1, 16 ); int red = integer.parseint(str2, 16 ); int green = integer.parseint(str3, 16 ); int blue = integer.parseint(str4, 16 ); color color = new color(red, green, blue, alpha); return color; } |
3.效果
4.关键点
4.1 tohexstring:没啥好说的,jdk提供的将整数转为16进制字符串。
4.2 number & 0xff : 确保int类型数据只有后8位是有效的,高24位都是无效的(都是0),int类型是32位,但是颜色值最大就是255,只需要8位就可以满足需求,因此就要确保传入的数据是合法的颜色值,而大于255的数据就要当作255处理,此时有两种办法,第一种就是本文这种处理方法,第二种就是加入判断,如果数据大于255,那么就等于255,如果小于则不处理。相比较而言,本文处理方法是代码最少的处理方法并且效率高。
4.3 &:按位“与”操作,如果二进制码同位都是1,那么结果就是1,否则就是0。
4.4 0xff: 0x代表它后面的是十六进制的数字;f就是15,转为2进制就是1111,2个f则是1111 1111(10进制的255),前面24位都是0,此时进行与操作,就确保了只有0——255范围内的int值是有效颜色值。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:https://www.jianshu.com/p/c0b8068dd626