Java-读取压缩位图



我想读取位图的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,而不是0255,0红色像素的读数为5,5,5,而不是255,0,0黄色像素将读取8,8,8,而不是255255,0

我使用的位图只包括红色、黄色和绿色。我的问题是,如果不手动检查颜色2,2,2,我就无法知道它与什么颜色有关(我不能这样做,因为它随每个位图而变化(

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

这并不是Java从图像中获取像素数组的复制,因为它并没有提到压缩文件。虽然我之前确实问过这个问题,但它只是被重定向到了上面的网站。

提前感谢!

编辑:我只是觉得这可能会让问题更清楚一些。我相信文件被正确读取了,它只是被压缩了。如何解压缩?

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

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

检查此答案:如何在TYPE_3BYTE_BGR中获取jpeg图像的rgb值?

希望这能帮助

最新更新