查询图像方向

时间:2014-05-07 18:33:21

标签: java bufferedimage javax.imageio bmp

我正在使用与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的像素方向/布局?

1 个答案:

答案 0 :(得分:1)

我已经检查了Java 7 BMPImageReader的源代码,并且在读取时它确实从自下而上转换为自上而下的顺序,正如我预期的那样。因此,DataBuffer的后备阵列将处于正常的自上而下顺序。我无法在Windows上使用Oracle Java 7 JRE重现此行为。

OP已经验证问题确实存在于代码的另一部分,而不是作为问题的一部分发布。

我认为所描述的内容可能是可能的,使用SampleModel的特殊子类来转换所有传入的y坐标,但是没有标准方法来查询方向(所有{{1}假设是自上而下的。)

无论如何,为了好玩,我创建了一些代码,以测试它是否完全可能。下面是一个完全可运行的例子。

Rasters