2016-07-04 2 views
0

Я пытаюсь создать небольшое приложение, где используются случайные цвета.Int argb color output странное значение

Random rnd = new Random(); 
     int color1 = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 
     int color2 = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 
     int color3 = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 

Но цвет1, цвет2 и цвет 3 сохраненные значения, такие как «-11338194». Можно ли взять значение argb? (Например, «255255255255» или еще что-то) Спасибо!

+0

Подумайте о том, что 32 бит integer представлен -11338194 ... затем выясните, каковы его 4 8-битные значения ... –

+0

@JonSkeet, ghm. Байт b = (байт) color1 не работает. Извините, я просто научился код –

+0

Ну, вам нужно определить, что «не работает», чтобы это имело смысл ... неясно, чего вы ожидали. –

ответ

0

Попробуйте этот код,

Random rnd = new Random(); 
     int color1 = Color.argb(255, rnd.nextInt(256 - 0), rnd.nextInt(256 - 0), rnd.nextInt(256 - 0)); 
     int color2 = Color.argb(255, rnd.nextInt(256 - 0), rnd.nextInt(256 - 0), rnd.nextInt(256 - 0)); 
     int color3 = Color.argb(255, rnd.nextInt(256 - 0), rnd.nextInt(256 - 0), rnd.nextInt(256 - 0)); 

Reference for Color.argb()

Generate Random number between range

+0

Спасибо! Но это ничего не меняет :( –

+0

@Dimitry Все еще генерирует отрицательные значения? –

+0

да, он все еще порождает отрицательные странные значения –

0

цвет Java, представлен 32-битового целого числа в формате ARGB.

Это означает, что наивысший 8 бит является альфа-значением, 255 означает полную непрозрачность, а 0 означает прозрачность. Вы генерируете цвета с альфа-значением 255.

Целое число является знаковым числом, его старший бит указывает, является ли он отрицательным. Когда вы установите все первые 8 бит в 1, фактически все цвета будут отрицательными числами, если вы напечатаете их на экране.

Пример:

System.err.println("Color="+new java.awt.Color(0,0,255,0).getRGB()); 
gives 255 as you expected - note that this is a fully transparent blue 

System.err.println("Color="+java.awt.Color.RED.getRGB()); 
gives -65536, as the alpha channel value is 255 making the int negative. 

Если вы хотите, чтобы увидеть значения RGB, просто сделать логическое И укоротить биты альфа-канала, которые делают десятичное числовое представление отрицательное:

System.err.println("Color="+(java.awt.Color.RED.getRGB() & 0xffffff)); 
gives you 16711680 

В качестве альтернативы вы можете получить представление цвета в шестнадцатеричном виде:

System.err.println("Color="+String.format("%X",java.awt.Color.RED.getRGB() & 0xffffff)); 
which gives FF0000 
+0

(В этом примере с настольного JavaSE вы можете обнаружить тонкие различия в Android.) –

Смежные вопросы