Java-读取压缩的位图

时间:2018-07-22 13:27:00

标签: java bitmap

我希望读入位图的RGB值(或十六进制颜色代码,两者均可)。

我已经尝试了这两个代码:

 File image = serverConfig.get(map.bmp);
BufferedImage buffer = ImageIO.read(image);
dimX = buffer.getWidth();
dimY = buffer.getHeight();
byte[] pixlesB = (byte[]) buffer.getRaster().getDataElements(0, 0, buffer.getWidth(), buffer.getHeight(), null);

和此代码:

File image = serverConfig.get(map.bmp);
BufferedImage buffer = ImageIO.read(image);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(buffer, "bmp", baos );
baos.flush();
byte[] pixlesB = baos.toByteArray();
baos.close();

对于较小的位图,两者都可以正常工作,但是当我加载较大的位图时,数据将被压缩,并且数组将返回一堆半随机数。

例如: 绿色像素将显示为2,2,2,而不是0,255,0 红色像素将显示5,5,5而不是255,0,0 黄色像素将显示8,8,8而不是255,255,0

我使用的位图仅包括红色,黄色和绿色。 我的问题是,如果不手动检查,就无法知道2、2、2与什么颜色有关(由于每个位图都会改变颜色,所以我无法做到这一点)

我知道位图中有一些元数据指定2为绿色,但我不知道如何访问它或使用它将2变为0,255,0

这不是Java - get pixel array from image的副本,因为它没有提到压缩文件。 虽然我前一段时间确实问过这个问题,但它只是被重定向到上述站点。

谢谢!

编辑:只是认为这可能会使问题更清楚。我相信文件已正确读取,只是被压缩了。如何解压缩?

1 个答案:

答案 0 :(得分:0)

如果要以位图或rgb值的形式读取图像,则需要先转换图像的格式。

Jpeg是一种压缩图像格式,您需要使用工具或库才能将其读为rgb。

检查以下答案: How to get the rgb values of a jpeg image in TYPE_3BYTE_BGR?

希望这会有所帮助