从DataBuffer字节数组中获取RGB颜色

3
这几行代码可以获取图片的所有像素并存储在一个数组中。
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...
1个回答

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

文档中可以了解到还有其他几种图像类型需要考虑。

访问方法基本上保持不变,您只需具有不同的颜色排序或额外的 alpha 通道即可。但是对于那些带有4个通道的像素,您必须调整像素(x,y)的第一个通道的公式为:

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

我该如何在简单的字节数组上调用getPixel()方法?!? - myro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接