2018年Java中Color与16进制字符串互相转换:原理、代码及关键点详解

更新时间为 2018 年 07 月 05 日 16 时 40 分 41 秒,作者是天香阁主。
这篇文章主要给大家介绍了 Java 中 Color 与 16 进制字符串相互转换的相关资料。文中通过示例代码进行了非常详细的介绍。这些内容对大家的学习或者工作具有一定的参考学习价值。需要的朋友们可以跟着小编一起来学习学习。
1.原理
主要调用了将 int 类型转为 16 进制字符串的 toHexString 方法,以及将字符串解析为 int 的 parseInt 方法。
2.代码
公共静态的 void 方法 main,该方法接受一个字符串数组参数 args。
使用 colorToHexValue 函数可以将 Color.RED 转换为十六进制字符串,该十六进制字符串存储在 hexString 变量中。
输出的内容为:“16 进制字符串:”加上 hexString 这个变量的值。
Color 被赋值为通过 fromStrToARGB 函数处理后的 hexString 所对应的颜色值。
输出“16 进制字符串转为颜色的 ARGB 值:”以及颜色的透明度值(通过 color.getAlpha()获取并转换为字符串)、红色值(通过 color.getRed()获取并转换为字符串)等信息,即“("+String.valueOf(color.getAlpha())+","+String.valueOf(color.getRed())+","
获取颜色的绿色分量值并转换为字符串,然后加上逗号,再获取颜色的蓝色分量值并转换为字符串,最后加上右括号。即:先将 color.getGreen()转换为字符串,再加上逗号,接着将 color.getBlue()转换为字符串,最后加上右括号。具体为:String.valueOf(color.getGreen())加上逗号后再加上 String.valueOf(color.getBlue()),最后加上右括号。也就是:(String.valueOf(color.getGreen())+","+String.valueOf(color.getBlue())+")")。
}
如果 color 不为 null,则获取其红色分量、绿色分量和蓝色分量,分别用 red、green、blue 表示。然后将 red、green、blue 分别转换为十六进制字符串,不足两位的在前面补 0。最后将这三个十六进制字符串拼接起来,形成一个六位的十六进制颜色值并返回。如果 color 为 null,则返回 null。
返回将 color 的 alpha 值转换为十六进制的结果加上将 color 的红色值转换为十六进制的结果加上将 color 的绿色值转换为十六进制的结果加上将 color 的蓝色值转换为十六进制的结果。
}
如果要将一个整数转换为十六进制值,那么可以通过以下方式实现。首先获取整数的二进制表示,然后将二进制转换为十六进制。具体来说,对于给定的整数 number,通过特定的算法将其转换为十六进制的字符串表示。
将一个数与 0xff 进行按位与运算后,再将结果转换为十六进制字符串,这个字符串就是最终的结果。具体来说,就是通过 Integer.toHexString 方法,把 number 与 0xff 按位与运算后的结果转换为十六进制表示的字符串,这个字符串就是最终的 result。
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.关键点
没啥好说的,JDK 提供了将整数转为 16 进制字符串的功能,这就是 toHexString 。
确保 int 类型数据的后 8 位有效,高 24 位无效(为 0)。因为 int 类型是 32 位,而颜色值最大为 255 只需 8 位就能满足需求,所以要确保传入的数据是合法的颜色值。对于大于 255 的数据,要当作 255 处理,此时有两种办法,一是本文的处理方法,二是加入判断,若数据大于 255 则等于 255,若小于则不处理。相比较而言,本文处理方法是代码最少的处理方法并且效率高。
按位“与”操作,即如果两个二进制码在相同的位上都是 1,那么结果为 1;如果相同位上不全是 1,那么结果为 0。
4.4 0xff:0x 表示它后面的是十六进制数字;f 代表 15,转化为二进制是 1111,两个 f 就是 11111111(十进制的 255);前面 24 位都为 0,此时进行与操作,就能确保只有 0 到 255 范围内的 int 值是有效颜色值。
总结
这篇文章已全部呈现。希望其内容能对大家的学习或工作有参考价值。若有疑问,可留言交流。感谢大家对脚本之家的支持。