2012-05-16 7 views
-2

У меня есть массив байтов:Как преобразовать ARGB в массив RGB байтов?

byte[] blue_color = {-1,0,112,-64}; 

Как преобразовать в массив байтов в RGB?

А также как я могу получить реальное значение RGB для цвета?

+0

Возможно, вам стоит узнать, что такое ARGB и что такое RGB ... – Sulthan

+0

так вот почему я спрашиваю – kenny

+0

Нет, вы спрашиваете что-то совершенно другое. – Sulthan

ответ

1

Как конвертировать ARGB массив в RGB?


byte[] argb = ...; 
byte[] rgb = new byte[(argb.length/4) * 3]; 

int index = rgb.length - 1; 

for (int i = argb - 1; i >= 0; i -= 4) { 
    rgb[index--] = argb[i]; 
    rgb[index--] = argb[i - 1]; 
    rgb[index--] = argb[i - 2]; 
} 

Как напечатать целое значение:



byte[] oneColor = {..., ..., ..., ...}; 

int alpha = oneColor[0] & 0xFF; 
int red = oneColor[1] & 0xFF; 
int green = oneColor[2] & 0xFF; 
int blue = oneColor[3] & 0xFF; 

System.out.println("Color: " + alpha + ", " + red + ", " + green ", " + blue); 

System.out.println("Hexa color: 0x" + Integer.toHexString(alpha) + " " + Integer.toHexString(red) + " " + Integer.toHexString(green) + " " + Integer.toHexString(blue)); 

Может быть сделано хорошеет с printf.

2

Предполагая, что это первый элемент, компонент-A:

byte[] rgb = Arrays.copyOfRange(blue_color, 1, 4); 

Чтобы получить «реальное» значение цвета, вам нужно отменить двоичное дополнение представления:

int x = (int)b & 0xFF; 
+0

нет метода copyOfRange (я использую java 1.5) – kenny

+0

@kenny Затем используйте 'System.arraycopy()'. –

+0

Как использовать 'System.arraycopy', когда он хочет пропустить один элемент? – Sulthan

0

Как конвертировать в байтовый массив RGB?

byte[] rgb = new byte[3]; 
System.arraycopy(blue_color, 1, rgb, 0, 3); 

А также, как я могу получить реальное значение RGB цвета?

int red = rgb[0] >= 0 ? rgb[0] : rgb[0] + 256; 
int green = rgb[1] >= 0 ? rgb[1] : rgb[1] + 256; 
int blue = rgb[2] >= 0 ? rgb[2] : rgb[2] + 256; 
+0

Это не так. 256 следует добавить к отрицательным значениям. – Sulthan

+0

@OliCharlesworth oops, я имел в виду '+ 256';) –

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