Ответ 1
Вы получаете отрицательные числа, так как значение int, которое вы получаете от одного из пикселей, состоит из красного, зеленого, синего и альфа. Вам нужно разделить цвета, чтобы получить значение для каждого цветового компонента.
Самый простой способ сделать это - создать объект Color
и использовать getRed
, getGreen
и getBlue
(а также getAlpha
) для получения компонентов:
public static void main(String... args) throws Exception {
BufferedImage image = ImageIO.read(
new URL("http://upload.wikimedia.org/wikipedia/en/2/24/Lenna.png"));
int w = image.getWidth();
int h = image.getHeight();
int[] dataBuffInt = image.getRGB(0, 0, w, h, null, 0, w);
Color c = new Color(dataBuffInt[100]);
System.out.println(c.getRed()); // = (dataBuffInt[100] >> 16) & 0xFF
System.out.println(c.getGreen()); // = (dataBuffInt[100] >> 8) & 0xFF
System.out.println(c.getBlue()); // = (dataBuffInt[100] >> 0) & 0xFF
System.out.println(c.getAlpha()); // = (dataBuffInt[100] >> 24) & 0xFF
}
Выходы:
173
73
82
255