Java中Color和16进制字符串互相转换的方法

 更新时间:2018年07月05日 16:40:41   作者:天香阁主  
这篇文章主要给大家介绍了关于Java中Color和16进制字符串互相转换的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1.原理

主要是调用了toHexString(将int类型转为16进制字符串)、parseInt(将字符串解析为int)这两个方法。

2.代码

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值是有效颜色值。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Java 泛型详解与范例

    Java 泛型详解与范例

    hello !大家好!今天的主题就是:泛型。在使用集合类时,大家就已经接触到泛型了,那就是每个集合类后面的尖括号<>,这样一对尖括号,在java中就称为泛型。那么泛型这一个点,我们又该知道多少呢?我们往下看
    2021-11-11
  • SpringBoot中创建bean的7种方式总结

    SpringBoot中创建bean的7种方式总结

    Spring是一款广泛应用于企业级应用程序开发的Java框架,其 IOC 和 DI 特性可以有效地管理应用程序中的对象,提高了应用程序的可维护性和可扩展性,那你知道spring有哪些方式将bean放入容器嘛,今天就给大家总结一下
    2023-07-07
  • Java数据结构之链表(动力节点之Java学院整理)

    Java数据结构之链表(动力节点之Java学院整理)

    这篇文章主要介绍了Java数据结构之链表(动力节点之Java学院整理)的相关资料,需要的朋友可以参考下
    2017-04-04
  • Tomcat 8.5 +mysql 5.7+jdk1.8开发JavaSE的金牌榜小项目

    Tomcat 8.5 +mysql 5.7+jdk1.8开发JavaSE的金牌榜小项目

    这篇文章主要介绍了Tomcat 8.5 +mysql 5.7+jdk1.8开发JavaSE的金牌榜小项目,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Java无限级树(递归)超实用案例

    Java无限级树(递归)超实用案例

    下面小编就为大家带来一篇Java无限级树(递归)超实用案例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • java数学工具类Math详解(round方法)

    java数学工具类Math详解(round方法)

    这篇文章主要为大家详细介绍了java数学工具类Math,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • struts2中simple主题下<s:fieldError>标签默认样式的移除方法

    struts2中simple主题下<s:fieldError>标签默认样式的移除方法

    这篇文章主要给大家介绍了关于struts2中simple主题下<s:fieldError>标签默认样式的移除方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-10-10
  • java高级用法之绑定CPU的线程Thread Affinity简介

    java高级用法之绑定CPU的线程Thread Affinity简介

    java线程thread affinity是用来将java代码中的线程绑定到CPU特定的核上,用来提升程序运行的性能,这篇文章主要介绍了java高级用法之绑定CPU的线程thread affinity的相关知识,需要的朋友可以参考下
    2022-05-05
  • java图形界面编程实战代码

    java图形界面编程实战代码

    这篇文章主要介绍了java图形界面编程实战代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Maven配置文件settings.xml的实现

    Maven配置文件settings.xml的实现

    Maven是一个用于构建和管理Java项目的强大工具,它依赖于设置文件来配置和管理其行为,其中最重要的之一便是settings.xml文件,本文主要介绍了Maven配置文件settings.xml的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01

最新评论