Я искал эту же способность. Я не хотел перечислять все изображение целиком, поэтому я немного искал и использовал PixelGrabber.
Image img = Toolkit.getDefaultToolkit().createImage(filename);
PixelGrabber pg = new PixelGrabber(img, 0, 0, -1, -1, false);
pg.grabPixels(); // Throws InterruptedException
width = pg.getWidth();
height = pg.getHeight();
int[] pixels = (int[])pg.getPixels();
Вы можете использовать int[]
прямо здесь, пиксели в формате, определяемом ColorModel от pg.getColorModel()
, или вы можете изменить это значение false на true и установить значение RGB8-in-ints.
С тех пор я обнаружил, что классы Raster
и Image тоже могут это делать, и в javax.imageio.*
.
были добавлены некоторые полезные классы.
BufferedImage img = ImageIO.read(new File(filename)); // Throws IOException
int[] pixels = img.getRGB(0,0, img.getWidth(), img.getHeight, null, 0, img.getWidth());
// also available through the BufferedImage's Raster, in multiple formats.
Raster r = img.getData();
int[] pixels = r.getPixels(0,0,r.getWidth(), r.getHeight(), (int[])null);
В Raster
также есть несколько getPixels(...)
методов.