美文网首页@产品程序员
Java Color与16进制字符串互相转换

Java Color与16进制字符串互相转换

作者: 天香阁主 | 来源:发表于2018-07-05 15:32 被阅读12次

    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.效果

    效果图.png

    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 Color与16进制字符串互相转换

        本文链接:https://www.haomeiwen.com/subject/polpuftx.html