从DataBuffer字节数组中获取R G B颜色
问题描述:
这几行代码检索图像所有像素的数组。从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 ...
答
假设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)];
我怎么能说getPixel一个简单的字节数组()方法?!? – myro
是的,我需要非常快速的访问。我编辑了这个问题 – myro