Java中Color和16進制字符串互相轉(zhuǎn)換的方法
1.原理
主要是調(diào)用了toHexString(將int類型轉(zhuǎn)為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進制字符串轉(zhuǎn)為顏色的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.關(guān)鍵點
4.1 toHexString:沒啥好說的,JDK提供的將整數(shù)轉(zhuǎn)為16進制字符串。
4.2 number & 0xff : 確保int類型數(shù)據(jù)只有后8位是有效的,高24位都是無效的(都是0),int類型是32位,但是顏色值最大就是255,只需要8位就可以滿足需求,因此就要確保傳入的數(shù)據(jù)是合法的顏色值,而大于255的數(shù)據(jù)就要當作255處理,此時有兩種辦法,第一種就是本文這種處理方法,第二種就是加入判斷,如果數(shù)據(jù)大于255,那么就等于255,如果小于則不處理。相比較而言,本文處理方法是代碼最少的處理方法并且效率高。
4.3 &:按位“與”操作,如果二進制碼同位都是1,那么結(jié)果就是1,否則就是0。
4.4 0xff: 0x代表它后面的是十六進制的數(shù)字;f就是15,轉(zhuǎn)為2進制就是1111,2個f則是1111 1111(10進制的255),前面24位都是0,此時進行與操作,就確保了只有0——255范圍內(nèi)的int值是有效顏色值。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
SpringBoot中創(chuàng)建bean的7種方式總結(jié)
Spring是一款廣泛應(yīng)用于企業(yè)級應(yīng)用程序開發(fā)的Java框架,其 IOC 和 DI 特性可以有效地管理應(yīng)用程序中的對象,提高了應(yīng)用程序的可維護性和可擴展性,那你知道spring有哪些方式將bean放入容器嘛,今天就給大家總結(jié)一下2023-07-07
Java數(shù)據(jù)結(jié)構(gòu)之鏈表(動力節(jié)點之Java學院整理)
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之鏈表(動力節(jié)點之Java學院整理)的相關(guān)資料,需要的朋友可以參考下2017-04-04
Tomcat?8.5?+mysql?5.7+jdk1.8開發(fā)JavaSE的金牌榜小項目
這篇文章主要介紹了Tomcat?8.5?+mysql?5.7+jdk1.8開發(fā)JavaSE的金牌榜小項目,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05
struts2中simple主題下<s:fieldError>標簽?zāi)J樣式的移除方法
這篇文章主要給大家介紹了關(guān)于struts2中simple主題下<s:fieldError>標簽?zāi)J樣式的移除方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧2018-10-10
java高級用法之綁定CPU的線程Thread?Affinity簡介
java線程thread affinity是用來將java代碼中的線程綁定到CPU特定的核上,用來提升程序運行的性能,這篇文章主要介紹了java高級用法之綁定CPU的線程thread affinity的相關(guān)知識,需要的朋友可以參考下2022-05-05
Maven配置文件settings.xml的實現(xiàn)
Maven是一個用于構(gòu)建和管理Java項目的強大工具,它依賴于設(shè)置文件來配置和管理其行為,其中最重要的之一便是settings.xml文件,本文主要介紹了Maven配置文件settings.xml的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-01-01

