Преобразование необработанного отрицательного значения rgb int обратно в трехзначное значение rgb

Итак, я работаю над программой, которая принимает изображение, изолирует блок пикселей в массив, а затем получает каждое отдельное значение RGB для каждого пикселя в этом массиве.

Когда я делаю это

//first pic of image
//just a test
int pix = myImage.getRGB(0,0)
System.out.println(pix);

Выплевывает -16106634

Мне нужно получить значение (R, G, B) из этого значения int

Есть ли формула, алгоритм, метод?


person the-ben-waters    schedule 02.04.2011    source источник


Ответы (1)


BufferedImage.getRGB(int x, int y) всегда возвращает пиксель в цветовой модели TYPE_INT_ARGB. Итак, вам просто нужно выделить правильные биты для каждого цвета, например:

int pix = myImage.getRGB(0, 0);
int r = (pix >> 16) & 0xFF;
int g = (pix >> 8) & 0xFF;
int b = pix & 0xFF;

Если вам нужен альфа-компонент:

int a = (pix >> 24) & 0xFF;

В качестве альтернативы вы можете использовать конструктор Color(int rgba, boolean hasalpha) для удобства. (за счет производительности).

person WhiteFang34    schedule 03.04.2011
comment
Прохладный. Убедитесь, что вы скопировали битовые сдвиги в правильном направлении... Я действительно сделал опечатку в первый раз и исправил ее при редактировании. - person WhiteFang34; 03.04.2011