Java 从DataBuffer字节数组获取R G B颜色

Java 从DataBuffer字节数组获取R G B颜色,java,bufferedimage,Java,Bufferedimage,这几行检索图像中所有像素的数组 ImageInputStream is = ImageIO.createImageInputStream(f); Iterator iter = ImageIO.getImageReaders(is); ImageReader imageReader = (ImageReader) iter.next(); imageReader.setInput(is); BufferedImage image = imageReader.read(0); final byte

这几行检索图像中所有像素的数组

ImageInputStream is = ImageIO.createImageInputStream(f);
Iterator iter = ImageIO.getImageReaders(is);
ImageReader imageReader = (ImageReader) iter.next();
imageReader.setInput(is);
BufferedImage image = imageReader.read(0);
final byte[] a = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
如何检索像素的实际RGB通道(例如0,0)

编辑
我使用此阵列是因为可以更快地访问图像。这就是为什么我不使用更高的API方法,如getRGB或getSample…

假设
image.getType()==TYPE\u INT\u RGB
那么您有一个如下数组:

R, G, B, R, G, B, R, G, B, ...
您可以通过以下方式访问像素(x,y)的值:

<> p>有几个其他的图像类型需要考虑,因为你可以在

中读取。 访问方法基本上保持不变,只是有不同的颜色顺序或附加的alpha通道。但是,对于这4个通道像素,必须将像素的第一个通道(x,y)的公式调整为

如何在一个简单的字节数组上调用getPixel()方法?!?
int width = image.getWidth();

...

byte R = a[3*(x+y*width)];
byte G = a[1+3*(x+y*width)];
byte B = a[2+3*(x+y*width)];
byte A = a[4*(x+y*width)];