我正在使用与Java - get pixel array from image类似的代码,以便对BMP图像的像素数据进行低级访问,具体如下:
BufferedImage image = ImageIO.read(is);
DataBuffer buffer = image.getRaster().getDataBuffer();
byte[] rawPixels = ((DataBufferByte) buffer).getData();
结果数组从下到上排列(即,它的第一个字节是最后一个图像行的开头),考虑到BMP files usually have the same layout,这是有道理的。
我想通过在这种情况下翻转线来隐藏来自呼叫者的这种低级细节。有没有办法可以查询加载的BufferedImage
的像素方向/布局?
答案 0 :(得分:1)
我已经检查了Java 7 BMPImageReader
的源代码,并且在读取时它确实从自下而上转换为自上而下的顺序,正如我预期的那样。因此,DataBuffer
的后备阵列将处于正常的自上而下顺序。我无法在Windows上使用Oracle Java 7 JRE重现此行为。
OP已经验证问题确实存在于代码的另一部分,而不是作为问题的一部分发布。
我认为所描述的内容可能是可能的,使用SampleModel
的特殊子类来转换所有传入的y坐标,但是没有标准方法来查询方向(所有{{1}假设是自上而下的。)
无论如何,为了好玩,我创建了一些代码,以测试它是否完全可能。下面是一个完全可运行的例子。
Rasters