Я видел поток при преобразовании BufferedImage в массив пикселей/байтов. Использование getRGB
непосредственно на изображении работает, но не идеально, поскольку слишком медленно собирать все пиксели. Я попробовал альтернативный способ просто захватить пиксельные данные.Java BufferedImage to pixel array
//convert canvas to bufferedimage
BufferedImage img = new BufferedImage(500, 500, BufferedImage.TYPE_3BYTE_BGR);
Graphics2D g2 = img.createGraphics();
canvas.printAll(g2);
g2.dispose();
System.out.println(img.getRGB(0, 0)); //-16777216 works but not ideal
byte[] pixels = ((DataBufferByte) img.getRaster().getDataBuffer()).getData();
for(byte b : pixels){
System.out.println(b); //all 0 doesnt work
}
Однако весь массив байтов кажется пустым (заполнен 0s).
Но это оставляет вопрос: почему работает 'getRGB'? – John
байт в java является подписанным типом. С его 8 бит вы можете отображать числа от -128 до +127. Однако байты изображения обычно не подписаны. Итак, что произойдет, если вы перейдете без знака байта 255 = (11111111) к подписанному? Проверьте http://en.wikipedia.org/wiki/Two%27s_complement – xmoex
Документ getRGB сообщает мне, что используемая модель TYPE_INT_ARGB. Возможно, есть значение для альфы. Я не хочу погружаться в это. Я попробовал другую функцию под названием getPixel. Поэтому img.getData(). GetPixel (...) заполняет массив int (в моем случае красного) 255,0,0. Мне кажется, что я краснею :) – chris