Преобразовать необработанное отрицательное значение rgb int обратно в значение rgb из 3 чисел - PullRequest
6 голосов
/ 03 апреля 2011

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

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

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

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

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

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

Ответы [ 2 ]

11 голосов
/ 03 апреля 2011

Метод 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) конструктор для удобства (за счет производительности).

2 голосов
/ 03 апреля 2011
int pix = myImage.getRGB(0,0);
Color c = new Color(pix,true); // true for hasalpha
int red = c.getRed();
int green = c.getGreen();
int blue = c.getBlue();
...