2012-08-01 100 views
0

我想要一個用戶輸入十六進制int並使其更暗。有任何想法嗎?需要使一個十六進制0xff ******字符串較深(* =任何十六進制字符)

+2

你必須給出一些上下文。數字本身並沒有「黑暗」屬性。 7不會比13或0xff356483更深。 – Eclipse 2012-08-01 23:02:18

+0

你是否有6字節RRGGBB格式的顏色,你想在保持色調/飽和度的同時降低強度? – 2012-08-01 23:09:07

+0

您的意思是說:「給定一個RGB顏色作爲十六進制數,將其轉換爲代表'較暗'顏色的新十六進制數」?如果是這樣,「黑暗」是什麼意思?如果顏色已經很暗,如0x00202020怎麼辦? – 2012-08-01 23:09:53

回答

2

只是做二進制減法:

int red = 0xff0000; 
int darkerRed = (0xff0000 - 0x110000); 
int programmaticallyDarkerRed; 

你甚至可以使其與一個循環較暗:

for(int i = 1; i < 15; i++) 
{ 
    programmaticallyDarkerRed = (0xff0000 - (i * 0x110000)); 
} 

它得到0x000000或黑色越近,越暗它將會。

+0

您可能不應刪除舊的答案以發佈完全相同的副本。 – Jeffrey 2012-08-01 23:28:25

+2

如果一個答案被拒絕投票,你應該在答案中解決問題,而不是發佈一個新問題。 – Jeffrey 2012-08-01 23:30:43

+0

很抱歉,但沒有,它沒有工作,它適用於一些但不是所有的顏色,這裏是他們的列表:\t \t \t \t \t \t公共靜態INT紫色= 0xffCC33FF; \t public static int red = 0xffCC0000; \t public static int green = 0xff33CC33; \t public static int blue = 0xff3366FF; \t public static int yellow = 0xffFFFF66; \t public static int pink = 0xFFFF99FF; \t public static int white = 0xffFFFFFF; \t public static int black = 0xff000000; \t public static int gray = 0xff404040; \t public static int lightgrey = 0xffa0a0a0; \t public static int orange = 0xffFF9900; – user1462577 2012-08-01 23:46:51

0

您可以在十六進制值轉換爲Color,然後變暗Color對象

// Convert the hex to an color (or use what ever method you want) 
Color color = Color.decode(hex); 

// The fraction of darkness you want to apply 
float fraction = 0.1f; 

// Break the color up 
int red = color.getRed(); 
int blue = color.getBlue(); 
int green = color.getGreen(); 
int alpha = color.getAlpha(); 

// Convert to hsb 
float[] hsb = Color.RGBtoHSB(red, green, blue, null); 
// Decrease the brightness 
hsb[2] = Math.min(1f, hsb[2] * (1f - fraction)); 
// Re-assemble the color 
Color hSBColor = Color.getHSBColor(hsb[0], hsb[1], hsb[2]); 

// If you need it, you will need to reapply the alpha your self 

UPDATE

拿回來爲十六進制,你可以嘗試像

int r = color.getRed(); 
int g = color.getGreen(); 
int b = color.getBlue(); 

String rHex = Integer.toString(r, 16); 
String gHex = Integer.toString(g, 16); 
String bHex = Integer.toString(b, 16); 

String hexValue = (rHex.length() == 2 ? "" + rHex : "0" + rHex) 
       + (gHex.length() == 2 ? "" + gHex : "0" + gHex) 
       + (bHex.length() == 2 ? "" + bHex : "0" + bHex); 

int intValue = Integer.parseInt(hex, 16); 

現在,如果這不是很對,我會看看,看看是否有任何答案的S O或谷歌

+0

但我怎麼回到一個十六進制int? 8位 – user1462577 2012-08-01 23:41:27

1

我會用Color.darker

Color c = Color.decode(hex).darker();

+0

但我怎麼會將它轉換回十六進制int? – user1462577 2012-08-01 23:37:06

+0

@ user1462577您可以使用['Color.toRGB()'](http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html)爲您的argb值獲取'int' #getRGB()),然後你可以使用['Integer.toHexString()'](http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#toHexString(int) )將其轉換爲十六進制表示。 – Jeffrey 2012-08-01 23:58:13

+0

@Downvoter謹慎解釋? – Jeffrey 2012-08-01 23:58:19

相關問題