2011-11-24 40 views
3

这几行代码检索图像所有像素的数组。从DataBuffer字节数组中获取R G B颜色

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(); 

如何取回实际R G B通道的像素(例如0,0)?

编辑 我使用这个数组是因为更快地访问图像。这就是为什么我不使用更高的API的方法,如的getRGB的getSample ...

回答

6

假设image.getType() == TYPE_INT_RGB那么你有一个这样的数组:

R, G, B, R, G, B, R, G, B, ... 

您可以访问像素的值(X,Y)通过

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)]; 

还有其他一些imagetypes考虑,你可以在阅读documentation

访问方法基本保持不变,您只是有不同的颜色排序或额外的alpha通道。然而,对于那些4个像素你必须为像素(X,Y)的第一通道的表现公式调整为

byte A = a[4*(x+y*width)]; 
+0

我怎么能说getPixel一个简单的字节数组()方法?!? – myro

+0

是的,我需要非常快速的访问。我编辑了这个问题 – myro

相关问题