2016-07-02 3 views
2

Я хочу преобразовать цвет int в массив байтов rgb. Я использую ColorPickerDialog (ColorPickerDialog).Java Android Studio Color Int to byte

Если я выберем цвет (скажем, синий), я получу значение Integer: -16775425.

Это соответствует 0xFF 00 06 FF в гексагоне.

Насколько мне известно, красный: 0x0, зеленый: 0x06, синий: 0xFF. Если я тестирую его в MS-Paint (0006FF), я получу синий цвет.

Если я пытаюсь Converte целого значения в массив байт с помощью следующего кода:

public byte [] getColorByte(int color1){ 
    byte[] color = new byte[3]; 
    color[2] = (byte) (color1 & 0xFF); 
    color[1] = (byte) ((color1 >> 8) & 0xFF); 
    color[0] = (byte) ((color1 >> 16) & 0xFF); 
    return color; 

Я получаю массив байт с [0,6, -1].

Но если я хочу, чтобы установить фоновый цвет кнопки с функцией Color.rgb:

btn.setBackgroundColor(Color.rgb(getColorByte(color1)[0],getColorByte(int color1)[1],getColorByte(int color1)[2])); 

Я только получить белые кнопки.

На мой взгляд, проблема в том, что 255 = FF! = -1. Это верно? Как я могу разбить целое число на значения RGB? (3 байтовый массив).

Спасибо !!!

FYI: Я знаю, что я могу изменить цвет фона с целым числом, но я хочу, чтобы получить массив RGB :-)

+1

Попробуйте сохранить массив цветов как 'int []', а не 'byte []', чтобы вы не получили отрицательные числа. –

+0

Спасибо, еще один вопрос: как я могу вернуться из [0,6, -1] байт-массива в -16775425 Int Value? Благодаря!! –

ответ

0

Чтобы ответить на ваш второй вопрос (один о преобразовании массива обратно в intger) следующий код:

int answer = color[2]; 
answer += color[1] << 8; 
answer += color[0] << 16; 

Это в основном обращает ваше действие.

+0

Спасибо! Но если я вернусь назад, я получу положительное целое число. Не отрицательный. Есть ли способ получить знаковое значение? –

+0

Вы протестировали его? Он все равно должен быть отрицательным выходом –

+0

Да, я его проверил .. hmmm –