С BufferedImage (стандартный класс изображения в java) у вас есть два «хороших» решения для доступа к пикселям.
1 - Использование растра проще, потому что оно автоматически обрабатывает кодировку, но работает медленнее.
WritableRaster wr = image.getRaster() ;
for (int y=0, nb=0 ; y < image.getHeight() ; y++)
for (int x=0 ; x < image.getWidth() ; x++, nb++)
{
int r = wr.getSample(x, y, 0) ; // You just give the channel number, no need to handle the encoding.
int g = wr.getSample(x, y, 1) ;
int b = wr.getSample(x, y, 2) ;
}
2 - Использование DataBuffer, быстро, потому что прямой доступ к пикселям, но вы должны обрабатывать кодировку.
switch (image.getType())
{
case BufferedImage.TYPE_3BYTE_BGR : // Classical color images encoding.
byte[] bb = ((DataBufferByte)image.getRaster().getDataBuffer()).getData() ;
for (int y=0, pos=0 ; y < image.getHeight() ; y++)
for (int x=0 ; x < image.getWidth() ; x++, pos+=3)
{
int b = bb[pos] & 0xFF ;
int g = bb[pos+1] & 0xFF ;
int r = bb[pos+2] & 0xFF ;
}
break ;
}
getRGB() легко, но намного медленнее и не проще, чем растровый, поэтому просто запретите его.
Что вы нашли до сих пор? –