【问题标题】:Java - reading a compressed bitmapJava - 读取压缩位图
【发布时间】:2018-07-22 13:27:00
【问题描述】:

我希望读取 位图 的 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 的重复,因为它没有提到压缩文件。 虽然前段时间我确实问过这个问题,但它只是被重定向到上述网站。

提前致谢!

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

【问题讨论】:

标签: java bitmap


【解决方案1】:

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

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

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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    相关资源
    最近更新 更多